Fluentd 如何给日志事件添加标签(Tag/字段)?

Fluentd 给日志添加字段的三种方式:record_transformer 插件加静态字段或主机名、rewrite_tag_filter 改写 tag 路由、以及 filter 中条件添加。本文给出完整配置示例。

最佳实践
Fluentd 如何给日志事件添加标签(Tag/字段)?封面

最常用的是 record_transformer 过滤器:在 filter 段里用 <record> 块添加任意键值对——可以加静态字符串、主机名、环境变量,甚至用 Ruby 表达式计算。

方法一:record_transformer 加字段

<filter app.**>
  @type record_transformer
  <record>
    hostname "#{Socket.gethostname}"
    env     production
    tag_part ${tag}
  </record>
</filter>

每条日志都会多出 hostnameenvtag_part 三个字段。

方法二:按条件改写 tag 分流

需要"错误日志打特殊标记走不同输出"时,用 rewrite_tag_filter 插件:

<match app.**>
  @type rewrite_tag_filter
  <rule>
    key     level
    pattern ^ERROR$
    tag     error.${tag}
  </rule>
</match>

tag 被改写成 error.app.xxx,后续 <match error.**> 接管路由。

方法三:采集侧直接带标签

in_tail 配置中的 tag app.*** 本身就按路径给事件打上了 tag,是最上游的"标签"。

观测云对照

观测云 DataKit 采集日志时支持在采集器配置中直接附加自定义 tags,与日志一同上报;Pipeline 里还能用 add_key() 按条件动态加字段,语法比 Fluentd 插件链更直观。

常见问题(FAQ)

Q:tag 和字段(field)是一回事吗? 不是。tag 是 Fluentd 内部路由标识,不写入输出;字段是日志记录的一部分。本文两种都覆盖。

Q:能加当前时间字段吗? 可以,${Time.at(time).utc.strftime(...)} Ruby 表达式搞定。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台