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

如何使用Fluent Bit将JSON日志转换为非JSON扁平日志并上传至S3?

可以通过Fluent Bit实现该需求

以下是具体的配置方案,核心思路是先解析JSON日志为结构化数据,再通过自定义脚本拼接成目标扁平格式,最后上传至S3:

1. 基础配置框架

创建Fluent Bit配置文件(如fluent-bit.conf),包含输入、过滤、输出三个核心部分:

输入插件(读取JSON日志)

使用tail插件读取日志文件,并通过内置的json解析器将每行JSON转换为结构化记录:

[INPUT]
    Name              tail
    Path              /path/to/your/app.log  # 替换为你的日志文件路径
    Parser            json
    Tag               app.log

过滤插件(处理日志格式)

通过Lua脚本实现自定义格式拼接,同时清理message字段的转义引号:
首先创建Lua脚本文件(如format_log.lua):

function filter_records(tag, timestamp, record)
    -- 移除message字段中的转义引号
    local clean_message = record["message"]:gsub('"', '')
    -- 拼接目标格式的日志字符串
    local formatted_log = string.format("%s [%s] %s %s - %s",
        record["timestamp"],
        record["thread"],
        record["level"],
        record["logger"],
        clean_message
    )
    -- 返回仅包含格式化后日志的新记录
    return 2, timestamp, {log = formatted_log}
end

然后在配置文件中引入Lua过滤器:

[FILTER]
    Name              lua
    Match             app.log
    Script            format_log.lua  # 替换为你的Lua脚本路径
    Call              filter_records

输出插件(上传至S3)

使用s3插件上传处理后的日志,注意设置Format raw避免再次JSON序列化:

[OUTPUT]
    Name              s3
    Match             app.log
    AWS_Region        us-east-1  # 替换为你的S3存储区域
    Bucket            your-bucket-name  # 替换为你的S3桶名
    Format            raw
    Json_date_key     false

2. 关键说明

  • 确保Fluent Bit已安装Lua插件(多数官方预编译包默认包含)
  • Lua脚本可灵活调整格式,若后续需求变更,只需修改字符串拼接逻辑即可
  • 若不需要处理message字段的转义引号,可删除Lua脚本中对应的gsub语句

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:43:13