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,然后将其删除.那会有用吗?
如果设置你的字段有兴趣知道的和明确的,你可以设置target为KV过滤器,用移动有趣的领域,以邮件的顶层发生变异过滤器,并与套叠的键/值对删除字段.我认为这几乎就是你最后提出的建议.
或者,您可以使用红宝石过滤器:
filter {
ruby {
code => "
event.to_hash.keys.each { |k|
if k.start_with?('rand')
event.remove(k)
end
}
"
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这个问题已经过时并且已经得到解答,但对于 2017 年开始研究它的任何人来说。有一个名为 的插件prune,允许您根据包括模式在内的差异标准进行修剪。
prune {
blacklist_names => ["[0-9]+", "unknown_fields", "tags"]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3327 次 |
| 最近记录: |