![rsyslogd 模板停止工作](https://linux22.com/image/672400/rsyslogd%20%E6%A8%A1%E6%9D%BF%E5%81%9C%E6%AD%A2%E5%B7%A5%E4%BD%9C.png)
真的对发生的事情感到困惑。我已经在 Centos 6.5 服务器上运行了 rsyslogd 一段时间,现在将远程主机的日志记录到特殊文件夹 /data/rsyslog。昨天我设置了我们的防火墙以开始记录,它工作正常,只是日志对于该防火墙来说太大了,所以我决定设置一个 logrotate 作业来轮换它。今天早上所有日志都轮换了,但它不再记录到我的 rsyslog 文件夹中任何主机的任何文件中。起初我以为创建新文件出了问题,但我发现所有远程日志现在都转到标准 /var/log/message 文件。这是我的 rsyslog.conf 文件:
[root@backup1 etc]# cat rsyslog.conf
# rsyslog v5 configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
#### MODULES ####
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog # provides kernel logging support (previously done by rklogd)
#$ModLoad immark # provides --MARK-- message capability
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
#### GLOBAL DIRECTIVES ####
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg :omusrmsg:*
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
$template Secure_log,"/data/rsyslog/%fromhost%.secure"
$template Message_log,"/data/rsyslog/%fromhost%.message"
文件本来就是这样的,但是我发现我没有操作,所以我在最后添加了下面一行来测试:
*.* ?Message_log
现在所有内容都按预期进入其主机名文件,进入该文件夹,但同时也记录到 /var/log 文件夹。我猜上面的行是使用 /var/log/messages 执行此操作。在尝试使其正常工作的过程中,我已升级到 rsyslogd 版本 7。不确定发生了什么,但现在只是尝试从头开始使其工作,似乎无法找到正确的配置以将远程主机仅记录到该特殊文件夹。有人可以帮忙吗?
答案1
如果您想确保您的消息被写入特定的文件中,您需要过滤您的消息。
当您*.* ?Message_log
在文件末尾使用时,消息将会*.info;mail.none;authpriv.none;cron.none /var/log/messages
像您所期望的那样在之前传递。
在此之前$IncludeConfig /etc/rsyslog.d/*.conf
,您需要声明您的模板,并使用如果表达式来过滤您的消息。请尝试执行以下操作:
$template Secure_log,"/data/rsyslog/%fromhost%.secure"
$template Message_log,"/data/rsyslog/%fromhost%.message"
if ($fromhost-ip == "THE IP OF THE ONE SENDING MESSAGES") then {
*.* ?Message_log
stop
}
这会将所需消息记录到您指定的文件中,并将其丢弃停止,所以就不再其他地方写了。
另一种方法是在 /etc/rsyslog.d/ 中创建一个文件,例如00-示例.conf,让你的配置更加有条理。但请确保文件数量需要低于默认文件数量(即50)。