我正在从记录多行类型的日志文件中读取日志。在阅读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为什么将它们作为一个整体阅读?
您(或qradar)可能正在使用带有多行捕获字符的贪婪量词。
[如果您正在执行以下操作:^(\d{7})\,(?:\n|.)*(\d{2}:\d{2}:\d{2})$
其中中心组为(?:\n|.)*
或跨多行匹配的任何类似短语,则贪婪的运算符*
表示它将尝试从头7位开始进行匹配到整个日志页面上的最后一个时间戳,忽略您的开始和结束锚点。尝试使用*?
代替; ?
使它变得非贪婪,因此它将在第一个时间戳记处停止。
比较:greedy与non-greedy。