Fluentd采集Jboss EAP日志正则匹配出现unmatched_lines问题求助
问题原因
- 未适配多行日志:Jboss日志中存在大量跨行的状态报告、错误堆栈内容,你当前使用的tail插件默认按单行读取日志,那些不带时间戳前缀的续行被单独提取后,完全不符合你配置的以时间开头的正则匹配规则,直接触发
unmatched_lines报错。 - 正则规则存在隐含缺陷:你当前配置的正则未考虑到部分日志的service字段可能包含数字、thread字段贪婪匹配越界的情况,同时缺失时间格式声明,就算单行匹配成功也可能出现字段解析异常。
修复方案
替换source段的parse配置,改用Fluentd内置的multiline parser专门处理跨行Jboss日志,优化后的完整source配置如下:
<source> @type tail read_from_head true tag file-jboss.log path C:\T24\JBOSS\jboss-eap-6.4\standalone\log\server.log pos_file c:\opt\td-agent\file-jboss.pos <parse> @type multiline format_firstline /\d{2}:\d{2}:\d{2},\d{3}/ format1 /(?<time>\d{2}\:\d{2}\:\d{2}\,\d{3})\s+(?<level>\w{1,6})\s+(?<service>\[[\w.]+\])\s+(?<thread>\([^)]+\))\s+(?<message>.*)/ time_format %H:%M:%S,%L </parse> </source>
配置改动说明:
- 用
multiline类型的parser替代原有单条正则解析,format_firstline参数指定只有匹配时间格式前缀的行才是新日志的起始行,后续没有该前缀的行都会自动合并到上一条日志的message字段中,解决跨行日志匹配失败的问题。 - 优化了正则规则:thread字段的匹配改为
\([^)]+\)避免贪婪匹配越界,放宽了service、message字段的匹配范围,减少误判。 - 新增
time_format声明,明确告诉Fluentd时间字段的解析格式,避免时间解析错误。
注意:修改配置后请删除原有的
c:\opt\td-agent\file-jboss.pos文件,再重启td-agent服务,避免旧的读取偏移量影响测试效果。
内容的提问来源于stack exchange,提问作者tba
相关产品推荐
相关产品推荐

