温馨提示×

centos filebeat如何配置多行

小樊
38
2026-09-06 02:10:30
栏目: 智能运维

在 CentOS 上配置 Filebeat 多行日志(multiline),核心是在 filebeat.yml 中针对具体的 input 配置 multiline.patternmultiline.match 等参数。下面按常见场景给你说明。


一、基础示例(Java 异常日志)

例如日志格式如下:

2024-01-01 10:00:00 ERROR Exception in thread "main"
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 的行,合并到上一行
    • false:匹配 pattern 的行合并
  • multiline.match
    • after:把后续行追加到前面
    • before:把后续行放到前面
  • multiline.timeout 超过时间强制发送,防止一直等待

二、常见多行场景配置

1️⃣ 以时间开头(最常见)

multiline.pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'
multiline.negate: true
multiline.match: after

2️⃣ Java 异常(以 [ 或线程名开头)

multiline.pattern: '^\['
multiline.negate: true
multiline.match: after

3️⃣ 以 { 开头的 JSON 日志

multiline.pattern: '^\{'
multiline.negate: true
multiline.match: after

4️⃣ 堆栈信息(以空格或 Tab 开头)

multiline.pattern: '^[[:space:]]'
multiline.negate: false
multiline.match: after

三、容器中多行(Docker / Kubernetes)

如果是 Docker 日志:

filebeat.inputs:
- type: container
  paths:
    - /var/lib/docker/containers/*/*.log
  multiline.pattern: '^\d{4}-\d{2}-\d{2}'
  multiline.negate: true
  multiline.match: after

四、修改配置后操作(CentOS)

# 校验配置
filebeat test config

# 重启 filebeat
systemctl restart filebeat

# 查看状态
systemctl status filebeat

# 查看日志
journalctl -u filebeat -f

五、调试技巧

filebeat -e -c filebeat.yml

可以直接在前台运行,看是否合并正确。


如果你能贴一段真实日志样例,我可以直接帮你写精确的多行正则配置

0