在 FluentD 中使用 Ruby 正则表达式进行多行日志文件解析

Multi-Line Log File Parsing with Ruby Regex in FluentD

提问人:FreeSoftwareServers 提问时间:6/7/2023 更新时间:6/8/2023 访问量:114

问:

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

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

但有时,日志消息是多行的长 json blob。

行李日志行示例:

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

完整示例(含 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

这是我的正则表达式,我添加了“严格”日期检查新行,现在,只需获取消息的末尾并忽略多行。

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

在流畅的文档中,他们谈到了使用 ,但我无法理解如何在正则表达式中正确使用它。\m

https://docs.fluentd.org/parser/regexp#multiline

enter image description here

正则表达式 Ruby Fluentd

评论

0赞 Azeem 6/7/2023
这应该在正则表达式的末尾,即./m/regex/m
0赞 FreeSoftwareServers 6/8/2023
@Azeem你知道的,我试图这样做,但我总是犯错,但我只是看到他们在决赛中进行了硬编码,并在右侧进行了另一个框。我会尝试的,我猜我的线路也需要调整到旗帜之外。/flagrubular/flagregexmulti-line
1赞 Azeem 6/8/2023
或者,您可能希望查看多行解析器插件,而不是直接摆弄该标志。
0赞 FreeSoftwareServers 6/8/2023
@Azeem那个多行插件看起来像我想要的!谢谢!
0赞 FreeSoftwareServers 6/8/2023
你想写答案@Azeem?这确实奏效了,只是一点点调整,但很完美!!谢谢

答:

1赞 FreeSoftwareServers 6/8/2023 #1

在该部分中从多行切换到多行使情况变得更好。我能够定义“日志格式的开始”,并且它理解为继续每行的最后一个日志,直到收到新的“日志开始”的匹配项。regexparse

<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>