介绍

业务上线到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了

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐