从日志文件读取多行日志



>我从记录多行类型的日志文件中读取日志。在阅读QRadar时,组装两个记录并将其视为一个日志。

我将日志行的开始和结束模式描述为将日志源添加到 QRadar 时:

  • 启动模式正则表达式:^(d{7}),

  • 结束模式正则表达式:(d{2}:d{2}:d{2})$

我应该阅读这样的日志:

1158896,someuser,Inner User,Minor,10.6.130.11,2019-09-29 03:01:15,Security Management,Log in to the server,Network Management,Succeeded,User name: someuser,2019-09-29 03:01:15
1158897,someuser,Inner User,Minor,10.6.130.11,2019-09-29 03:03:16,Security Management,Log out the server,Network Management,Succeeded,"User name: someuserOnline duration: 0 day(s) 0 hour(s) 2 minute(s) 1 second(s)",2019-09-29 03:03:16

但我收到了其中一些组装的,例如:

1158896,someuser,Inner User,Minor,10.6.130.11,2019-09-29 03:01:15,Security Management,Log in to the server,Network Management,Succeeded,User name: someuser,2019-09-29 03:01:151158897,someuser,Inner User,Minor,10.6.130.11,2019-09-29 03:03:16,Security Management,Log out the server,Network Management,Succeeded,"User name: someuserOnline duration: 0 day(s) 0 hour(s) 2 minute(s) 1 second(s)",2019-09-29 03:03:16

以下是我的正则表达式开始和结束模式的 regex101.com 记录。

https://regex101.com/r/2IfMR7/3

https://regex101.com/r/2IfMR7/4

如您所见,它在 regex101.com 中正常工作 为什么QRadar将它们作为一个整体来阅读?

您(或qradar(可能正在使用贪婪量词和多行捕获字符。

如果你正在做这样的事情:^(d{7}),(?:n|.)*(d{2}:d{2}:d{2})$中心组(?:n|.)*或跨多行匹配的任何类似短语,贪婪的运算符*意味着它将尝试从前 7 位数字匹配到整个日志页面上的最后一个时间戳,忽略您的开始和结束锚点。尝试改用*?;?使它不贪婪,因此它将在第一个时间戳处停止。

比较:贪婪与非贪婪。

最新更新