前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Filebeat自定义pipeline,完美处理自定义日志字段

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

作者头像
李俊鹏
发布2020-06-12 15:06:49
9K0
发布2020-06-12 15:06:49
举报
文章被收录于专栏:运维研习社运维研习社

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了

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档