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

Windows环境下Fluentd 1.16.3:如何增强指定日志且保留其余日志?

正确的Fluentd配置方案

问题分析

  • grep过滤器结合@label会将匹配的日志分流到标签路由,导致这些日志无法进入后续默认的dmskrnl.raw匹配规则,若后续有多个输出目标会出现日志拆分问题。
  • parser过滤器中设置tag dmskrnl.enriched会修改日志标签,增加了不必要的复杂度,且容易导致日志丢失。
  • 冗余的record_transformer配置完全多余——parser已经将returned_bytes字段解析到日志记录中。

解决方案

我们可以用单一过滤器链处理所有日志,无需路由分流,确保匹配的日志添加字段,不匹配的日志原样保留:

<source>
  @type tail
  path C:\dmskrnl.log
  pos_file C:\dmskrnl.log.pos
  tag dmskrnl.raw  
  <parse>
    @type none
  </parse>
</source>

<filter dmskrnl.raw>
  @type parser
  key_name message
  reserve_data true
  ignore_missing true  # *关键*:不匹配的日志直接跳过解析,原样保留
  <parse>
    @type regexp
    expression /myapp\.database - Statement returned (?<returned_bytes>\d+) bytes/
  </parse>
</filter>

<match dmskrnl.raw>
  @type stdout
  # 这里可以添加其他输出目标,比如elasticsearch等
</match>

配置说明

  • ignore_missing true:当message字段不匹配正则表达式时,过滤器不会修改日志记录,直接放行,完美保留非目标日志。
  • reserve_data true:确保解析后原始的message字段和其他原有字段不会被删除。
  • 无需额外的grep或record_transformer:parser过滤器已经完成了字段提取的核心工作,且不会过滤任何日志。

备选方案(用record_transformer实现)

如果偏好使用record_transformer,可以通过条件判断实现相同效果:

<source>
  @type tail
  path C:\dmskrnl.log
  pos_file C:\dmskrnl.log.pos
  tag dmskrnl.raw  
  <parse>
    @type none
  </parse>
</source>

<filter dmskrnl.raw>
  @type record_transformer
  enable_ruby true
  <record>
    returned_bytes ${ record["message"].match(/myapp\.database - Statement returned (\d+) bytes/)[1] rescue nil }
  </record>
</filter>

<match dmskrnl.raw>
  @type stdout
</match>
  • 这里用Ruby的rescue nil确保不匹配的日志不会报错,returned_bytes字段会设为nil(若不需要该字段出现在非目标日志中,可以调整逻辑跳过字段添加)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:40:16