You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Fluent-bit中解析log字段字符串内的嵌套JSON?

解决Fluent-bit解析嵌套JSON日志的问题

要提取smplog::后的嵌套JSON并解析,只需在现有Fluent-bit配置中添加两个过滤器,先提取目标JSON字符串,再将其解析为结构化字段并合并到日志中。

修改fluent-bit.conf

在[FILTER] kubernetes块之后,添加以下两个过滤器:

# 第一步:提取smplog::后的JSON字符串到smplog_json字段
[FILTER]
Name regex
Match kube.*
Regex log ^.*smplog::(?<smplog_json>\{.*\})$
# 仅匹配包含smplog::的日志行,捕获其后的JSON内容

# 第二步:解析smplog_json字段为结构化数据,并合并到根字段
[FILTER]
Name parser
Match kube.*
Parser json
Key_Name smplog_json
Preserve_Key Off  # 解析后删除原始smplog_json字段
Merge_Key On      # 将解析出的字段合并到日志根节点

验证配置

  1. 重启Fluent-bit应用新配置
  2. 通过stdout输出查看解析结果,确认application、abc、version等字段已被提取为独立的结构化字段

如果日志中smplog::后的JSON存在换行,可将第一个regex过滤器替换为Lua脚本处理多行场景:

[FILTER]
Name lua
Match kube.*
Script extract_smplog.lua
Call extract_smplog_json

对应的extract_smplog.lua脚本内容:

function extract_smplog_json(tag, timestamp, record)
    local log = record.log
    if log then
        local start_idx = string.find(log, "smplog::")
        if start_idx then
            local json_str = string.sub(log, start_idx + 8)  -- 跳过"smplog::"
            local ok, json_data = pcall(cjson.decode, json_str)
            if ok then
                -- 将解析后的JSON合并到原记录
                for k, v in pairs(json_data) do
                    record[k] = v
                end
                return 2, timestamp, record
            end
        end
    end
    return 0, timestamp, record
end

内容的提问来源于stack exchange,提问作者SolidQ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:35:33