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 层级和一条真实记录验证输出结构。
备注:内容仅供参考。
