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

sla*_*fer 2 ubuntu 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
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 所有发送到 的消息/var/log/syslog 都已停止。<<不好
  2. 包含HELLOword in 的消息/home/ubuntu/test.log/var/log/testlog_error.log被转发到远程 rsyslog 服务器,<< GOOD
  3. 消息包含HELLO在字/home/ubuntu/test.log都不会/var/log/testlog_error.log,但这些消息越来越转发到远程服务器rsyslog现在。<<

我的理想情况应该是:

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

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

Lui*_*ger 7

实际上,您的文件/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
}
Run Code Online (Sandbox Code Playgroud)

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

$InputFileFacility local0

现在您的自定义文件将被监视,并且它的消息将写入 local0 工具中。来自 local0 的消息将具有您与之关联的标签。

:syslogtag, isequal, "testlogs:"

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

:msg, 包含, "你好"

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

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