我曾经希望 Debian 7 容器(在 OpenVZ 下)上的 rsyslogd (5.8.11) 也能接收来自远程主机的日志。在那方面,它有效。不再起作用的是来自本地主机的日志消息。例如当我输入:
$ logger -t shell "Test log message from the command line"
/var/log/messages
或 中什么也没有出现/var/log/syslog
。我所做的只是添加一个配置文件/etc/rsyslog.d
,如下所示:
# cat /etc/rsyslog.d/udp.conf
# Enable UDP listening
# http://www.rsyslog.com/tag/tcp/
$ModLoad imudp
# log every host in its own directory
$template RemoteHost,"/var/log/hosts/%HOSTNAME%/%$YEAR%-%$MONTH%-%$DAY%.log"
# Remote Logging
$RuleSet remote
*.* ?RemoteHost
### Listeners
# Bind ruleset to udp listener and activate
$InputUDPServerBindRuleset remote
$UDPServerRun 514
我原封不动地保留了库存/etc/rsyslogd.conf
,假设我不需要改变任何东西。这里是:
# purge /etc/rsyslog.conf # 'purge' is 'cat with comments removed'
$ModLoad imuxsock # provides support for local system logging
$ModLoad imklog # provides kernel logging support
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$WorkDirectory /var/spool/rsyslog
$IncludeConfig /etc/rsyslog.d/*.conf
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
mail.info -/var/log/mail.info
mail.warn -/var/log/mail.warn
mail.err /var/log/mail.err
news.crit /var/log/news/news.crit
news.err /var/log/news/news.err
news.notice -/var/log/news/news.notice
*.=debug;\
auth,authpriv.none;\
news.none;mail.none -/var/log/debug
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
*.emerg :omusrmsg:*
daemon.*;mail.*;\
news.err;\
*.=debug;*.=info;\
*.=notice;*.=warn |/dev/xconsole
使用此配置,远程主机的日志行也会出现在/var/log/messages
和中/var/log/syslog
(这不是我想要的)。本地日志行不再出现。
有谁知道如何添加远程日志记录同时保留 rsyslogd 的初始功能?
答案1
您$RuleSet remote
永远不会被终止,因此之后的所有规则都将与remote
规则集关联。
当您的内容/etc/rsyslog.d/udp.conf
被包含到主配置中时$IncludeConfig /etc/rsyslog.d/*.conf
,结果表明remote
规则集最终也覆盖了主文件中指定的默认规则/etc/rsyslog.conf
。
由于remote
规则集已声明其自己的所有规则,并且仅绑定到远程日志消息,因此有效结果是本地日志消息的规则列表现在是一个空列表。这就是为什么只有远程日志消息才会写入日志文件。
下一个问题是,如何你会终止 rsyslog 规则集吗?毕竟,此版本的 rsyslog 配置语法中没有$EndRuleSet
指令,也没有{
...块。}
答案是,你指定其他 $RuleSet
指示。
在您的 中/etc/rsyslog.d/udp.conf
,您应该像这样指定远程日志记录规则:
[...]
# Remote Logging
$RuleSet remote
*.* ?RemoteHost
# End of remote logging rules
$RuleSet RSYSLOG_DefaultRuleset
### Listeners
[...]
您可以在以下位置找到这样的示例Fedora 26 的系统管理员指南。
答案2
我放弃了这个案子。尽管它有更多的依赖项,但我安装了 syslog-ng,我对此更加了解。但这并不能回答问题,因为这是最后的解决办法。我把这个问题留给知道答案的人。