在 CentOS 上使用 Filebeat 处理多行日志(multiline),核心是在 filebeat.yml 中配置 multiline 规则。下面按常见场景给你一个完整、可直接用的说明。
常见需要多行合并的日志:
[INFO]、[ERROR] 开头的日志在 filebeat.inputs 中配置:
multiline:
type: pattern
pattern: '正则表达式'
negate: true
match: after
| 参数 | 说明 |
|---|---|
pattern |
匹配“新日志开始行”的正则 |
negate |
是否反转匹配 |
match |
after:把不匹配的行合并到上一行before:合并到下一行 |
日志示例:
2024-01-01 10:00:00 ERROR Exception in thread "main"
java.lang.NullPointerException
at com.test.Main.main(Main.java:10)
配置:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/app/app.log
multiline:
pattern: '^\d{4}-\d{2}-\d{2}'
negate: true
match: after
✅ 含义:
Exception / at 开头)multiline:
pattern: '^[[:space:]]+(at|\.{3})'
negate: false
match: after
或:
multiline:
pattern: '^(\t| )+(at|java\.|Caused by:)'
negate: false
match: after
[INFO]、[ERROR] 开头的日志multiline:
pattern: '^\[(?:INFO|ERROR|WARN|DEBUG)\]'
negate: true
match: after
multiline:
pattern: '^{'
negate: false
match: after
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/app/*.log
multiline:
pattern: '^\d{4}-\d{2}-\d{2}'
negate: true
match: after
output.elasticsearch:
hosts: ["localhost:9200"]
logging.level: info
filebeat test config
filebeat test output
正则不匹配
grep -P '^\d{4}-\d{2}-\d{2}' app.log
Filebeat 已读取过文件
rm -rf /var/lib/filebeat/registry
日志编码问题
| 项目 | 路径 |
|---|---|
| 配置文件 | /etc/filebeat/filebeat.yml |
| 二进制 | /usr/bin/filebeat |
| 数据目录 | /var/lib/filebeat/ |
| 日志 | /var/log/filebeat/ |
如果你愿意,可以把 你的日志样例贴出来,我可以直接帮你写一份 100%可用的 multiline 配置。