Rsyslog:从自定义日志文件中仅转发与模式匹配的消息

Rsyslog:从自定义日志文件中仅转发与模式匹配的消息

我想转发符合以下模式的消息(HELLO在本例中)风俗日志文件(/home/ubuntu/test.log)到远程 rsyslog 服务器。

配置如下:

# cat /etc/rsyslog.d/05-forwarding.conf
*.* @@rsyslogserver.mycompany.com:10514

# cat /etc/rsyslog.d/10-custom.conf
$ModLoad imfile
$InputFilePollInterval 1
$InputFileName /home/ubuntu/test.log
$InputFileTag testlogs:
$InputFileStateFile testlogs
$InputRunFileMonitor
:msg, contains, "HELLO" /var/log/testlog_error.log
& stop
:msg, !contains, "HELLO" stop

问题:

  1. 所有发往 的消息/var/log/syslog 已停止。<<不好
  2. HELLO包含单词的消息/home/ubuntu/test.log将会/var/log/testlog_error.log被转发到远程 rsyslog 服务器,<<好的
  3. 消息不是包含HELLO单词的/home/ubuntu/test.log不会/var/log/testlog_error.log好的但这些消息正在被转发到远程 rsyslog 服务器。<<坏的

我的理想情况应该是:

  1. 系统和所有其他消息应继续转到/var/log/syslog
  2. 这里没有变化。一切按预期进行。
  3. 消息不是包含HELLO单词的/home/ubuntu/test.log应该被完全丢弃。不要写入本地文件,也不要将此类消息转发到远程服务器。

需要帮助我解决上述第 1 点和第 3 点。

答案1

事实上,你的文件/etc/rsyslog.d/05-forwarding.conf转发所有经过思考的消息,而不仅仅是来自自定义文件的消息/home/ubuntu/test.log。 所以你可以删除正如您所说,您只想转发来自自定义文件的消息。

您的文件/etc/rsyslog.d/10-custom.conf必须看起来像:

$ModLoad imfile
$InputFilePollInterval 1
$InputFileName /home/ubuntu/test.log
$InputFileTag testlogs:
$InputFileStateFile testlogs
$InputFileFacility local0
$InputRunFileMonitor

:syslogtag, isequal, "testlogs:" {
  :msg, contains, "HELLO" {
    local0.* /var/log/testlog_error.log
    local0.* @@rsyslogserver.mycompany.com:10514
  }
  stop
}

如您所见,我添加了以下内容:

$输入文件工具 local0

现在您的自定义文件将被监控,并且其消息将被写入 local0 设施。来自 local0 的消息将带有您与之关联的标签。

:syslogtag,isequal,“testlogs:”

此规则将仅匹配包含标签 testlogs: 的消息,这正是您想要的消息。因此,所有其他消息都将跳过它,并记录在 /var/log/syslog 和 50-default.conf 中的所有其他内容中。

:msg,包含“HELLO”

现在,文件中所有包含 HELLO 的消息都将记录在 /var/log/testlog_error.log 中并转发到 @@rsyslogserver.mycompany.com:10514。

然后,“停止”将丢弃正在 local0 中写入的文件中的所有消息。

相关内容