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

时间:2019-09-30 14:43:14

标签: regex parsing logfile qradar

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

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

  • 正则表达式正则表达式: const express = require('express'); const router = express.Router(); const Task = require('../models/task'); router.get('/',async(req,res)=>{ const tasks = await Task.find(); console.log(tasks); res.json(tasks); } ); router.get('http://localhost:3000/api/task/:id',async(req,res)=>{ const tasks = await Task.findById(req.params.id); console.log(tasks); res.json(tasks); } ); router.post('http://localhost:3000/api/task', async(req,res)=>{ const { title,img, price, info } = req.body; const task = new Task({ title:title, img:img, price:price, info:info }); await task.save(); res.json({status :'Task saved'}); }); router.put('http://localhost:3000/api/task/:id',async (req,res)=>{ const { title,img, price,info } = req.body; const newTask = { title:title, img:img, price:price, info:info }; await Task.findByIdAndUpdate(req.params.id,newTask); res.json({status : 'Task Updated'}); }); router.delete('http://localhost:3000/api/task/:id', async(req,res)=>{ await Task.findByIdAndRemove(req.params.id); res.json({status:'Task Deleted'}); }); module.exports = router;

  • 正则表达式正则表达式:^(\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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

比较:greedynon-greedy