从日志文件中读取多行日志

Multiline Log Reading from Log file

我从记录多行类型的日志文件中读取日志。读取QRadar时将两条记录拼成一条日志。

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

我应该阅读像这样的日志:

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

这是我的 RegEx 开始和结束模式的 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 位数字与最后一个时间戳进行匹配,忽略您的开始和结束锚点。 尝试改用 *?? 使其不贪婪,因此它将在第一个时间戳处停止。

比较:greedy vs non-greedy.