You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Fluentd的单个parse段中配置3个正则表达式解析多格式多行日志

Fluentd 单文件多类型日志+多行解析配置方案

Fluentd 内置的 multiline 解析器原生支持在单个 <parse> 配置段内按顺序定义多条正则规则,规则命名为 format1、format2、format3……依次递增即可,解析时会从上到下匹配规则,命中后就会按对应规则提取字段,配合 format_firstline 即可实现多行日志的边界识别。

配置修改说明

  • 首先调整 format_firstline 的正则,确保能覆盖所有类型日志的首行特征,用来判断新一条日志的起始位置,避免多行内容串到其他日志条目里
  • 按你需要的规则顺序添加 formatN 条目,匹配优先级更高的日志格式往前放,降低匹配开销
  • 最后一条规则设置为通用的多行内容捕获规则,用来匹配日志条目里除首行外的剩余所有内容

完整配置示例

<source>
  @type tail
  path /opt/td-agent/dev/events.log
  pos_file /opt/td-agent/dev/events.log.pos
  tag events
  <parse>
    @type multiline
    # 适配所有类型日志的首行特征,可根据实际日志格式调整正则
    format_firstline /^\d+|^[A-Z]{4}/
    # 第一种日志格式(你原有的格式)
    format1 /^(?<msg_id>\d+) (?<time>\d+\/\d+\/\d+\s+\d{2}:\d{2}:\d{2}\.\d{3}) UTC (?<severity>\S+\b): (?<subject>\S+\b) \#(?<sub_id>\S+) (?<router_name>\b\S+\b) (?<ip_addr>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\n/
    # 第二种日志格式,按实际业务需求修改正则
    format2 /^(?<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (?<level>\w+) (?<module>\w+): (?<content>.*)/
    # 第三种日志格式,按实际业务需求修改正则
    format3 /^\[(?<trace_id>\w+)\] (?<user_id>\d+) (?<req_time>\d+)ms (?<req_path>\/\S*)/
    # 通用多行剩余内容捕获,匹配所有剩下的字符(包括换行)
    format4 /(?<message>(.|\s)*)/
    # 公共时间配置,可按需调整
    time_key time
    time_format %Y/%m/%d %H:%M:%S.%L
    utc true
  </parse>
</source>

注意事项

  • 所有正则规则的命名必须从1开始连续递增,不能跳号,跳号后的规则不会生效
  • 如果不同日志格式的时间字段名、时间格式不一致,可以单独在对应 formatN 规则后加 time_key 和 time_format 参数,优先级高于全局配置
  • 可以先使用 fluent-cat 命令本地测试正则匹配效果,确认无误后再上线

内容的提问来源于stack exchange,提问作者Boucurious

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:45:00