Rsyslog 正则表达式

Rsyslog 正则表达式

我的服务器syslog上有很多传入消息。rsyslogstormshield发送不同类别的消息(连接、网络、警报……)

我无法为每个类别配置不同的设施,因此我需要使用正则表达式将传入消息拆分到不同的文件中。

所有的消息都是不同的,并且消息中或多或少有一些字段,但是有一个字段logtype来标识类别:

Syslog message 
Msg = bullshitcontentbullshitcontent logtype:"connection" bullshitcontentbullshitcontent

所以问题是:

如何使用logtypePOSIX 正则表达式收集字段的字符串,rsyslog并且 - 如果您知道如何 - 根据 的值拆分在不同的文件中logtype

答案1

我知道这有点晚了,但这是可能的。我不知道你如何获取这些日志(也许是快速搜索建议的网络),但我有类似的设置。您可以使用规则集,制定(有趣的是)不用作默认规则的新规则集。并在内置脚本语言中雷纳脚本,有一个re_match函数,返回 true 或 false。

ruleset(name="stormshield") {
    if re_match($msg, "your POSIX ERE regex") then {
        action(type="omfile" file="/your/file/name/here")
        stop
    } else if re_match(...) then { ... }
    else { ... }
}

$msg是对当前日志的引用。

omfile用于输出模块,所以如果您需要数据库或任何东西,还有其他选项。

一旦你完成了if..else if...else其他事情就可以去那里。stop一旦完成,就需要丢弃该消息,否则它也会转到其他规则。我认为您也可以在操作后添加波浪号~,但您必须检查一下。

如何将日志定向到规则集(bind如文档所述)取决于源。对于网络或文件源,有该input功能,并且输入模块例如 和"imtcp""imfile"其中有一个规则集参数。您可能需要为某些模块获取额外的软件包:

input(type="imfile" File="/input/file/here.log" Tag="..." Ruleset="ruleset name")
input(type="imtcp" Port="1234" Name="name" Ruleset="ruleset name")

最后,如果您需要发送特定设施,您可以使用call:(local0.* call rulesetName看起来没有引号)例如(根据需要选择需要记录的内容)

我想我已经有很多这样的事情了。我刚刚查看了conf 文件,因此对任何错误表示歉意。

相关内容