У нас есть установка с одним сервером Logstash (1.4.2, с использованием встроенного Elasticsearch) для получения журналов от ряда других клиентов (через TCP и их rsyslogd
экземпляры). Одна проблема, которая сейчас возникает неоднократно, заключается в том, что одно за другим сообщения от хостов больше не принимаются, однако нигде нет сообщений об ошибках.
По сути, похоже, что хост Logstash не может обработать количество входящих сообщений, и соединения остаются в странном состоянии; я сделал lsof
/strace
на клиенте rsyslogd
экземпляров, а также захватил некоторый трафик как на клиентах, так и на сервере, и кажется, что пока у клиентов все еще открыто соединение:
rsyslogd 30088 syslog 1u IPv4 14878202 0t0 TCP 10.129.X.X:47492->10.129.X.X:5544 (ESTABLISHED)
, это соединение в основном разорвано, поскольку сервер (порт 5544
) отправляет сообщения TCP Zero Window, которые, как Wireshark говорит мне, по сути, Logstash не успевает (загрузка ЦП на хосте не всегда максимальна, а регулярно составляет около 75% на всех четырех ядрах).
У меня такой вопрос: есть ли флаг / настройка / ... для получения rsyslogd
демоны, чтобы отступить / повторно подключиться в такой ситуации, или для Logstash, чтобы правильно закрыть соединения, если он не может поддерживать? (Это известная проблема? Потому что мне не удалось найти подходящие ссылки.)
Изменить: тем временем мы изменили плагин ввода на tcp
вместо того syslog
, который вместе с руководством grok
парсинг, вроде лучше справляется с нагрузкой. Я все же хотел бы понять исходную проблему.