rewrite_tag_filter
The out_rewrite_tag_filter Output plugin has designed to rewrite tag like mod_rewrite. Re-emit a record with rewrited tag when a value matches/unmatches with the regular expression. Also you can change a tag from apache log by domain, status-code(ex. 500 error), user-agent, request-uri, regex-backreference and so on with regular expression.
How it works
It is a sample to arrange the tags by the regexp matched value of 'message'.
# Configuration
<match app.message>
@type rewrite_tag_filter
<rule>
key message
pattern ^\[(\w+)\] $1.${tag}
tag $1.${tag}
</rule>
</match>
:::text
+----------------------------------------+ +----------------------------------------------+
| original record | | rewrited tag record |
|----------------------------------------| |----------------------------------------------|
| app.message {"message":"[info]: ..."} | +----> | info.app.message {"message":"[info]: ..."} |
| app.message {"message":"[warn]: ..."} | +----> | warn.app.message {"message":"[warn]: ..."} |
| app.message {"message":"[crit]: ..."} | +----> | crit.app.message {"message":"[crit]: ..."} |
| app.message {"message":"[alert]: ..."} | +----> | alert.app.message {"message":"[alert]: ..."} |
+----------------------------------------+ +----------------------------------------------+Install
out_rewrite_tag_filter is included in td-agent by default (v1.1.18 or later). Fluentd gem users will have to install the fluent-plugin-rewrite-tag-filter gem using the following command.
Example Configuration
Configuration design is dropping some pattern record first, then re-emit other matched record as new tag name.
Please see the README.md for further details.
Parameters
rewriteruleN (required at least one)
This is deprecated since 1.6.0. Use \ section.
rewriterule<num> <key> <regex_pattern> <new_tag>
It works with the order \ ascending, regexp matching \ for the values of \ from each record, re-emit with \.
capitalize_regex_backreference
Capitalize letter for every matched regex backreference. (ex: maps -> Maps)
hostname_command
Override hostname command for placeholder. (default setting is long hostname)
log_level option
The log_level option allows the user to set different levels of logging for each plugin. The supported log levels are: fatal, error, warn, info, debug, and trace.
Please see the logging article for further details.
<rule> section (optional) (multiple)
key (string) (required): The field name to which the regular
expression is applied
pattern (regexp) (required): The regular expression
tag (string) (required): New tag
invert (bool) (optional): If true, rewrite tag when unmatch
pattern
Default value:
false
It works with the order of appearance, regexp matching rule/pattern for the values of rule/key from each record, re-emit with rule/tag.
Placeholders
It is supported these placeholder for new_tag (rewrited tag). See more details at README.md
${tag}
__TAG__
{$tag_parts[n]}
__TAG_PARTS[n]__
${hostname}
__HOSTNAME__
Use cases
Aggregate + display 404 status pages by URL and referrer to find and
fix dead links.
Send an IRC alert for 5xx status codes on exceeding thresholds.
Aggregate + display 404 status pages by URL and referrer to find and fix dead links.
Collect access log from multiple application servers (config1)
Sum up the 404 error and output to mongoDB (config2)
Note: These plugins are required to be installed. * fluent-plugin-rewrite-tag-filter * fluent-plugin-mongo
[Config1] Application Servers
[Config2] Monitoring Server
Send an IRC alert for 5xx status codes on exceeding thresholds.
Collect access log from multiple application servers (config1)
Sum up the 500 error and notify IRC and logging details to mongoDB
(config2)
Note: These plugins are required to be installed. * fluent-plugin-rewrite-tag-filter * fluent-plugin-datacounter * fluent-plugin-notifier * fluent-plugin-parser * fluent-plugin-mongo * fluent-plugin-irc
[Config1] Application Servers
[Config2] Monitoring Server
FAQ
With rewrite-tag-filter, logs are not forwarded. Why?
If you have following configuration, it doesn't work:
In this case, rewrite_tag_filter causes infinite loop because fluentd's routing is executed from top to bottom. So you need to change tag like below:
If this article is incorrect or outdated, or omits critical information, please let us know. Fluentd is a open source project under Cloud Native Computing Foundation (CNCF). All components are available under the Apache 2 License.
Last updated
Was this helpful?