在 CentOS 上配置 Filebeat 多行日志采集(multiline),核心是在 filebeat.yml 中针对日志路径配置 multiline.pattern 等参数。下面按常见场景说明。
编辑 Filebeat 配置文件(通常路径):
/etc/filebeat/filebeat.yml
示例配置:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/app/*.log
# 多行配置
multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate: true
multiline.match: after
multiline.timeout: 5s
multiline.patternmultiline.negate
true:不匹配 pattern 的行,合并到上一行false:匹配 pattern 的行,合并到上一行multiline.match
after:追加到上一行后面before:插入到上一行前面multiline.timeout
超过该时间仍未遇到新行,强制提交✅ 上面例子表示:
不以日期开头的行,都合并到上一条日志中(适合 Java 异常堆栈)
multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}'
multiline.negate: true
multiline.match: after
[ 开头的日志(如某些框架)multiline.pattern: '^\['
multiline.negate: true
multiline.match: after
multiline.pattern: '^{'
multiline.negate: false
multiline.match: before
INFO/WARN/ERROR 开头multiline.pattern: '^(INFO|WARN|ERROR|DEBUG)'
multiline.negate: true
multiline.match: after
filebeat.inputs:
- type: log
paths:
- /var/log/app/app.log
multiline.pattern: '^[0-9]{4}-'
multiline.negate: true
multiline.match: after
- type: log
paths:
- /var/log/app/audit.log
multiline.pattern: '^audit'
multiline.negate: false
multiline.match: before
filebeat test config
filebeat test output
systemctl restart filebeat
systemctl status filebeat
journalctl -u filebeat -f
filebeat -e -c /etc/filebeat/filebeat.yml
如果你能提供 具体日志样例(比如 Java / Nginx / Docker / 自定义格式),我可以直接帮你写一份精准的 multiline 配置。