我已经设置了 rsyslog(根据指南像这样)通过以下常规配置来提取远程日志:
module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="514")
module(load="imklog" permitnonkernelfacility="on")
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$RepeatedMsgReduction on
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog
$PrivDropToGroup syslog
$WorkDirectory /var/spool/rsyslog
$IncludeConfig /etc/rsyslog.d/*.conf
此外,我还创建了包含以下内容的文件/etc/rsyslog.d/remote.conf
:
$template RemoteLogs,"/mnt/monitoring-logs/logs/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs
$template HostAudit, "/mnt/monitoring-logs/logs/%HOSTNAME%/audit.log"
local6.* ?HostAudit
& ~
它可以创建相应的主机名目录和特定日志。但是,我还看到本地主机的日志文件(在 中/var/log
)中重复了所有日志。例如,/var/log/syslog
不仅包含来自监控服务器主机的消息,还包含所有其他远程主机的消息。
我该如何防止这种重复?我只希望看到来自主机本身的消息被记录到默认日志文件中。
我想我需要一些方法来停止转发这些特定的远程日志。看看文档(我从链接中找到这个问题)我注意到有一种方法可以添加规则集,因此我将我的常规配置更改为:
ruleset(name="remote") {
action(type="omfile" file="/mnt/monitoring-logs/logs/%HOSTNAME%/%PROGRAMNAME%.log")
stop
}
# ...
input(type="imudp" port="514" ruleset="remote")
input(type="imtcp" port="514" ruleset="remote")
这使得它停止将远程日志提取到通用日志文件,但也使其停止将输出写入专用/mnt/monitoring-logs
文件夹。
答案1
我能够通过两者的结合来解决这个问题。最终的完整配置如下:
ruleset(name="remote") {
$template RemoteLogs,"/mnt/monitoring-logs/logs/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs
$template HostAudit, "/mnt/monitoring-logs/logs/%HOSTNAME%/audit.log"
local6.* ?HostAudit
stop
}
module(load="imudp")
input(type="imudp" port="514" ruleset="remote")
module(load="imtcp")
input(type="imtcp" port="514" ruleset="remote")
module(load="imklog" permitnonkernelfacility="on")
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$RepeatedMsgReduction on
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog
$PrivDropToGroup syslog
$WorkDirectory /var/spool/rsyslog
$IncludeConfig /etc/rsyslog.d/*.conf
remote.conf
请注意,文件夹中现在没有特定的文件/etc/rsyslog.d/
。