我想转发符合以下模式的消息(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
问题:
- 所有发往 的消息
/var/log/syslog
已停止。<<不好 HELLO
包含单词的消息/home/ubuntu/test.log
将会/var/log/testlog_error.log
被转发到远程 rsyslog 服务器,<<好的- 消息不是包含
HELLO
单词的/home/ubuntu/test.log
不会/var/log/testlog_error.log
是好的但这些消息正在被转发到远程 rsyslog 服务器。<<坏的
我的理想情况应该是:
- 系统和所有其他消息应继续转到
/var/log/syslog
- 这里没有变化。一切按预期进行。
- 消息不是包含
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 中写入的文件中的所有消息。