我想将标记匹配指令中的消息重新路由到非标记匹配指令。可能吗?
我编写了 td-agent.conf(图 1),但在rewrite-tag-filter插件中处理后,td-agent 不会将消息路由到第二个匹配指令(图 2,3)。
将第二个匹配指令放在标签中,并在 rewrite-tag-filter 插件(图 4)中附加标签,它可以工作。考虑到这种行为,我猜 td-agent 在@foo_server_local_error 标签中搜索匹配指令,因此该消息与未标记版本(图1)中的第二个匹配指令不匹配。
如果插件(或 td-agent 核心)提供了从标签路由到非标签匹配指令的方法,我的要求就满足了。
我也尝试了route plugin,但它的行为与 rewrite-tag-filter 插件相同。
我的 td-agent 和插件版本是:
'fluent-plugin-rewrite-tag-filter' version '2.4.0'
'fluentd' version '1.12.1'
图1:td-agent.conf
<match foo_server_local.**>
@type copy
<store>
@type relabel
@label @foo_server_local_error
</store>
</match>
<label @foo_server_local_error>
<filter>
@type grep
<regexp>
key description
pattern /(WARN|ERROR|FATAL|UNKNOWN)/i
</regexp>
</filter>
<filter>
@type record_transformer
<record>
host "#{Socket.gethostname}"
environment "prod"
level "ERROR"
</record>
</filter>
<match foo_server_local.**>
@type rewrite_tag_filter
remove_tag_prefix foo_server_local
<rule>
key description
pattern /.+/
tag foo.server_local.message
</rule>
</match>
</label>
<match foo.**>
@type stdout
</match>
图2:流利的猫命令
echo "ERROR: TEST ERROR MESSAGE" | /opt/td-agent/bin/fluent-cat -f none --message-key description foo_server_local.hoge
图 3:td-agent.log 的输出
2021-04-15 10:42:01 +0000 [warn]: #0 no patterns matched tag="foo.server_local.hoge"
图 4:修改 td-agent.conf
<label @foo_server_local_error>
...
<match foo_server_local.**>
@type rewrite_tag_filter
remove_tag_prefix foo_server_local
<rule>
key description
pattern /.+/
tag foo.server_local.message
@label @foo
</rule>
</match>
</label>
<label @foo>
<match foo.**>
@type stdout
</match>
</label>