安裝方法:
gem install fluent-plugin-rewrite-tag-filter
詳細文檔:
https://github.com/fluent/fluent-plugin-rewrite-tag-filter ######具體用法 https://docs.fluentd.org/v1.0/articles/out_rewrite_tag_filter ######官方文檔
tag是什么?在fluentd中事件流可以通過tag來控制,filter,parse,match,label都可以篩選tag來處理對應的event
rewrite-tag根據key的值來重寫tag,支持正則表達式匹配,invert支持反向匹配,可以放在末尾來匹配所有不符合上面規則的event,如下所示
<match td.apache.access> @type rewrite_tag_filter capitalize_regex_backreference yes <rule> key path pattern /\.(gif|jpe?g|png|pdf|zip)$/ tag clear </rule> <rule> key status pattern /^200$/ tag clear invert true </rule> <rule> key domain pattern /^.+\.com$/ tag clear invert true </rule> <rule> key domain pattern /^maps\.example\.com$/ tag site.ExampleMaps </rule> <rule> key domain pattern /^news\.example\.com$/ tag site.ExampleNews </rule> <rule> key domain pattern /^(mail)\.(example)\.com$/ tag site.$2$1 </rule> <rule> key domain pattern /.+/ tag site.unmatched </rule> </match>
注意:一旦event(叫日志也行)進入 rewrite_tag_filter中過濾,任何沒有被規則匹配的記錄都將丟掉,實驗下來是這種效果,所以可以在最后用invert來匹配所有其他的key值情況
1.0之后,官方比較推薦用label標簽,而這個插件可以和relabel結合使用,同時因為在label中可以套filter標簽和match標簽,可以對event再過濾一次,如果你有這種需求,
<match pattern> @type relabel @label @foo </match> <label @foo> <filter pattern> ... </filter> <match pattern> ... </match> </label>
使用這個插件重寫tag的時候一定要注意定義好tag的格式,因為fluentd的routing是從上到下的,意思是每次要路由的時候都從上到下掃描一次,個人感覺有點類似iptables,所以如果是如下情況,會造成一個回路,無法輸出
<match app.**> @type rewrite_tag_filter <rule> key level pattern /(.+)/ tag app.$1 </rule> <match> <match app.**> @type forward # ... </match>
改成下面就好了
<match app.**> @type rewrite_tag_filter <rule> key level pattern /(.+)/ tag level.app.$1 </rule> <match> <match level.app.**> @type forward # ... </match>