在FluentD中使用Ruby Regex解析多行日志文件

ctehm74n  于 2023-06-22  发布在  Ruby
关注(0)|答案(1)|浏览(199)

我有一个日志,上面有这样的行:

6/10/2022 10:06:16.908 | INFO | CLASS | BlankStart,15,1,2

但有时,log msg是一个跨越多行的长json blob。
袋日志行示例:

6/10/2022 10:06:16.908 | INFO | CLASS | Obj: { "test": false,
"reso": true }

完整示例w/ 3匹配:

6/10/2022 10:06:16.908 | INFO | CLASS | BlankStart,15,1,2
6/10/2022 10:06:16.908 | INFO | CLASS | Obj: { "test": false,
"reso": true }
6/10/2022 10:06:16.908 | INFO | CLASS | BlankStart,15,1,2

这是我的正则表达式,我添加了“严格”的日期检查新行,现在,只是得到了msg的结尾,忽略了多行。

(?<time>^\d{1,2}\/\d{1,2}\/\d{4}\s\d{2}:\d{2}:\d{2}.\d+)...(?<type>.[^| ]*)...(?<class>.[^| ]*)..(?<msg>.*)

在fluent文档中,他们谈到使用\m,但我不明白如何在Regex中正确使用它。
https://docs.fluentd.org/parser/regexp#multiline

6mzjoqzu

6mzjoqzu1#

parse部分中从regex切换到multiline使事情变得更好。我能够定义“日志格式的开始”,它理解为继续每一行的最后一个日志,直到收到一个新的“日志开始”的匹配。

<parse>
  @type multiline
  format_firstline /\d{1,2}\/\d{1,2}\/\d{4}\s\d{2}:\d{2}:\d{2}.\d+/  
  format1 /^(?<time>\d{1,2}\/\d{1,2}\/\d{4}\s\d{2}:\d{2}:\d{2}.\d+)...(?<type>.[^| ]*)...(?<class>.[^| ]*)..(?<msg>.*)/
</parse>

相关问题