在日志采集的时候,默认采集是根据日志产生的行,如果是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
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏