使用以下配置:
[INPUT]
Name tail
Path /var/log/containers/*.log
multiline.parser docker, cri
Tag kube.*
Mem_Buf_Limit 5MB
Skip_Long_Lines On
[FILTER]
Name kubernetes
Match kube.*
Merge_Log On
Keep_Log Off
K8S-Logging.Parser On
K8S-Logging.Exclude On
[OUTPUT]
Name kafka
Match kube.*
Brokers <some-broker>
Topics <some-topic>
FluentBit向Kafka发送容器日志,消息值如下:
{
"@timestamp":1670628155.720578,
"log":"<some-container-log>",
"stream":"stdout",
"time":"2022-12-09T23:22:35.720578536Z",
"kubernetes":{
"pod_name":"<...>",
"namespace_name":"<...>",
"pod_id":"<...>",
"annotations":{ <...> },
"host":"<...>",
"container_name":"<...>",
"docker_id":"<...>",
"container_hash":"<...>",
"container_image":"<...>"
}
}
现在我希望这条消息有关键。当添加到下面的Kafka输出配置行:
Message_Key_Field stream
我看到所有消息都有键stdout
,这是消息值中stream
键的值,但是,当我想在JSON中使用"kubernetes"
中的一个字段时,比如"pod_name"
,下面的任何一个都不起作用,消息以空键结束:
- Message_Key_Field kubernetes.pod_id
- Message_Key_Field kubernetes['pod_id']
- Message_Key_Field $kubernetes['pod_id']
从输出插件引用记录的内部JSON值的正确语法是什么?
1条答案
按热度按时间dfty9e191#
这应该是你的第三个选择。这对你不起作用吗?你的完整配置是什么样子的?