如何将EKS集群JSON日志解析为Kibana中的独立字段?
解决方案:将JSON日志解析为Kibana独立字段
一、在Fluentbit中解析JSON日志(推荐方案)
日志由Fluentbit采集传输,直接在采集端完成JSON解析,能确保传到Elasticsearch的日志已经是扁平化的独立字段,后续Kibana可直接使用。
1. 配置JSON解析器
编辑Fluentbit的parsers.conf文件,添加针对EKS日志的JSON解析规则:
[PARSER] Name json-eks Format json Time_Key timestamp Time_Format %Y-%m-%dT%H:%M:%S.%L Time_Keep On # 将log字段内的JSON内容展开为顶层独立字段 Decode_Field_As json log
2. 在采集流程中应用解析器
修改fluentbit.conf,在filter阶段调用上述解析器处理采集到的日志:
[INPUT] Name tail Path /var/log/containers/*.log Tag kubernetes.* Parser docker DB /var/log/flb_kube.db Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10 [FILTER] Name parser Match kubernetes.* Parser json-eks Key_Name log Reserve_Data On # 可选:保留原始log字段用于回溯 Preserve_Key Off # 解析后不再保留log字段的嵌套结构
重启Fluentbit服务后,新采集的日志会自动将JSON内的键值对展开为顶层字段。
二、配置Elasticsearch索引模板确保字段映射
为让Elasticsearch正确识别解析后的字段类型(关键字类型适合筛选,文本类型适合搜索),创建并导入索引模板:
{ "index_patterns": ["eks-*"], "settings": { "number_of_shards": 1, "number_of_replicas": 0 }, "mappings": { "properties": { "timestamp": {"type": "date"}, "level": {"type": "keyword"}, "message": {"type": "text"}, "service": {"type": "keyword"}, "traceId": {"type": "keyword"}, "request.method": {"type": "keyword"}, "request.path": {"type": "keyword"} // 根据实际日志字段补充对应的映射配置 } } }
将上述模板导入Elasticsearch后,新生成的索引会自动应用字段映射规则。
三、Kibana中验证与使用
- 进入Kibana的Discover页面,选择对应EKS日志的索引模式
- 在左侧字段列表中可看到所有解析后的独立字段(如
level、service、traceId等) - 直接使用这些字段进行筛选(例如输入
level: ERROR过滤错误日志),或添加到仪表盘的可视化组件中
额外说明
- 若已有未解析的历史日志,可通过重新采集或Elasticsearch的
update_by_queryAPI批量处理,但后者会占用较多集群资源,建议优先保证新日志的解析配置正确 - 多层嵌套的JSON字段会被自动展开为带点的字段名(如
request.method),同样可作为独立字段在Kibana中使用
内容的提问来源于stack exchange,提问作者Dhinesh Prabakaran
相关产品推荐
相关产品推荐

