转发 rsyslog 失败

转发 rsyslog 失败

我有一个集中式 rsyslog 服务器 A,它通过 TCP 从服务器 X、Y、Z 接收大量日志。然后它将文件存储在磁盘上,但也将它们转发到 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 服务器关闭或无法访问时,一段时间后服务器 A 上的集中式 rsyslog 就会变得没有响应,结果就是我的服务器 X、Y、Z 在服务尝试写入 syslog 时开始冻结或出现意外的高负载。

如何配置 rsyslog(服务器端和/或客户端)以更好地应对此故障点?

附带问题:每当 logstash 服务器重新启动时,rsyslog 不会播放存储在 /var/cache/rsyslog 中的日志,有人知道如何配置吗?

答案1

您需要在 rsyslog 中配置排队,相关讨论在这里:

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

这是相关的答案部分——我假设您将在 s 之前查找实际文档中的指令:

在之前添加以下内容*.* @@logs.papertrailapp.com并重新启动 rsyslog 就可以了:

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

相关内容