无法转发rsyslog

我有一个集中的rsyslog服务器A,它通过服务器X,Y,Z的TCP接收一堆日志。然后它将这些文件存储在磁盘上,并将它们转发到logstash服务器B(在另一台机器上)。 对于转发到logstash服务器BI使用TCP,如下所示:

$template logstash_json,"{\"@timestamp\":\"%timestamp:::date-rfc3339,jsonf:@timestamp%\",\"@source_host\":\"%source:::jsonf:@source_host%\",\"@source\":\"syslog://%fromhost-ip:::json%\",\"@message\":\"%timestamp% %app-name%:%msg:::json%\",\"@fields\":{\"facility\":\"%syslogfacility-text:::jsonf:facility%\",\"severity\":\"%syslogseverity-text:::jsonf:severity%\",\"program\":\"%app-name:::jsonf:program%\",\"pid\":\"%procid:::jsonf:processid%\"}}" $WorkDirectory /var/cache/rsyslog # default location for work (spool) files - make sure it's created $ActionQueueType LinkedList # use asynchronous processing $ActionQueueFileName srvrfwd # set file name, also enables disk mode $ActionResumeRetryCount -1 # infinite retries on insert failure $ActionQueueSaveOnShutdown on # save in-memory data if rsyslog shuts down # Ship logs over TCP to logstash *.* @@server_B:2514;logstash_json 

每当我的logstash服务器closures或无法访问,一段时间后,服务器A上的集中rsyslog无响应,因此我的服务器X,Y,Z开始冻结或意外的高负载,而服务尝试写入系统日志。

如何configurationrsyslog(服务器端和/或客户端)更强大的这个失败点?

侧面的问题:每当logstash服务器重新启动时,rsyslog不会播放存储在/ var / cache / rsyslog中的日志,任何人都知道如何configuration这个?

你需要在rsyslog中configuration排队,相关的讨论在这里:

http://help.papertrailapp.com/discussions/problems/1983-ubuntu-network-hang-up-on-failures-to-reach-papertrail

这是相关的答案部分 – 我假设你会在s之前查看实际文档中的指令:

*.* @@logs.papertrailapp.com之前添加以下*.* @@logs.papertrailapp.com并重新启动*.* @@logs.papertrailapp.com应该可以完成这项工作:

$ ActionResumeInterval 10
$ ActionQueueSize 100000
$ ActionQueueDiscardMark 97500
$ ActionQueueHighWaterMark 80000
$ ActionQueueType LinkedList
$ ActionQueueFileName papertrailqueue
$ ActionQueueCheckpointInterval 100
$ ActionQueueMaxDiskSpace 2g
$ ActionResumeRetryCount -1
$ ActionQueueSaveOnShutdown
$ ActionQueueTimeoutEnqueue 10
$ ActionQueueDiscardSeverity 0