Eu tenho um servidor rsyslog centralizado A que recebe um monte de logs através do TCP dos servidores X, Y, Z. Ele então armazena os arquivos no disco, mas também os encaminha para o servidor logstash B (em uma máquina diferente). Para a retransmissão para o servidor logstash B, eu uso o TCP da seguinte forma:
$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
Sempre que meu servidor logstash está inativo ou inacessível, depois de um tempo o rsyslog centralizado no servidor A não responde e, como conseqüência, meus servidores X, Y, Z começam a congelar ou ter altas cargas inesperadas enquanto os serviços tentam gravar no syslog.
Como configuro o rsyslog (do lado do servidor e / ou do lado do cliente) para ser mais robusto para esse ponto de falha?
Pergunta secundária: sempre que o servidor logstash é reiniciado, o rsyslog não reproduz os logs armazenados em / var / cache / rsyslog, alguém sabe como configurar isso?