如何使用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
相关产品推荐
相关产品推荐

