温馨提示×

centos filebeat如何设多行

小樊
42
2026-09-02 21:46:19
栏目: 智能运维

在 CentOS 上配置 Filebeat 多行日志(multiline),核心是在 filebeat.yml 里对对应的 input 配置 multiline.patternmultiline.match 等参数。

下面按常见场景说明。


一、基本配置示例(Java 异常日志)

例如日志如下:

2024-01-01 10:00:00 ERROR ...
java.lang.NullPointerException
    at com.xxx.Test.main(Test.java:10)

filebeat.yml

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:超过时间强制发送(防止最后一行不发送)

二、常见模式示例

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

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

2️⃣ Java 堆栈(以空格或 Tab 开头)

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

3️⃣ 以 [ 开头(如某些框架)

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

4️⃣ JSON 日志(一行一条)

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

三、从文件读取(非容器)

如果是 CentOS 本地日志文件,确保:

# 检查配置文件
filebeat test config

# 重启 filebeat
systemctl restart filebeat

# 查看状态
systemctl status filebeat

四、Docker / Kubernetes 日志

如果是容器日志:

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
  • 文件路径正确
  • 旧日志已被 registry 记录(可删 /var/lib/filebeat/registry 重新读)

❌ 最后一行丢
✅ 加 multiline.timeout


如果你能贴一下具体日志格式(比如 Java / Nginx / Python),我可以直接帮你写一份可用的 filebeat.yml

0