从日志文件读取多行日志

问题描述 投票:0回答:1

我正在从记录多行类型的日志文件中读取日志。在阅读QRadar时,将两个记录组合起来并当作一个日志。

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

开始模式RegEx:^(\ d {7})\,结束模式RegEx:(\ d {2}:\ d {2}:\ d {2})$

我应该已经阅读过类似的日志:

1158896,someuser,内部用户,未成年人,10.6.130.11,2019-09-29 03:01:15,安全管理,登录到服务器,网络管理,成功,用户名:someuser,2019-09-29 3时01分15秒1158897,someuser,Inner User,Minor,10.6.130.11,2019-09-29 03:03:16,安全管理,注销服务器,网络管理,成功,“用户名:someuser在线持续时间:0天0小时2分钟1秒“ ,, 2019-09-29 03:03:16

但是我收到了其中一些,例如:

1158896,someuser,内部用户,未成年人,10.6.130.11,2019-09-29 03:01:15,安全管理,登录到服务器,网络管理,成功,用户名:someuser,2019-09-29 03:01:151158897,someuser,Inner User,Minor,10.6.130.11,2019-09-29 03:03:16,安全管理,注销服务器,网络管理,成功,“用户名:someuser在线持续时间:0天(s)0小时2分钟1秒“,2019-09-29 03:03:16

这是我的RegEx起始和结束模式的regex101.com记录。

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

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

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

regex parsing logfile qradar
1个回答
0
投票

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

[如果您正在执行以下操作:^(\d{7})\,(?:\n|.)*(\d{2}:\d{2}:\d{2})$其中中心组为(?:\n|.)*或跨多行匹配的任何类似短语,则贪婪的运算符*表示它将尝试从头7位开始进行匹配到整个日志页面上的最后一个时间戳,忽略您的开始和结束锚点。尝试使用*?代替; ?使它变得非贪婪,因此它将在第一个时间戳记处停止。

比较:greedynon-greedy

© www.soinside.com 2019 - 2024. All rights reserved.