在 fluentd 中使用具有不同匹配类型的单一来源
Using a single source in fluentd with different match types
所以我试图从主机上的 docker 容器 运行 捕获输出,但在开发人员更改为使用 json 作为容器的日志输出后,我我错过了 entrypoint.sh 中发生的容器启动消息。我可以看到有人在配置文件中添加了一个新的过滤器部分,它非常适合捕获 json 输出但仅 json 输出。
这是正在使用的模板:
<source>
@type forward
port 24224
bind 0.0.0.0
tag GELF_TAG
</source>
<filter GELF_TAG.**>
@type parser
key_name log
reserve_data false
<parse>
@type json
</parse>
</filter>
<match GELF_TAG.**>
@type copy
<store>
@type gelf
host {{ graylog_server_fqdn }}
port 12201
protocol tcp
flush_interval 5s
</store>
<store>
@type stdout
</store>
</match>
如何设置配置以便能够在容器启动后从容器中捕获 entrypoint.sh 输出和 json 输出?
编辑。
过滤器拒绝发送到 docker 容器标准输出的消息,直到应用程序开始登录 json。
[warn]: #0 dump an error event: error_class=Fluent::Plugin::Parser::ParserError error="pattern not matched with data
所以我尝试捕获所有被放入 ERROR 标记中的内容,我可以看到丢失的消息,但它们仍然无法使用此配置进行解析:
# Ansible
<source>
@type forward
port 24224
bind 0.0.0.0
tag GELF_TAG
</source>
<filter GELF_TAG.**>
@type parser
emit_invalid_record_to_error true
key_name log
reserve_data false
<parse>
@type json
</parse>
</filter>
<match {GELF_TAG.**,@ERROR}>
@type copy
<store>
@type gelf
host {{ graylog_server_fqdn }}
port 12201
protocol tcp
flush_interval 5s
</store>
<store>
@type stdout
</store>
</match>
安装 multi-format 解析器:
td-agent-gem install fluent-plugin-multi-format-parser -v 1.0.0
# Ansible
<source>
@type forward
port 24224
bind 0.0.0.0
tag GELF_TAG
</source>
<filter GELF_TAG.**>
@type parser
key_name log
reserve_data false
<parse>
@type multi_format
<pattern>
format json
time_key timestamp
</pattern>
<pattern>
format none
</pattern>
</parse>
</filter>
<match GELF_TAG.**>
@type copy
<store>
@type gelf
host {{ graylog_server_fqdn }}
port 12201
protocol tcp
flush_interval 5s
</store>
<store>
@type stdout
</store>
</match>
您还可以使用 'rewrite_tag_filter' 这是一个输出插件。使用它,您可以更改不同模式的标签,然后使用 parsers/filters.
所以我试图从主机上的 docker 容器 运行 捕获输出,但在开发人员更改为使用 json 作为容器的日志输出后,我我错过了 entrypoint.sh 中发生的容器启动消息。我可以看到有人在配置文件中添加了一个新的过滤器部分,它非常适合捕获 json 输出但仅 json 输出。
这是正在使用的模板:
<source>
@type forward
port 24224
bind 0.0.0.0
tag GELF_TAG
</source>
<filter GELF_TAG.**>
@type parser
key_name log
reserve_data false
<parse>
@type json
</parse>
</filter>
<match GELF_TAG.**>
@type copy
<store>
@type gelf
host {{ graylog_server_fqdn }}
port 12201
protocol tcp
flush_interval 5s
</store>
<store>
@type stdout
</store>
</match>
如何设置配置以便能够在容器启动后从容器中捕获 entrypoint.sh 输出和 json 输出?
编辑。
过滤器拒绝发送到 docker 容器标准输出的消息,直到应用程序开始登录 json。
[warn]: #0 dump an error event: error_class=Fluent::Plugin::Parser::ParserError error="pattern not matched with data
所以我尝试捕获所有被放入 ERROR 标记中的内容,我可以看到丢失的消息,但它们仍然无法使用此配置进行解析:
# Ansible
<source>
@type forward
port 24224
bind 0.0.0.0
tag GELF_TAG
</source>
<filter GELF_TAG.**>
@type parser
emit_invalid_record_to_error true
key_name log
reserve_data false
<parse>
@type json
</parse>
</filter>
<match {GELF_TAG.**,@ERROR}>
@type copy
<store>
@type gelf
host {{ graylog_server_fqdn }}
port 12201
protocol tcp
flush_interval 5s
</store>
<store>
@type stdout
</store>
</match>
安装 multi-format 解析器:
td-agent-gem install fluent-plugin-multi-format-parser -v 1.0.0
# Ansible
<source>
@type forward
port 24224
bind 0.0.0.0
tag GELF_TAG
</source>
<filter GELF_TAG.**>
@type parser
key_name log
reserve_data false
<parse>
@type multi_format
<pattern>
format json
time_key timestamp
</pattern>
<pattern>
format none
</pattern>
</parse>
</filter>
<match GELF_TAG.**>
@type copy
<store>
@type gelf
host {{ graylog_server_fqdn }}
port 12201
protocol tcp
flush_interval 5s
</store>
<store>
@type stdout
</store>
</match>
您还可以使用 'rewrite_tag_filter' 这是一个输出插件。使用它,您可以更改不同模式的标签,然后使用 parsers/filters.