FileBeat多行正则表达式配置求助:匹配含空行的异常日志
FileBeat多行日志匹配配置问题解决
问题场景
日志包含空行分隔的异常栈信息,需要配置FileBeat的多行规则将完整的异常日志合并为单条,但现有配置无法生效。
日志示例
02/21/2022 08:48:41 AM com.myClass ERROR: com.MyException: The id '-1' is not valid for an object of type 'Result Type' (50) com.MyException: The id '-1' is not valid for an object of type 'Result Type' (50) at com.myClass.createResultType(Native Method) at com.myClass.getResultTableForResult(MyClass.java:1172) at com.myClass.getResultFromUDSRPnlWrapper(MyClass.java:508) at com.myClass.loadDataSet(MyClass.java:143) at com.myClass.calculate(MyClass.java:166)
当前无效配置
multiline.type: pattern multiline.pattern: '^\n[[:space:]]' multiline.negate: false multiline.match: after
问题分析
原配置失效原因:
- FileBeat逐行处理日志,每一行不会包含开头的换行符,
^\n永远无法匹配到目标行。 - 规则未覆盖第二行重复的异常信息行,仅考虑了空行后的缩进栈帧。
解决方案
提供两种可行配置,按需选择:
方案1:匹配异常栈相关行(精准匹配)
针对日志中com.MyException开头的重复行和缩进的at开头栈帧行,将这些行合并到前一条日志:
multiline.type: pattern multiline.pattern: '^(\s+at|com\.MyException:)' multiline.negate: false multiline.match: after
方案2:匹配日志起始行(通用匹配)
以日期格式开头的行作为日志起始标记,所有非起始行都合并到前一条日志,适配更多日志场景:
multiline.type: pattern multiline.pattern: '^\d{2}/\d{2}/\d{4}' multiline.negate: true multiline.match: after
配置说明
multiline.negate: true(方案2):表示匹配结果取反,即不满足pattern的行会被合并到前一行。multiline.match: after:表示将匹配到的行(或取反后的行)追加到前一条日志的末尾。
内容的提问来源于stack exchange,提问作者user1312312
相关产品推荐
相关产品推荐

