Fluent Bit 如何把 JSON 日志拆分成 Elasticsearch 的结构化字段?

Fluent Bit 用 json parser 解析日志行,嵌套对象用 Nest 过滤器的 Operation lift 提升到顶层;输出到 ES 后字段即结构化可检索。本文给出 parser 与 nest 过滤器的完整配置。

最佳实践
Fluent Bit 如何把 JSON 日志拆分成 Elasticsearch 的结构化字段?封面

两步:input 或 filter 用 PARSER json 把 JSON 行解析成字段;嵌套对象可按需用 Nest 的 lift 提到顶层;普通对象字段本就可按点路径检索,能否聚合取决于映射类型,不要求扁平化。

配置示例

解析器放在独立的 parsers.conf:

[PARSER]
    Name        json_parser
    Format      json

主配置引用解析器文件:

[SERVICE]
    Parsers_File parsers.conf

[INPUT]
    Name        tail
    Path        /var/log/app/*.log
    Parser      json_parser

[FILTER]
    Name        nest
    Match       *
    Operation   lift
    Nested_under request
    Add_prefix   request_

[OUTPUT]
    Name        es
    Match       *
    Host        elasticsearch
    Index       app-logs
    Suppress_Type_Name On

原始 {"request":{"method":"GET","path":"/api"}} → ES 文档含顶层 request_method、request_path 字段。

Suppress_Type_Name On 适用于 Elasticsearch 8+ 的无 mapping type 接口;生产连接还需按实际配置 TLS 和认证。Tail 可配置持久化 DB 保存读取位置。

反向操作:nest

Operation nest 把散字段收进一个子对象——适合输出需要特定结构的场景。

常见问题(FAQ)

Q:字段提升后与现有字段重名怎么办? lift 前用 nest 把原字段收拢,或重命名。

Q:ES 里字段类型不对(数字成字符串)? 用 filter 中的类型转换插件,或让应用端输出正确类型的 JSON。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台