一尘不染

按模式从事件中删除字段

elasticsearch

因此,我使用标准的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,然后将其删除。那行得通吗?


阅读 373

收藏
2020-06-22

共1个答案

一尘不染

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

另外,您可以使用ruby过滤器

filter {
  ruby {
    code => "
      event.to_hash.keys.each { |k|
        if k.start_with?('rand')
          event.remove(k)
        end
      }
    "
  }
}
2020-06-22