Убедитесь, что внутренний NTP-сервер отправляет правильное время?
У меня работает два сервера NTP stratum 3, и я хотел создать простую проверку, чтобы я мог определить, сместилось ли время на одном из серверов, и предупредить, что оно не синхронизировано должным образом с публичными серверами stratum 2.
Моей первой мыслью было извлечь время с нескольких серверов stratum 2 и сравнить это время с тем, что отправляют мои ntp-серверы. Затем предупредите, если дрейф превышает X дельта.
Существует ли более стандартный или лучший способ проверки того, что NTP-сервер отправляет правильное время?
2 ответа
TL;DR:
- Настройте свой NTP -сервер в соответствии с лучшими современными практиками.
- (Предупреждение о бесстыдном саморекламе.) Используйте мою проверку ntpmon, если ваше решение для мониторинга использует collectd, Nagios или telegraf.
Длинная версия:
конфигурация
Самая важная основа для хорошего мониторинга NTP - хорошая конфигурация NTP. Чтобы лучше понять это, прочтите последний проект RFC Best Current Practices (BCP). Вот сжатое резюме его рекомендаций по конфигурации:
- Поддерживайте актуальность программного обеспечения NTP
- Используйте от 4 до 10 источников
- Убедитесь, что у вас есть различные эталонные часы, представленные в этих источниках
- Не разрешать удаленное управление без аутентификации (должно быть по умолчанию на большинстве дистрибутивов)
- Используйте пул ответственно (также должен использоваться по умолчанию в большинстве дистрибутивов)
- Не смешивайте источники со скачками и без скачков
- Не используйте режим трансляции без аутентификации
- Не используйте anycast или балансировку нагрузки, когда вы отбываете время
Где измерить
Когда у вас есть хорошая локальная конфигурация, главное помнить, что ваша проверка должна запрашивать у локального NTP -сервера его метрики, а не пытаться вручную измерить смещение от удаленных серверов. Основные NTP -серверы (ntpd и chronyd) уже собирают все необходимые метрики, поэтому проверки, сравнивающие часы с удаленными серверами, игнорируют многие встроенные свойства NTP.
Метрический выбор
Итак, к вашему вопросу, метрики, которые вас больше всего интересуют:
- системное смещение: рассчитанное наилучшее предположение о смещении локальных часов от одного истинного времени
- корневая дисперсия: рассчитанное максимальное смещение локальных часов от источников слоя 0
мониторинг
Существует несколько решений для мониторинга NTP - в зависимости от того, какой мониторинг у вас уже есть, некоторые могут подойти вам лучше, чем другие. Я написал обзор этого в своем блоге, вот резюме:
- Nagios:
- check_ntp_peer: достойная базовая проверка; не проверяет достаточно широкий спектр метрик; слишком либерально в том, что позволяет
- check_ntp_time: не рекомендуется; проверяет только смещение от заданного удаленного NTP -сервера
- check_ntpd: разумное покрытие проверки; используйте его, если вы предпочитаете Perl Python.
- ntpmon 's проверка nagios
- collectd:
- Плагин NTP: некоторые метрики, которые он собирает, неясны
- ntpmon в режиме сбора
- Prometheus / influxdb
- экспортер узла прометея: не рекомендуется; проверяет только смещение от заданного удаленного NTP -сервера
- плагин ввода telegraf ntpq: прямой перевод вывода ntpq в метрики telegraf; это, вероятно, слишком подробно, если вы просто хотите знать, "мой NTP -сервер в порядке?"
- ntpmon в режиме телеграфа
Предостережения
- Выше приведена сводная информация о состоянии по состоянию на октябрь 2016 года, когда я проводил анализ предупреждений и телеметрии. Вещи, возможно, улучшились с тех пор.
- ntpmon - мой проект, который, я думаю, преодолевает недостатки проверок, которые были доступны в то время. Он поддерживает как ntpd и chronyd, так и вышеперечисленные системы оповещения и телеметрии.
Конечно, стандартный подход заключается в использовании связанного клиента NTP с именем ntpq. Эта утилита может использоваться для отображения подключенных серверов, их достижимости, разницы во времени и дрожания. Вот пример:
# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*metasntp12.admi .MRS. 1 u 274 1024 377 64.445 1.086 0.450
+cecar.ddg.lth.s 130.149.17.8 2 u 811 1024 377 48.143 -0.810 0.175
dir.mcc.ac.uk 85.199.214.100 2 u 7d 1024 0 76.708 -1.654 0.000
Здесь вы можете видеть, что настроены три сервера, два в порядке (достижимость 377 расширяется до двоичного 11 111 1111, где 1 означает успешный ответ, а 0 означает отсутствие ответа - так что 377 означает достижимость 100%), а последний, вероятно, мертв для некоторая причина. Смещение означает смещение времени в миллисекундах, а джиттер - это изменчивость.