我让syslog成功地将日志转发到上游服务器,如下所示:
$MainMsgQueyeType LinkedList
$MainMsgQueueSize 10000
$MainMsgQueusDiscardMark 8000
$MainMsgQueueDiscardSeverity 1
$MainMsgQueueSaveOnShutdown off
$MainMsgQueueTimeoutEnqueue 0
$ActionQueueType LinkedList # in memory queue
$ActionQueueFileName fwdRule1 # unique name prefix for spool files
$ActionQueueSize 10000 # Only allow 10000 elements in the queue
$ActionQueueDiscardMark 8000 # Only allow 8000 elements in the queue before dropping msgs
$ActionQueueDiscardSeverity 1 # Discard Alert,Critical,Error,Warning,Notice,Info,Debug, NOT Emergency
$ActionQueueSaveOnShutdown off # save messages to disk on shutdown
$ActionQueueTimeoutEnqueue 0
$ActionResumeRetryCount -1 # infinite retries if host is down
$RepeatedMsgReduction off
*.* @@remoteserver.mynetwork.com:5544
在远程服务器上,我有一些与syslog进行对话并侦听该端口的东西。为了测试,我有一个简单的日志客户端,每秒记录100条消息到syslog。
这一切都运行正常,我已经配置了上面的队列,以便在远程服务器不可用的情况下,队列开始填满,最后消息被丢弃,从而保护syslog阻止其日志客户端。
当我在remoteserver:5544上停止远程日志接收器时,syslog仍然稳定(队列填满/填满),但是当我稍后重启远程日志接收器时,rsyslog再次检测到服务器,重新建立TCP连接
但是 - 尽管队列中有数千条消息,并且日志记录客户端继续每秒记录100条消息,但syslog只向它转发了1条消息
如果检测到远程服务器备份后,如何让syslog再次开始转发邮件? (不重启syslog)。
使用rsyslog 4.6.2-2
我正在使用,并希望使用TCP
答案 0 :(得分:5)
如果遇到任何人遇到此问题,则该工作目录设置为:
$WorkDirectory /var/spool/rsyslog
以上配置,这样做:
$ActionQueueFileName fwdRule1
即使它应该是内存中的队列。因此,当队列达到800(奇怪,不是8000)时,磁盘辅助模式被激活,并且syslog尝试将消息写入/ var / spool / rsyslog。 此目录不存在。随机地(因此必须存在竞争条件和rsyslog中的错误),在不断尝试在该目录中的磁盘上打开队列文件后,rsyslog进入扭曲状态并放弃并继续排队消息,直到它达到高位10,000马克。重新启动下游日志服务器无法使其恢复。
取出对ActionQueueFileName的所有引用并使WorkDirectory存在修复此问题。