阻止 rsyslog 将远程主机消息记录到本地 /var/log/syslog

阻止 rsyslog 将远程主机消息记录到本地 /var/log/syslog

我使用 rsyslog 通过以下方式将日志从远程主机保存到服务器:

服务器:

# Logfile for each host
$template DynaFile,"/var/log/rsyslog/%HOSTNAME%.log"
*.* -?DynaFile

客户:

*.* @servername

这会为服务器中的每个客户端主机创建日志文件/var/log/rsyslog/,但也会将每条消息记录到服务器中/var/log/syslog。所以它变得非常臃肿。如何防止它只/var/log/syslog包含来自服务器本身的消息?

答案1

您必须确保您的新规则得到评估记录到 /var/log/syslog 的那个。
例如,在 Ubuntu Trusty (rsyslog 7.4.4) 上, /etc/rsyslog.conf 包含
$IncludeConfig /etc/rsyslog.d/*.conf
从 加载默认规则/etc/rsyslog.d/50-default.conf,其中包括 /var/log/syslog 的规则。

在这种情况下,您可以添加一个要在该文件之前加载的新文件,例如00-remote.conf.为了完整起见,以下是我正在管理的系统的内容:

$template RemoteStore, "/var/log/remote/%HOSTNAME%/%timegenerated:1:10:date-rfc3339%"
:source,isequal,"NAS",-?RemoteStore
& ~

答案2

这对我有用:

## For accepting syslog info from remote hosts
$template TempAuth, "/var/log/infosys/%HOSTNAME%/%PROGRAMNAME%.log"
$template TempMsg,  "/var/log/infosys/%HOSTNAME%/%PROGRAMNAME%.log"

if ($fromhost-ip != "127.0.0.1" ) then ?TempAuth
& ~
if ($fromhost-ip != "127.0.0.1" ) then  ?TempMsg
& ~

答案3

我已经为此做了很多工作,我想我已经找到了解决方案。我鼓励其他人尝试这样做并寻找潜在的不利后果。我建议首先在实验室/测试和非关键机器上实现这一点。

$template PerHostLog,"/var/log/net-hosts/%fromhost-ip%/%fromhost-ip%.log"
$template RemoteHostFileFormat,"%TIMESTAMP% %fromhost-ip% %syslogfacility-text% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::space-cc,drop-last-lf%\n”
:inputname, isequal, "imudp" ?PerHostLog;RemoteHostFileFormat
:fromhost-ip , !isequal , "127.0.0.1" stop

以上 4 行位于我的 /etc/rsyslog.conf 文件的最顶部部分

我当前正在观看 2 个日志文件:
/var/log/net-hosts/10.1.1.1
和 /var/log/syslog

当我观看这两个文件时,我看到日志填充到远程主机文件中,但不在系统日志中。我重新启动了 apache,并在 syslog 中看到了此任务的日志条目。

答案4

对于较新的版本,以下代码修复了该问题。

input(type="imudp" port="514" ruleset="remote")
ruleset(name="remote"){
    $template DynaFile,"/var/log/rsyslog/%HOSTNAME%.log"
    if ($fromhost-ip != "127.0.0.1") then -?DynaFile
}

相关内容