【发布时间】:2019-03-21 14:22:26
【问题描述】:
我正在使用图像 gcr.io/google-containers/fluentd-elasticsearch (v2.3.1) 以使 fluentd 收集一些日志并将它们发送到 Elastic 搜索。我正在为 fluentd 使用以下配置:
<source>
type forward
port {{.Values.fluentd.forward.port}}
bind 0.0.0.0
</source>
<filter kube.**>
@type parser
@log_level debug
key_name log
reserve_data true
remove_key_name_field true
<parse>
@type json
time_key time
time_type string
time_format %iso8601
</parse>
</filter>
<filter kube.**>
@type record_transformer
@log_level debug
enable_ruby
<record>
kubernetes ${record["kubernetes"]["cluster_name"] = "{{.Values.clusterName}}"; record["kubernetes"] }
logtrail {"host": "${record['kubernetes']['pod_name']}", "program":"${record['kubernetes']['container_name']}"}
</record>
</filter>
<filter kube.**>
@type concat
key log
stream_identity_key kubernetes["docker_id"]
multiline_end_regexp /\n$/
separator ""
</filter>
上面列出的配置应该解析与名为 log 的键关联的 JSON。但我看到 JSON 根本没有被解析。下面是我在 fluentd 进行过滤后得到的 JSON。我原以为会解析与密钥日志关联的 JSON。
{"kubernetes":{"pod_name":"api-dummy-dummy-vcpqr","namespace_name":"dummy","pod_id":"dummy","labels":{"name":"api-dummy","pod-template-hash":"dummy","tier":"dummy"},"host":"dummy","container_name":"api-dummy","docker_id":"dummy","cluster_name":"dummy Dev"},"log":"{\"name\":\"dummy\",\"json\":false,\"hostname\":\"api-dummy-dummy-vcpqr\",\"pid\":24,\"component\":\"dummy\",\"level\":30,\"version\":\"1.0\",\"timestamp\":1539645856126}","stream":"stdout","logtrail":{"host":"api-dummy-dummy-vcpqr","program":"api-dummy"}}
我已经花了超过 3 天的时间来解决这个问题。我什至尝试使用https://github.com/edsiper/fluent-plugin-docker,但这并没有帮助。尽管该插件有助于解析 JSON,但它导致解析的日志消息被我的 Elastic 搜索拒绝。
【问题讨论】:
-
看我的回答here
标签: fluentd