温馨提示×

centos filebeat怎样多行处理

小樊
43
2026-10-05 21:34:24
栏目: 智能运维

在 CentOS 上使用 Filebeat 做多行日志(multiline)处理,核心是在 filebeat.yml 中配置 multiline 参数。下面按常见场景给你说明。


一、基本配置位置

编辑 Filebeat 配置文件(通常路径):

/etc/filebeat/filebeat.yml

在 filebeat.inputs 里添加 multiline 配置,例如:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/app/*.log

  multiline:
    pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
    negate: true
    match: after

二、关键参数说明

1️⃣ pattern

正则表达式,用来识别“新日志行的开始”

示例:

  • Java 异常:'^[0-9]{4}-[0-9]{2}-[0-9]{2}'
  • 以时间开头:'^\d{2}:\d{2}:\d{2}'
  • 以 [ 开头:'^\['

2️⃣ negate

  • true:不匹配 pattern 的行,合并到上一行
  • false:匹配 pattern 的行,合并到上一行

✅ 最常见用法是 negate: true


3️⃣ match

  • after:把后续行追加到上一行后面
  • before:把后续行放到下一行前面

一般使用:

match: after

三、常见示例

✅ 示例 1:Java 堆栈异常合并

multiline:
  pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}'
  negate: true
  match: after

效果:

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

→ 合并为一条事件


✅ 示例 2:以 [ 开头的日志

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

✅ 示例 3:以时间戳开头(如 Nginx / 自定义日志)

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

四、多文件不同规则(推荐)

filebeat.inputs:
- type: log
  paths:
    - /var/log/java/*.log
  multiline:
    pattern: '^[0-9]{4}-'
    negate: true
    match: after

- type: log
  paths:
    - /var/log/nginx/*.log
  multiline:
    pattern: '^\d{2}/'
    negate: true
    match: after

五、验证配置是否生效

# 测试配置
filebeat test config

# 前台运行(调试)
filebeat -e -c /etc/filebeat/filebeat.yml

六、注意事项(很重要)

  1. Filebeat 只能对“新写入”的日志生效
    • 已存在的历史日志可能不会重新合并
  2. 若之前已运行,建议:
    rm -f /var/lib/filebeat/registry/*
    systemctl restart filebeat
    
  3. 输出到 ES / Logstash 前,多行已合并完成

如果你能贴出具体日志格式(例如 Java / Python / Nginx),我可以帮你写精准的 multiline 正则。

0 踩