Rsyslog:如何将传入日志与 IP 地址分开

cta*_*taf 4 syslog

我正在尝试使用以下配置设置 Rsyslog:我监听 514 端口以接收来自不同主机的数据:172.16.111.222、172.16.111.111 和 172.16.222.111。我想将这些日志存储在每个主机的不同文件夹中。所以我做了这个conf:

$ModLoad imudp


$Ruleset RemoteConnections
$RulesetCreateMainQueue on
$ActionQueueType LinkedList
$ActionQueueFileName dbremotecons
$ActionResumeRetryCount -1
*.* ~


$InputUDPServerBindRuleset RemoteConnections
$UDPServerRun 514

if $fromhost-ip=='172.16.111.222' then /var/log/prod1/%FROMHOST-IP%/%syslogfacility-text%.log
& ~
if $fromhost-ip=='172.16.111.111' then /var/log/prod1/%FROMHOST-IP%/%syslogfacility-text%.log
& ~

if $fromhost-ip=='172.16.222.111' then /var/log/product2/%FROMHOST-IP%/%syslogfacility-text%.log
& ~
Run Code Online (Sandbox Code Playgroud)

不幸的是,它不起作用,rsyslog 没有记录任何内容。我不确定“&~”是什么意思,我在网上找到的。

有什么想法让它发挥作用吗?

小智 5

您不能直接在规则中使用占位符。请改用模板。以下应该有效:

$template DynaFile,"/var/log/%FROMHOST-IP%/%syslogfacility-text%.log"
*.* -?DynaFile
Run Code Online (Sandbox Code Playgroud)

或者,为了更接近您的代码:

$template prod1,"/var/log/prod1/%FROMHOST-IP%/%syslogfacility-text%.log"
$template prod2,"/var/log/prod2/%FROMHOST-IP%/%syslogfacility-text%.log"
if $fromhost-ip=='172.16.111.111' then ?prod1
if $fromhost-ip=='172.16.111.222' then ?prod1
if $fromhost-ip=='172.16.222.111' then ?prod2
Run Code Online (Sandbox Code Playgroud)