[英]How to split log (key) field with fluentbit?
我们使用 FluentBit 将 node.js 代码发送到 OpenSearch。 我们遇到了问题,因为日志键包含嵌套值作为message 。 我们需要拆分以下日志消息中提到的值 -
log- {"level":"info","message":"\"{\"method:\" GET , \"url:\" / , \"status:\" 404 , \"responseTime:\" 0.545 ms , \"responseContentLength:\" 39}\"\n","timestamp":"2022-04-01T12:48:37.091Z"}
我们需要将每个字段分开 -
级别:信息方法:GET 状态:404
我们遇到了类似的问题,解决方案有两个部分:
虽然您的问题看起来与 json 格式相关,特别是对于message
字段(请参阅下面的第 2 点)
1. 在 Fluent-bit 配置文件中添加 Kubernetes 过滤器
## https://docs.fluentbit.io/manual/pipeline/filters
filters: |
[FILTER]
Name kubernetes
Match kube.*
Merge_Log On
Merge_Log_Key log_processed
Keep_Log Off
K8S-Logging.Parser On
K8S-Logging.Exclude On
现在这将 json 输出拆分为新字段:
log
= "{原始字典为字符串}"log_processed.level
= "信息"log_processed.message
= 等等。2. 更正来自我们 API 的 json 日志记录
看起来你的 json 中的message
字段输出为String
,而不是json
对象。
即你有:
{
"level": "info",
"message": "\"{\"method:\" GET , \"url:\" / , \"status:\" 404 , \"responseTime:\" 0.545 ms , \"responseContentLength:\" 39}\"\n",
"timestamp": "2022-04-01T12:48:37.091Z"
}
但你可能想要这个:
{
"level": "info",
"message": {
"method": "GET",
"url": "/",
"status": "404",
"responseTime": "0.545 ms",
"responseContentLength": 39
},
"timestamp": "2022-04-01T12:48:37.091Z"
}
请注意,我在这里假设数据类型只是为了演示这个问题。
一些相关的阅读/链接:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.