最近有一个networking故障导致了一系列其他问题,我一直在潜入我们的rsyslog.conf,以尝试find更稳定部署的机会。
我们有我们所有的应用程序服务器运行rsyslog,通过TCP转发到几个聚合服务器。 昨天,当其中一台服务器由于高丢包而几乎无法访问时,环境的其他部分就停下来了。 我想我已经发现了一些没有意义的configuration。
这是我们的客户端configuration:
# modules $ModLoad imuxsock # provides support for local system logging $ModLoad imklog # provides kernel logging support (previously done by rklogd) $KLogPath /proc/kmsg # global app configs $FileOwner syslog $FileGroup adm $FileCreateMode 0644 $DirCreateMode 0755 $Umask 0022 $PrivDropToUser syslog $PrivDropToGroup syslog $PreserveFQDN on # queue configs $MainMsgQueueType LinkedList $MainMsgQueueSize 50000 $ActionQueueType Direct $MainMsgQueueDiscardMark 300000 $MainMsgQueueDiscardSeverity 4 $MainMsgQueueFileName mainmsgqueue $MainMsgQueueMaxFileSize 200m $MainMsgQueueLowWaterMark 10000 $MainMsgQueueHighWaterMark 40000 $MainMsgQueueTimeoutEnqueue 1 $ActionQueueTimeoutEnqueue 1 # Log locally. authpriv.* /var/log/auth.log *.*;auth,authpriv.none -/var/log/syslog # Send all components to remote log servers *.* @@<server 1 IP> & @@<server 2 IP>
我的问题是:
A)在客户端服务器上,发送消息的“直接”队列将TCP发送给大多数(但不是完全)无法访问的服务器? 如果操作队列无法发送日志,MainMsg队列会立即开始备份吗?
B)“队列大小”为50000且“QueueMaxDiskSpace”未设置的“磁盘辅助”队列的最大总队列大小(内存和磁盘)是多less? 它是无限的,也就是说,“QueueSize”指令只适用于内存部分?
C)“QueueDiscardMark”指令是否适用于全部排队消息(内存和磁盘)或仅适用于内存部分?
在rsyslog论坛上获得更多帮助,并在这里交叉发布,以帮助任何人。
Rsyslog论坛主题:[ http://kb.monitorware.com/post24885.html#p24885%5D
解决scheme:1.)rsyslog目标是按顺序处理的,所以如果“服务器A”有数据包丢失,它会减慢传递到其余的目标。 这可以在当前版本的rsyslog中通过设置额外的并行化输出的“动作队列”来缓解。
2.)磁盘辅助队列的“队列大小”仅适用于内存部分。 磁盘队列将是无限的,除非您指定“QueueMaxDiskSpace”
3.)我没有得出一个确定的答案,即丢弃消息标记是否应用于磁盘辅助队列的内存和磁盘部分。 逻辑会build议它可以处理所有新的传入消息,而不pipe它们存储在哪里,但这只是一个猜测。