Это дополнительный вопрос из этого предыдущий вопрос, созданный, потому что я узнал больше информации, и было бы чище задать это как новый вопрос.
Я использую syslog-ng OSE v3.31.2, чтобы получать сообщения системного журнала RFC3164 через UDP-порт 514 от группы клиентов, записывать их как в файл, так и пересылать их в телеграф через не-TLS RFC5424 TCP-порт 601 для вставки в База данных InfluxDB.
Моя конфигурация syslog-ng:
@версия: 3.29
@include "scl.conf"
параметры {
флеш-линии (1);
};
источник s_network {
udp (ip (0.0.0.0) порт (514));
};
целевой d_file {
файл("/var/журнал/сообщения");
};
пункт назначения d_telegraf {
syslog («телеграф» порт (601) транспорт (tcp));
};
журнал {
источник (s_network);
пункт назначения (d_telegraf);
пункт назначения (d_file);
};
Соответствующая часть моей конфигурации телеграфа выглядит так:
[глобальные_теги]
[агент]
интервал = "100 мс"
раунд_интервал = правда
metric_buffer_limit = 10000
flush_buffer_when_full = истина
collection_jitter = "0s"
flush_interval = "100 мс"
flush_jitter = "0 с"
отладка = правда
тихо = ложь
[[outputs.influxdb]]
URL-адреса = ["http://influxdb:8086"]
база данных = "logs_db"
[[inputs.syslog]]
сервер = "tcp://телеграф:601"
По сути, syslog-ng настроен на пересылку записей системного журнала через TCP-соединение в телеграф.
Проблема в том, что я вижу, как syslog-ng страдает от частых отключений TCP от телеграфа. Они отображаются в журнале syslog-ng как:
[2021-11-17T02:55:32.662972] EOF произошел во время простоя; фд='12'
[2021-11-17T02:55:32.663102] Соединение системного журнала закрыто; fd='12', сервер='AF_INET(192.168.0.6:601)', time_reopen='60'
[2021-11-17T02:56:32.719139] Соединение с системным журналом установлено; fd='12', server='AF_INET(192.168.0.6:601)', local='AF_INET(0.0.0.0:0)'
Это отключение обычно срабатывает, когда я отправляю журнал в syslog-ng с помощью:
logger -i -d --server локальный тест
Но если я просто оставлю все это без дела, я также получу:
[2021-11-17T02:57:05.392356] EOF на канале управления, закрытие соединения;
В этих случаях 192.168.0.6 является сервером телеграфа.
Хотя я могу установить опцию время-открыть(1)
чтобы ускорить повторное подключение, я бы предпочел найти основную причину и предотвратить отключение в первую очередь.
Возможно ли, что существует несовместимость между syslog-ng и telegraf, которая вызывает этот EOF и нечистое отключение?
Все это выполняется в стеке компоновки докеров на одном хосте.
РЕДАКТИРОВАТЬ: я начал изучать RFC5424 и RFC6587. Используя Wireshark для прослушивания пакетов из syslog-ng, предназначенных для телеграфа, я определил, что они используют заполнение октетов (также известное как непрозрачное кадрирование), а не подсчет октетов, который телеграф ожидает по умолчанию. Полезная нагрузка каждого сообщения системного журнала для телеграфа начинается с символа «<», а не с целого числа.
Я предполагаю, что телеграф принимает эти сообщения, но застревает в их разборе и, следовательно, закрывает соединение. Первый FIN для закрытия соединения исходит от телеграфа.
К сожалению, когда я настраиваю телеграф на прием непрозрачного кадрирования, он отклоняет всю запись, и я еще не понял, почему.
Я также еще не понял, как настроить syslog-ng для вывода сообщений с подсчетом октетов.
Но, по крайней мере, сообщение EOF и отключение перестали происходить. Но я не уверен, что это много значит, если телеграф сразу отклоняет все сообщения.