我一直在尝试删除要由arcsight连接器读取的空格或字符。我曾尝试将模板与regex表达式一起使用,但没有成功-问题是arcsight会解析一个字段中的所有内容,因为它不能识别CEF格式
我已经使用了两个模块omfwd和omfile,在这两个模块上都没有工作
OMFWD原始日志示例
CEF:0|Symantec|Messaging Gateway||ASA|CEF: 0\|CISCO\|ASA\|\|305011\|Built dynamic TCP translation\|Low\| eventId=41069435 proto=TCPOMFILE原始日志示例
2019-05-08T20:55:04.913701+00:00 CEF: 0|CISCO|ASA||302013|Built outbound TCP connection|Low| eventId=17363056 externalId=116395008 proto=TCP 我想这样设置消息的格式
CEF:0|思科|ASA||302013|已建立出站TCP连接|Low| eventId=17363056 externalId=116395008 proto=TCP
没有空格或其他任何东西
下面是我们尝试使用的模板:
$template outfmt,"%msg:R,ERE,1:(.*) CEF: --end% CEF: %msg:R,ERE,1: CEF: (.*)--end%\n"
$template outfmt,"%msg:R,ERE,1,\?(.*)\sCEF\:\s\?(.*)--end% CEF: %msg:R,ERE,1,\?(.*)CEF\:\?(.*)--end%\n"在rsyslog网站上,任何可以帮助解决这个问题的人的文档都是很差的。
发布于 2019-05-09 11:40:38
如果您希望设计一个表达式来删除不需要的空格,this expression可能会给您一个想法。
^(.+)([A-Z]{3}:)(\s+)([A-Z0-9|=]+)(.*\S\s*?)如果你愿意,你可以简化它或者给它添加更多的边界。
我假设你的输入字符串中有一些额外的不需要的空格。我只看到了两个不需要的空格实例,一个在$3组中,另一些在末尾,我使用groups ()捕获了它们,您可以像这样简单地删除这些空格。如果可能有更多的空间,您可以在任何可能存在额外空间的地方添加这些捕获组。
我的边界是宽松的,比如([A-Z0-9|=]+),它只是简单地滑动一些字母和数字,而没有逻辑。我这样做是因为我不知道您的实例可能是什么样子的。如果您愿意,您可以简单地限制它们。

图表
此图显示了表达式的工作方式,您可以在此link中可视化其他表达式:

性能测试
这个JavaScript片段使用一个简单的100万次for循环显示了该表达式的性能。
const repeat = 1000000;
const start = Date.now();
for (var i = repeat; i >= 0; i--) {
var string = '2019-05-08T20:55:04.913701+00:00 CEF: 0|CISCO|ASA||302013|Built outbound TCP connection|Low| eventId=17363056 externalId=116395008 proto=TCP ';
var regex = /^(.+)([A-Z]{3}:)(\s+)([A-Z0-9|=]+)(.*\S\s*?)(.*)/gm;
var match = string.replace(regex, "$2$4$5");
}
const end = Date.now() - start;
console.log("YAAAY! \"" + match + "\" is a match ??? ");
console.log(end / 1000 + " is the runtime of " + repeat + " times benchmark test. ? ");
发布于 2020-06-29 20:55:17
你不能只使用CEF SYSLOG连接器来裁剪syslog头和进程吗?也许可以将其设置为forwarder。
https://stackoverflow.com/questions/56051254
复制相似问题