【问题标题】:RegEx for Formating Rsyslog Logs to work with Arcsight Template用于格式化 Rsyslog 日志以使用 Arcsight 模板的 RegEx
【发布时间】:2019-09-26 19:23:23
【问题描述】:

我一直在尝试摆脱 arcsight 连接器要读取的空格或字符我尝试使用带有正则表达式的模板但没有运气 - 问题是 arcsight 解析一个字段中的所有内容,因为它无法识别格式为 CEF

我一直在使用两个模块 omfwd 和 omfile 都试过了都不起作用

OMFWD 原始日志样本

 CEF:0|Symantec|Messaging Gateway||ASA|CEF: 0\|CISCO\|ASA\|\|305011\|Built dynamic TCP translation\|Low\| eventId=41069435 proto=TCP

OMFILE 原始日志样本

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|CISCO|ASA||302013|已建立出站 TCP 连接|低| 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 网站上,任何可以帮助解决文档的人都非常糟糕..

【问题讨论】:

  • 以防万一有人正在寻找对发送到 arcsight 的 rsyslog 消息的修复,我发现您可以将此模板与 ``` $template outfmt,"%timegenerated % %HOSTNAME% %syslogtag%%msg:::drop-last-lf%\n" ``` ``` action(type="mmrm1stspace") ``` 删除空格

标签: regex rsyslog


【解决方案1】:

您不能只使用 CEF SYSLOG 连接器来删除 syslog 标头和进程吗? 也许将其设置为转发器。

【讨论】:

    【解决方案2】:

    如果您想设计一个表达式来删除不需要的空格,this expression 可能会给您一个想法。

    ^(.+)([A-Z]{3}:)(\s+)([A-Z0-9|=]+)(.*\S\s*?)
    

    如果需要,您可以对其进行简化或添加更多边界。

    我假设您的输入字符串中有一些多余的空格。我只在$3 组中看到了两个不需要的空格实例,最后一些是我使用() 组捕获的,您可以像删除这些空格一样简单。如果可能有更多空间,您可以在可能存在额外空间的地方添加这些捕获组。

    我的界限放宽了,比如([A-Z0-9|=]+),就是简单的刷了一些字母和数字,没有逻辑。我这样做是因为我不知道您的实例可能是什么样子。如果您愿意,您可以简单地限制它们。

    图表

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

    性能测试

    这个 JavaScript sn-p 使用简单的 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. ? ");

    【讨论】:

    • 以防万一有人正在寻找对发送到 arcsight 的 rsyslog 消息的修复,我发现您可以将此模板与 ''' $template outfmt 一起使用,"%timegenerated % %HOSTNAME% %syslogtag%%msg:::drop-last-lf%\n" ''' ''' action(type="mmrm1stspace") '''
    • 以防万一有人正在搜索对发送到 arcsight 的 rsyslog 消息的修复,我发现您可以将此模板与 ``` $template outfmt,"%timegenerated % %HOSTNAME% %syslogtag%%msg:::drop-last-lf%\n" ``` ``` action(type="mmrm1stspace") ``` 删除空格
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 2023-03-20
    • 2012-06-21
    • 1970-01-01
    相关资源
    最近更新 更多