Descobri que o rsyslog, ao encaminhar logs via TCP para um host remoto, às vezes fica suspenso quando não pode encaminhar para o host remoto. Mesmo quando o host remoto retorna, o rsyslog permanece suspenso e, como resultado, reduz a velocidade de todo o resto do sistema que tenta efetuar o log. Reiniciar o rsyslog faz o truque quando isso acontece, mas reiniciá-lo regularmente através de um cron job nunca pareceu funcionar para mim. A melhor solução que encontrei é não ter tanto o host remoto. :)
No entanto, existem ajustes que podem ser feitos no rsyslog para que ele seja enfileirado em vez de bloqueado. Você ainda pode experimentar o problema e, nesse caso, nenhum registro será encaminhado até que o rsyslog seja reiniciado, mas isso não afetará o sistema como um todo.
Comente sua regra de encaminhamento atual e solte-a no final do seu rsyslog.conf:
$WorkDirectory /var/spool/rsyslog # where to place spool files
$MainMsgQueueFileName mainqueue # unique name prefix for spool files
$MainMsgQueueMaxDiskSpace 2g # 1gb space limit (use as much as possible)
$MainMsgQueueSaveOnShutdown on # save messages to disk on shutdown
$MainMsgQueueType LinkedList # run asynchronously
$MainMsgResumeRetryCount -1 # infinite retries if host is down
*.* @@1.2.3.4:514 # replace this with your own forwarding rule
Você precisará certificar-se de que / var / spool / rsyslog exista porque não o criará de outra forma.