Fluent Bit 如何把 JSON 日志拆分成 Elasticsearch 的结构化字段?
Fluent Bit 用 json parser 解析日志行,嵌套对象用 Nest 过滤器的 Operation lift 提升到顶层;输出到 ES 后字段即结构化可检索。本文给出 parser 与 nest 过滤器的完整配置。
两步:input 或 filter 用 PARSER json 把 JSON 行解析成字段;嵌套对象再用 Nest 过滤器的 lift 操作提到顶层——ES 中每个字段就可独立检索与聚合。
配置示例
[PARSER]
Name json_parser
Format json
[INPUT]
Name tail
Path /var/log/app/*.log
Parser json_parser
[FILTER]
Name nest
Match *
Operation lift
Nested_under request # 把 request 下的字段提升到顶层
[OUTPUT]
Name es
Match *
Host elasticsearch
Index app-logs
原始 {"request":{"method":"GET","path":"/api"}} → ES 文档含顶层 method、path 字段。
反向操作:nest
Operation nest 把散字段收进一个子对象——适合输出需要特定结构的场景。
观测云对照
观测云 DataKit 对 JSON 日志自动展开为结构化字段(可配置),日志查看器中字段即刻可筛选聚合,无需 lift 类配置。
常见问题(FAQ)
Q:字段提升后与现有字段重名怎么办? lift 前用 nest 把原字段收拢,或重命名。
Q:ES 里字段类型不对(数字成字符串)? 用 filter 中的类型转换插件,或让应用端输出正确类型的 JSON。