Temos uma configuração com um servidor Logstash (1.4.2, usando o Elasticsearch incorporado) para receber logs de vários outros clientes (via TCP e de suas instâncias rsyslogd
). Um problema que agora acontece repetidamente é que as mensagens de um por um dos hosts não são mais recebidas, no entanto, não há mensagens de erro em lugar algum para serem vistas.
Parece basicamente que o host do Logstash não pode processar a quantidade de mensagens recebidas e as conexões são deixadas em um estado estranho; Eu fiz lsof
/ strace
no cliente rsyslogd
instâncias e também capturei algum tráfego nos clientes e no servidor e parece que enquanto os clientes ainda têm uma conexão aberta:
rsyslogd 30088 syslog 1u IPv4 14878202 0t0 TCP 10.129.X.X:47492->10.129.X.X:5544 (ESTABLISHED)
, essa conexão é basicamente quebrada quando o servidor (porta 5544
) envia mensagens TCP Zero Window, que, como Wireshark me diz , é basicamente o Logstash que não está acompanhando (o uso da CPU no host nem sempre está no máximo, mas regularmente em cerca de 75% nos quatro núcleos).
A minha pergunta é: Existe flag / setting / ... para obter os daemons rsyslogd
para recuar / reconectar em tal situação, ou para o Logstash fechar corretamente as conexões se ele não puder acompanhar? ? (Isso é um problema conhecido ?, porque não consegui encontrar nenhum link relevante.)
Edit: Enquanto isso, alteramos o plug-in de entrada para tcp
em vez de syslog
, o que, junto com o manual grok
parsing, parece lidar melhor com a carga. Eu ainda gostaria de entender o problema original.