filebeat采集所有日志

avatar 2020年6月17日18:02:23 评论 1,462 次浏览

在日志采集的时候,默认采集是根据日志产生的行,如果是nginx,还好,所有的请求都是一行一行的。但是像java程序,如果有堆栈信息,就会把有时间的行收集,但是行下的堆栈信息,就收集不到了,这在日志收集中是无法忍受的。这里我使用的是在Kubernetes上做日志收集,看一下我的filebeat文件

[root@wulaoer ~]#  cat filebeat-kafka.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: filebeat
  namespace: logging
  labels:
    k8s-app: filebeat
data:
  filebeat.yml: |-
    filebeat.inputs:
    - type: container
      paths:
        - /var/log/containers/*.log
      #日志收集多行
      multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}\ [0-9]{2}:[0-9]{2}:[0-9]{2}'
      multiline.negate: true
      multiline.match: after
      #这里可以给日志打一个标签
      tags: ["java-logs"]
      # 这个文件记录日志读取的位置,如果容器重启,可以从记录的位置开始取日志
      registry_file: /usr/share/filebeat/data/registry

      processors:
        - add_kubernetes_metadata:
            host: ${NODE_NAME}

这里主要记录,日志收集的全文,包含没有时间的行,也可以使用下面的方法

# 日志多行合并采集
multiline.pattern: '^\['
multiline.negate: true
multiline.match: after
# 为每个项目标识,或者分组,可区分不同格式的日志
tags: ["java-logs"]
# 这个文件记录日志读取的位置,如果容器重启,可以从记录的位置开始取日志
registry_file: /usr/share/filebeat/data/registry

两种方法均可收集到所有的日志内容,在kibana里就可以使用上下文显示了。可以参考:https://www.wulaoer.org/?p=1307

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: