我的服务器syslog
上有很多传入消息。rsyslog
它stormshield
发送不同类别的消息(连接、网络、警报……)
我无法为每个类别配置不同的设施,因此我需要使用正则表达式将传入消息拆分到不同的文件中。
所有的消息都是不同的,并且消息中或多或少有一些字段,但是有一个字段logtype
来标识类别:
Syslog message
Msg = bullshitcontentbullshitcontent logtype:"connection" bullshitcontentbullshitcontent
所以问题是:
如何使用logtype
POSIX 正则表达式收集字段的字符串,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 文件,因此对任何错误表示歉意。