Рейтинг:0

syslog-ng / telegraf: EOF произошел при простое - несовместимо?

флаг al

Это дополнительный вопрос из этого предыдущий вопрос, созданный, потому что я узнал больше информации, и было бы чище задать это как новый вопрос.

Я использую 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 и отключение перестали происходить. Но я не уверен, что это много значит, если телеграф сразу отклоняет все сообщения.

Рейтинг:0
флаг al

Я определил, что syslog-ng является отправка фреймовых сообщений с подсчетом октетов в телеграф.

Причина этой проблемы в том, что телеграф отключает TCP-соединение от syslog-ng через 5 секунд, не получая сообщения. Это противоречит документации, поставляемой с подключаемым модулем syslog для телеграфа, в которой указано, что этот тайм-аут применяется только ко времени получения одного сообщения, а не ко времени между сообщениями. Хотя это может быть проблема с английским языком/переводом. Параметр read_timeout к 0 в конфиге телеграфа достаточно, чтобы телеграф не отключился.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.