如何解决Fluentd日志正则不匹配问题以在Elasticsearch展示正确输出
解决正则不匹配问题并正确解析Zeebe日志到Elasticsearch
问题根源
当前source块中的正则格式是为HTTP访问日志设计的(包含method、path等字段),完全不匹配Zeebe日志的时间 主机 进程[PID]: JSON内容结构,导致出现pattern not matched警告。
修正后的配置
1. 调整Source配置
替换原source块,匹配Zeebe日志格式并解析时间:
<source> @type tail path /var/log/messages exclude_path /var/log/td-agent/td-agent.log pos_file /var/log/td-agent/td-agent.pos tag dc-zeebe-tag read_from_head true # 匹配Zeebe日志的基础结构:时间、主机、进程名、PID、JSON日志内容 format ^(?<time>\w{3}\s+\d{1,2}\s+\d{2}:\d{2}:\d{2})\s+(?<host>[^\s]+)\s+(?<process>[^\[]+)\[(?<pid>\d+)\]:\s+(?<log_json>.*)$ refresh_intervals 60 <parse> @type regex # 对应日志中的时间格式:月份缩写(如Oct)、日期、时分秒 time_format %b %d %H:%M:%S # 时区根据实际环境调整,比如Asia/Shanghai timezone Asia/Shanghai </parse> </source>
2. 调整Filter配置
添加JSON解析,将log_json字段中的JSON内容展开为结构化字段:
<filter dc-zeebe-tag> @type parser key_name log_json reserve_data true <parse> @type json </parse> </filter>
配置说明
source的正则将日志拆分为time(时间)、host(主机)、process(进程名)、pid(进程ID)、log_json(JSON格式的日志内容)五个字段。time_format设置为%b %d %H:%M:%S,匹配日志中的Oct 3 17:23:12格式,需根据实际时区补充timezone参数。filter块使用json解析器,将log_json中的JSON结构展开,这样Elasticsearch中就能看到severity、message、context等结构化字段。
验证方法
- 重启td-agent服务:
sudo systemctl restart td-agent - 查看td-agent日志确认无匹配警告:
tail -f /var/log/td-agent/td-agent.log - 检查Elasticsearch中的索引,确认日志已被正确解析为结构化数据。
内容的提问来源于stack exchange,提问作者Jeyhun F. Aslanov
相关产品推荐
相关产品推荐

