返回介绍

filter配置 - kv

发布于 2020-06-28 10:03:42 字数 3091 浏览 1369 评论 0 收藏 0

在很多情况下,日志内容本身都是一个类似于 key-value 的格式,但是格式具体的样式却是多种多样的。logstash 提供 filters/kv 插件,帮助处理不同样式的 key-value 日志,变成实际的 LogStash::Event 数据。

配置示例

  1. filter {
  2. ruby {
  3. init => "@kname = ['method','uri','verb']"
  4. code => "
  5. new_event = LogStash::Event.new(Hash[@kname.zip(event.get('request').split('|'))])
  6. new_event.remove('@timestamp')
  7. event.append(new_event)
  8. "
  9. }
  10. if [uri] {
  11. ruby {
  12. init => "@kname = ['url_path','url_args']"
  13. code => "
  14. new_event = LogStash::Event.new(Hash[@kname.zip(event.get('uri').split('?'))])
  15. new_event.remove('@timestamp')
  16. event.append(new_event)
  17. "
  18. }
  19. kv {
  20. prefix => "url_"
  21. source => "url_args"
  22. field_split => "&"
  23. remove_field => [ "url_args", "uri", "request" ]
  24. }
  25. }
  26. }

解释

Nginx 访问日志中的 $request,通过这段配置,可以详细切分成 method, url_path, verb, url_a, url_b

进一步的,如果 url_args 中有过多字段,可能导致 Elasticsearch 集群因为频繁 update mapping 或者消耗太多内存在 cluster state 上而宕机。所以,更优的选择,是只保留明确有用的 url_args 内容,其他部分舍去。

  1. kv {
  2. prefix => "url_"
  3. source => "url_args"
  4. field_split => "&"
  5. include_keys => [ "uid", "cip" ]
  6. remove_field => [ "url_args", "uri", "request" ]
  7. }

上例即表示,除了 url_uidurl_cip 两个字段以外,其他的 url_* 都不保留。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文