簡體   English   中英

如何使用 fluentbit 拆分日志(鍵)字段?

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

我們遇到了類似的問題,解決方案有兩個部分:

  1. 在 Fluent-bit 配置文件中添加 Kubernetes 過濾器
  2. 更正來自我們的 API/微服務的 json 日志記錄

雖然您的問題看起來與 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM