PAYATHON 2026

Fluent Bit 如何将 log 字符串解析到 log_processed?

数据阿明

结论

先用 parser 过滤器解析 log,再用 nest 将记录字段放入 log_processed,最后用 lift 把需要留在外层的字段移回顶层。根据你给出的配置,lift 的字段列表还要加入 log,这样原始字符串会留在顶层,解析结果则保存在 log_processed 中。

配置示例

在 parsers.conf 中定义一个 JSON parser,并确认 Fluent Bit 通过 parsers_file 加载了该文件:

[PARSER]
    Name   nginx_json
    Format json

然后在 YAML pipeline 中依次配置解析、嵌套和提升:

filters:
  - name: parser
    match: docker
    parser: nginx_json
    key_name: log
    preserve_key: true
    reserve_data: true

  - name: nest
    match: docker
    operation: nest
    wildcard: '*'
    nest_under: log_processed

  - name: nest
    match: docker
    operation: lift
    wildcard:
      - app
      - date
      - workload
      - container_id
      - container_name
      - source
      - log
    nested_under: log_processed

key_name: log 指定待解析的字段。preserve_key: true 会保留原始 log 字符串,reserve_data: true 会保留解析目标之外的原有字段。nest 会把当时记录中的字段放到 log_processed 下,最后的 lift 再将列表中的字段移回顶层。把 log 加入提升列表后,原始字符串会回到顶层,log_processed 中只留下未提升的解析字段。

检查事项

  • parser 配置中的名称要与 parsers.conf 里的 Name 一致。若已有名为 json 的 parser,也可以直接使用。
  • log 的实际内容必须是有效 JSON。你贴出的转义样例中,realIp 附近的引号可能没有正确转义。如果实际字段也有这个问题,parser 就无法解析,需要先修正产生日志的一端。
  • wildcard: '*' 会将记录中的所有字段纳入嵌套过程。如果外层字段与解析出的字段重名,处理结果可能受字段冲突影响。遇到这种情况,可根据实际字段调整嵌套和提升规则。
  • 示例根据你提供的字段结构说明了过滤器顺序,没有假定特定的 Fluent Bit 版本。请用实际配置中的 YAML 层级和一条真实记录验证输出结构。

备注:内容仅供参考。