专栏首页运维研习社Filebeat自定义pipeline,完美处理自定义日志字段

Filebeat自定义pipeline,完美处理自定义日志字段

filebeat是本地文件日志数据采集器,通常用作ELK中的日志采集,将采集的日志数据传输到elasticsearch,当需要进行数据处理时,先传入logstash,经过logstash处理后再存入elasticsearch

当filebeat收集的日志量大,传输到elasticsearch来不及处理时,需要先传到kafka或redis队列,再存入elasticsearch

这是目前很多ELK的架构,但现在的filebeat,已经不在只是日志收集工具,它内置了很多模块,可以做到日志收集、解析整个过程,目前支持的日志模块已经覆盖很全了

基本流行的中间件、应用日志,都有覆盖到

所以对于基础日志,现在完全可以用filebeat进行数据解析,而不需要自己再去logstash写匹配

filebeat可以将数据进行预处理,然后输出到elasticsearch。filebeat对数据的解析,都是通过ingest节点进行预处理,filebeat中默认定义了ingest的pipeline

这些pipeline,都在filebeat安装后的/usr/share/filebeat/modules各个模块下进行定义

如果你的日志格式是默认的,没有进行自定义,那么filebeat自带的pipeline解析完全够用,并且处理的很好,比如nginx日志处理后的字段

截图中只是很少一部分,在filebeat的nginx模块中包括了http、host、agent、source等所有字段的解析,如果使用的是默认的日志格式,完全不需要你手动解析,可以通过filebeat的解析,组合出一套炫酷的Dashboard

但是,很多时候默认的模板无法满足我们的需求,我们需要添加一些字段,或者一些自定义的字段,这个时候,我们需要去手动修改pipeline,或者手动写一个pipeline,添加对应的procesors来处理对应的日志字段

举例来说,通常nginx前面我们会添加CDN,这样在nginx日志中,通过remote ip获取到的是CDN节点的IP,而不是真实客户端的IP,这个IP对于我们分析日志来说完全没有意义的,我们需要获取真实客户端IP,在nginx的日志格式中,通常通过http_x_forwarded_for来获取代理ip的列表,所以在pipeline中需要添加grok来进行匹配这个字段,获取真实客户端IP

这样,我通过grok处理message字段的时候,将message字段中的http_x_forwarded_for匹配为nginx.access.xff,这个自己定义,这个后面要用到,在kibana中map里面展示用户请求的map的时候,是通过geo.location来定位用户位置的,而这个geo.location就是通过ip匹配geoip数据库来获取坐标实现定位的

原先的geoip处理器是通过source.ip字段获取IP地址,在GeoLite2数据库中查询的,而source.ip是通过grok处理source.address得到的,source.address是匹配$remote_host得来的,所以这里获取到的,其实就是上一层代理的IP,对于我来说,就是CDN节点的IP地址,所以在map中展示的位置就那么几个CDN节点数据中心的位置,而且计算出的UV也是有问题的

所以这里需要修改geoip处理的field,改为使用刚才grok处理过的nginx.access.xff来作为用户真实ip地址进行解析,这样在kibana中添加map的时候,获取到的才是真实的用户地址

完成pipeline的修改,或者编写后,保存为json文件,需要将pipeline PUT到elasticsearch

从kibana上通过的dev tools查看该pipeline

接着修改manifest.yml,修改nginx模块调用的pipeline

修改完成后,重启filebeat,可以从filebeat日志中看到加载的pipeline已经更改了

接着可以查看elasticsearch中的数据了

可以看到nginx.access.xff对应的是http_x_forward-for对应的客户端真实IP,而geoip获取到的信息也是真实IP对应的信息,cdn的IP地址是深圳的,而客户真实IP是在广州的,也可以通过坐标反差可以确认

这样就通过修改filebeat的pipeline,新增或修改日志字段,这里顺便加了nginx的request_time和upstream_response_time,可以通过kibana的Timelion来创建nginx响应时间的实时统计图,以此来监测nginx性能

filebeat支持的pipeline的处理器很多,可以通过官网文档查看

https://www.elastic.co/guide/en/elasticsearch/reference/7.6/ingest-processors.html

不管是用logstash还是用filebeat,比较麻烦的地方是写grok,在kibana的dev tools中提供了grok debugger调试工具,方便调试,调试完成后,就可以自定义pipeline,随意处理日志

但是grok有性能问题,如果日志量大的话,不建议这么做,不过话说回来,日志量大的话,也就不会直接filebeat传es了

本文分享自微信公众号 - 运维研习社(gh_4135e2716ad3),作者:运维研习社

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 高并发调优backlog多大合适?

    那么对于nginx,对于php-fpm,backlog应该设置多大,是越大越好吗?backlog怎么设置合适?这是上篇文章中遗留的几个问题

    李俊鹏
  • 几种方法有效屏蔽国外IP恶意扫描

    最近有朋友说,查看nginx访问日志,发现大量的恶意扫描,分析发现比正常业务访问量都大,且IP大部分来自国外,服务器用的按量付费,这刷的都是白花花的银子,想问下...

    李俊鹏
  • 我的服务器被SSH暴力登录了吗?

    上面截图的这块日志,是CentOS7系统,messages中的一段日志,很多人在排查问题的时候,看到messages里面大量的这种类型的日志,都是一脸懵逼,搜索...

    李俊鹏
  • 教你如何获取IP地址侦测用户来源可视化分析

    假设一家商业网站开发了软件产品,他们希望知道都是来自哪里的用户下载或更新我们的软件,并进行可视化分析。

    华章科技
  • 王者荣耀大数据运营总结

    围绕王者荣耀大数据运营,依托对局日志和好友关系,开展了王者周报、赛季总结和周年庆活动等项目。这些案例中,遇到了哪些挑战?

    旺仔小小鹿
  • Myself

    我大学专业是计科,从大一就开始自学前端,认为现在传统大学目前对于互联网的教育,过于落后。例如一些技术、教学方法。当然我也只是发表我的个人观点。

    岚孩子
  • 带你玩转自定义view系列

    View是Android所有控件的基类,接下来借鉴网上的一张图片让大家一目了然(图片出自:http://blog.51cto.com/wangzhaoli/12...

    Android技术干货分享
  • Linux中文件系统注册及mount过程分析5

    这些介绍了从读超级快,获得磁盘的块的属性,然后进行了sops注册,然后进入ext4_iget进行了文件操作,目录操作,链接操作等函数的注册,比如读文件

    用户3765803
  • 视频更新|斯坦福CS231n深度学习与计算机视觉课时12-神经网络训练细节part2(下)

    大数据文摘
  • Extjs 项目中常用的小技巧,也许你用得着(5)--设置 Ext.data.Store 传参的请求方式

    1.extjs 给怎么给panel设背景色 设置bodyStyle:'background:#ffc;padding:10px;', var resultsPa...

    hbbliyong

扫码关注云+社区

领取腾讯云代金券