J'ai un serveur centralisé rsyslog A qui reçoit un tas de journaux via TCP depuis les serveurs X, Y, Z. Il stocke ensuite les fichiers sur le disque mais les transmet également au serveur logstash B (sur une autre machine). Pour le relais vers le serveur logstash B, j'utilise TCP comme suit :
$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
Chaque fois que mon serveur logstash est en panne ou inaccessible, après un certain temps, le rsyslog centralisé sur le serveur A ne répond plus et, par conséquent, mes serveurs X, Y, Z commencent à geler ou à avoir des charges élevées inattendues lorsque les services essaient d'écrire dans le syslog.
Comment puis-je configurer rsyslog (côté serveur et/ou côté client) pour qu'il soit plus robuste à ce point de défaillance ?
Question secondaire : à chaque fois que le serveur logstash est redémarré, rsyslog ne lit pas les logs stockés dans /var/cache/rsyslog, quelqu'un sait comment configurer cela ?