从模式中删除事件

bar*_*nyr 3 elasticsearch logstash

所以我使用标准的ELK堆栈来分析Apache访问日志,这种方式运行良好,但我希望使用KV过滤器将URL参数分解为字段,以便我可以编写更好的查询.

我的问题是,我正在分析的应用程序具有"缓存破坏"动态生成的参数,这导致成千上万的"字段",每个字段发生一次.ElasticSearch似乎对此有严重的麻烦,它们对我没有任何价值,所以我想删除它们.以下是该模式的示例

GET /page?rand123PQY=ABC&other_var=something GET /page?rand987ZDQ=DEF&other_var=something

在上面的示例中,我要删除的参数以'rand'开头.目前我的logstash.conf使用grok从访问日志中提取字段,然后使用kv提取查询字符串参数:

filter { grok { path => "/var/log/apache/access.log" type => "apache-access" } kv { field_split => "&?" } } 有没有办法可以过滤掉与模式匹配的任何字段rand[A-Z0-9]*=[A-Z0-9]*?我见过的大多数示例都是按照确切名称定位字段,我无法使用.我确实想知道将请求字段重新编写到一个新字段中,在其上运行KV,然后将其删除.那会有用吗?

Mag*_*äck 7

如果设置你的字段兴趣知道的和明确的,你可以设置targetKV过滤器,用移动有趣的领域,以邮件的顶层发生变异过滤器,并与套叠的键/值对删除字段.我认为这几乎就是你最后提出的建议.

或者,您可以使用红宝石过滤器:

filter {
  ruby {
    code => "
      event.to_hash.keys.each { |k|
        if k.start_with?('rand')
          event.remove(k)
        end
      }
    "
  }
}
Run Code Online (Sandbox Code Playgroud)


Kel*_*vin 5

我知道这个问题已经过时并且已经得到解答,但对于 2017 年开始研究它的任何人来说。有一个名为 的插件prune,允许您根据包括模式在内的差异标准进行修剪。

prune {
    blacklist_names => ["[0-9]+", "unknown_fields", "tags"]
}
Run Code Online (Sandbox Code Playgroud)