我已经使用 rsyslog 和 relp 设置了一个日志服务器。它可以很好地接收远程日志并将其放置在 /var/spool/rsyslog 中。
我的问题是:大多数这些消息也出现在我的 /var/log/messages 文件中,该文件会变得相当庞大,而且速度相当快。
我在日志服务器上的配置:
#### MODULES ####
$ModLoad imuxsock # provides support for local system logging
$ModLoad imklog # provides kernel logging support (previously done by rklogd)
# RELP config
$ModLoad imrelp
$InputRELPServerRun 2514
#### GLOBAL DIRECTIVES ####
# Filter duplicated messages
$RepeatedMsgReduction on
# Set the default permissions for all log files.
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog
$PrivDropToGroup syslog
# Where to place spool files
$WorkDirectory /var/spool/rsyslog
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
# global templates
# DONT CHANGE UNLESS YOU KNOW WHAT YOU ARE DOING
$ActionFileDefaultTemplate RSYSLOG_ForwardFormat
$template precise,"%syslogpriority% %syslogfacility% %timegenerated% %HOSTNAME% %syslogtag% %msg%\n"
$ActionFileDefaultTemplate precise
# This should place all remote log items into /var/spool/rsyslog
$template RemoteHost,"/var/spool/rsyslog/%programname%.log"
# My brain says: this prevents anything coming in from a remote host from
# being written in /var/log/whatever - MY BRAIN LIES TO ME!
if ($hostname != 'my.server.name') then ?RemoteHost
&~
我读了手册页后发现,主机名检查和“& 符号波浪号”应该可以防止远程内容污染我的日志文件。
线索?
DISTRIB_DESCRIPTION="Ubuntu 12.04.3 LTS"
答案1
你的 rsyslog 配置文件中必须有类似的东西
*.*;auth,authpriv.none -/var/log/syslog
如果您仔细查看,就会发现您正在将所有设施的所有严重性注册到 syslog 文件中,auth 和 authpriv 设施除外。
只需添加您不想记录的功能,再加上“无”严重性即可。IE:local6:
*.*;auth,authpriv.none;local6.none -/var/log/syslog
当然,修改配置文件后必须重新启动或重新加载rsyslog守护进程。
希望这会有所帮助,如果远不是简单地使用复杂的 rsyslog 过滤器的话。
答案2
我不确定您是否能够使用主机名。
我个人使用 $fromip == 'xxxx' 作为不同文件名的条件。
下面是一个很好的例子,它适用于我的设置,但如果您有很多不同的 IP 范围,它可能会是一个问题。
这是复制自
http://www.rsyslog.com/tag/more-complex-scenarios/
将远程系统的消息存储到特定文件中 2010 年 2 月 23 日星期二
这是一个日志整合场景。至少有两个系统,一个服务器和至少一个客户端。服务器用于收集所有客户端的日志数据。客户端可能会(也可能不会)在本地处理和存储消息。如果它们这样做,这里就无关紧要了。请参阅“向远程 Syslog 服务器发送消息”一文,了解如何配置客户端。
来自 192.0.1.x 网络中远程主机的消息应写入一个文件,来自 192.0.2.x 网络中远程主机的消息应写入另一个文件。需要考虑的事项
TCP 接收不是内置功能。您需要加载 imtcp 插件才能启用它。这只需要在 rsyslog.conf 中执行一次。在顶部执行即可。
注意,$InputTCPServerRun 中指定的服务器端口地址必须与客户端发送消息的端口地址相匹配。配置语句
$ModLoad imtcp
$InputTCPServerRun 10514
# do this in FRONT of the local/regular rules
if $fromhost-ip startswith '192.0.1.' then /var/log/network1.log
& ~
if $fromhost-ip startswith '192.0.2.' then /var/log/network2.log
& ~
# local/regular rules, like
*.* /var/log/syslog.log
答案3
这就是对我有用的。
用于接受来自远程主机的系统日志信息
$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
& ~
答案4
那么下面的怎么样?
if ($hostname != $fromhost) then {
## No further processing.
stop
}