在 CentOS 上配置 Filebeat 多行日志(multiline),核心是在 filebeat.yml 里对对应的 input 配置 multiline.pattern、multiline.match 等参数。
下面按常见场景说明。
例如日志如下:
2024-01-01 10:00:00 ERROR ...
java.lang.NullPointerException
at com.xxx.Test.main(Test.java:10)
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/app/*.log
multiline.pattern: '^\d{4}-\d{2}-\d{2}'
multiline.negate: true
multiline.match: after
multiline.timeout: 5s
multiline.pattern:匹配新日志行的开头multiline.negate: true:不匹配 pattern 的行,合并到上一行multiline.match: after:追加到上一行后面multiline.timeout:超过时间强制发送(防止最后一行不发送)multiline.pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'
multiline.negate: true
multiline.match: after
multiline.pattern: '^[[:space:]]'
multiline.negate: false
multiline.match: after
[ 开头(如某些框架)multiline.pattern: '^\['
multiline.negate: true
multiline.match: after
multiline.pattern: '^{'
multiline.negate: true
multiline.match: after
如果是 CentOS 本地日志文件,确保:
# 检查配置文件
filebeat test config
# 重启 filebeat
systemctl restart filebeat
# 查看状态
systemctl status filebeat
如果是容器日志:
filebeat.inputs:
- type: container
paths:
- '/var/lib/docker/containers/*/*.log'
multiline.pattern: '^\d{4}-\d{2}-\d{2}'
multiline.negate: true
multiline.match: after
# 前台运行,看是否合并成功
filebeat -e -c /etc/filebeat/filebeat.yml
或开启 debug:
logging.level: debug
❌ 多行不生效
✅ 确认:
enabled: true/var/lib/filebeat/registry 重新读)❌ 最后一行丢
✅ 加 multiline.timeout
如果你能贴一下具体日志格式(比如 Java / Nginx / Python),我可以直接帮你写一份可用的 filebeat.yml。