k8s中filebeat使用multiline合并日志
介绍业务上线到k8s,日志接入到elfkk,filebeat收集pod日志方法见这里。由于日志中有java的报错日志,还有sql的查询语句,导致kibana展示日志时,一行sql就是一条日志,占用大量空间不说,还不方便查询。这个时候需要用到multiline,这个参数,可以在logstash中配置,也可以在filebeat中配置,经过测试,logstash中,存在无序及不完整性,这里不过多阐...
介绍
业务上线到k8s,日志接入到elfkk,filebeat收集pod日志方法见这里。
由于日志中有java的报错日志,还有sql的查询语句,导致kibana展示日志时,一行sql就是一条日志,占用大量空间不说,还不方便查询。
这个时候需要用到multiline,这个参数,可以在logstash中配置,也可以在filebeat中配置,经过测试,logstash中,存在无序及不完整性,这里不过多阐述。
从源头控制日志输出,所以选择在filebeat中使用multiline参数
部分yaml配置
k8s官网给的yaml文件,configMap中有这么一段
data:
kubernetes.yml: |-
- type: docker
containers.ids:
- "*"
processors:
- add_kubernetes_metadata:
in_cluster: true
说明:
type指定了prospectors的类型为docker,表示收集本机的docker日志。
containers.ids为*表示监听所有容器。
type除了docker,一般使用更多的是log,可以直接指定任何路径上的日志文件,参见官方文档
处理
官网说:
multiline
Options that control how Filebeat deals with log messages that span multiple lines. See Manage multiline messages for more information about configuring multiline options.
既然官网说可以用,那么我们就把multiline加到type: docker的配置下面就好了
最终配置:
data:
kubernetes.yml: |-
- type: docker
containers.ids:
- "*"
multiline.pattern: '^\[|^[0-9]{4}-[0-9]{2}-[0-9]{2}|^[0-9]{1,3}\.[0-9]{1,3}'
multiline.negate: true
multiline.match: after
multiline.timeout: 15s
processors:
- add_kubernetes_metadata:
in_cluster: true
过滤的是以[2019-xx]或2019-xx或172.16这种ipv4地址开头的日志
final
重新加载配置,并重启filebeat,观察kibana,ok了
更多推荐
所有评论(0)