rsyslogd 模板停止工作

rsyslogd 模板停止工作

真的对发生的事情感到困惑。我已经在 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)。

相关内容