如何在Fluent-bit中仅解析JSON一级键并保留值为文本?
在Fluent-bit中仅解析JSON一级键并保留嵌套值为文本的实现方法
方法一:JSON解析 + Modify Filter(推荐,灵活适配结构变化)
先让Fluent-bit完整解析JSON为结构化数据,再通过modify过滤器的jq功能,将嵌套字段重新序列化为字符串,既保留一级键的解析结果,又避免嵌套字段展开。
配置示例:
[INPUT] Name tail Path /path/to/your/logs/*.log Tag app.logs [FILTER] Name modify Match app.logs JQ '.data = tostring' [OUTPUT] Name elasticsearch Match app.logs Host your-es-host Port 9200 Index app-logs-index
说明:
INPUT部分按常规方式读取日志即可modify过滤器通过JQ '.data = tostring'将data字段的嵌套结构转为JSON字符串- 如果需要把所有嵌套对象类型的一级键值都转为字符串,可修改jq表达式为:
JQ '.[] |= (if type == "object" then tostring else . end)' - 该方法适配一级键顺序变化、新增其他一级键的场景,兼容性更强
方法二:正则Parser直接提取一级键(适合固定结构的日志)
如果日志的一级键固定且顺序稳定,可直接用正则匹配提取一级键,嵌套字段会被原样保留为字符串,无需完整解析JSON。
配置示例:
[PARSER] Name json_first_level Format regex Regex ^{"key1": "(?<key1>[^"]+)", "key2": "(?<key2>[^"]+)", "data": (?<data>.+)}$ [INPUT] Name tail Path /path/to/your/logs/*.log Tag app.logs Parser json_first_level [OUTPUT] Name elasticsearch Match app.logs Host your-es-host Port 9200 Index app-logs-index
说明:
- 正则表达式精准匹配示例中的JSON结构,将
key1、key2提取为字符串,data字段的嵌套内容直接作为原始字符串保留 - 若日志的一级键顺序、数量有变化,需要同步调整正则表达式,灵活性稍弱
内容的提问来源于stack exchange,提问作者mspolitaev
相关产品推荐
相关产品推荐

