从日志文件中读取多行日志
Multiline Log Reading from Log file
我从记录多行类型的日志文件中读取日志。读取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
这是我的 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.
我从记录多行类型的日志文件中读取日志。读取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
这是我的 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.