[英]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.