温馨提示×

centos filebeat如何配置多行日志

小樊
54
2026-08-18 20:33:59
栏目: 智能运维

CentOS 上使用 Filebeat 处理多行日志(multiline),核心是在 filebeat.yml 中配置 multiline 规则。下面按常见场景给你一个完整、可直接用的说明。


一、适用场景示例

常见需要多行合并的日志:

  • Java 异常堆栈
  • Python traceback
  • 以时间开头的日志
  • [INFO][ERROR] 开头的日志

二、Filebeat 多行配置核心参数

filebeat.inputs 中配置:

multiline:
  type: pattern
  pattern: '正则表达式'
  negate: true
  match: after

参数说明

参数 说明
pattern 匹配“新日志开始行”的正则
negate 是否反转匹配
match after:把不匹配的行合并到上一行
before:合并到下一行

三、常见配置示例

✅ 1. Java 异常日志(最常用)

日志示例:

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

✅ 含义:

  • 以日期开头的行是新日志
  • 不是日期开头的行,合并到上一行

✅ 2. Java 异常(以 Exception / at 开头)

multiline:
  pattern: '^[[:space:]]+(at|\.{3})'
  negate: false
  match: after

或:

multiline:
  pattern: '^(\t| )+(at|java\.|Caused by:)'
  negate: false
  match: after

✅ 3. 以 [INFO][ERROR] 开头的日志

multiline:
  pattern: '^\[(?:INFO|ERROR|WARN|DEBUG)\]'
  negate: true
  match: after

✅ 4. JSON 日志(每行一个 JSON)

multiline:
  pattern: '^{'
  negate: false
  match: after

四、完整 filebeat.yml 示例(CentOS)

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

六、常见问题排查

❌ 多行没有合并?

  1. 正则不匹配

    grep -P '^\d{4}-\d{2}-\d{2}' app.log
    
  2. Filebeat 已读取过文件

    • 删除 registry:
    rm -rf /var/lib/filebeat/registry
    
  3. 日志编码问题

    • 确认是 UTF-8

七、CentOS 常见路径

项目 路径
配置文件 /etc/filebeat/filebeat.yml
二进制 /usr/bin/filebeat
数据目录 /var/lib/filebeat/
日志 /var/log/filebeat/

如果你愿意,可以把 你的日志样例贴出来,我可以直接帮你写一份 100%可用的 multiline 配置

0