Fluentd 一个 Source 能对应多个 Filter 和 Match 吗?

可以——同一个 tag 的日志会依次经过所有匹配的 filter 串联处理;要同时发往多个 match 输出,需要用 copy 输出插件复制事件流。本文给出串联与复制的完整配置。

最佳实践
Fluentd 一个 Source 能对应多个 Filter 和 Match 吗?封面

可以,两种语义都支持:多个 <filter app.**> 会按顺序串联执行(每个都处理一遍);多个输出则需要 @type copy 把事件复制给多个 <store>——默认一个 match 只进一个输出。

Filter 串联(自动生效)

<filter app.**>
  @type record_transformer
  <record>
    hostname "#{Socket.gethostname}"
  </record>
</filter>

<filter app.**>
  @type grep
  <exclude>
    key level
    pattern ^DEBUG$
  </exclude>
</filter>

同一 tag 依次经过:先加 hostname 字段,再过滤 DEBUG。顺序即配置文件中的书写顺序。

多输出:copy 插件

<match app.**>
  @type copy
  <store>
    @type elasticsearch
    host es.internal
  </store>
  <store>
    @type s3           # 同时归档一份到对象存储
    s3_bucket logs-archive
  </store>
</match>

组合实战:分流 + 串联

先 rewrite_tag_filter 按级别改写 tag,再让 error.** 走告警 store、app.** 走 ES——配合 filter 串联做字段处理,就是一套完整的条件路由。

观测云对照

观测云 DataKit 的 Pipeline 脚本按日志来源(source)配置,一个来源可挂多段处理;输出侧由 DataKit 统一汇聚上报,无需 copy 插件。

常见问题(FAQ)

Q:filter 执行顺序能调吗? 只能按配置书写顺序,把最重的(正则多的)放后面可以减少处理量。

Q:copy 的多个 store 会互相阻塞吗? 每个 store 独立缓冲队列,一个后端慢不拖其他(内存占用会涨)。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台