繁体   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