У меня работают два сервера уровня 3 NTP, и я хотел создать простую проверку, чтобы я мог определить, смещается ли время на каком-либо из серверов, и предупредить, что он не синхронизируется должным образом с общедоступными серверами уровня 2.
Моя первая мысль заключалась в том, чтобы получить время с нескольких серверов уровня 2 и сравнить это время с тем, что отправляют мои серверы ntp. Затем предупредите, если дрейф превышает дельту X.
Есть ли более стандартный способ или лучший метод проверки того, что сервер NTP отправляет правильное время?
TL; DR:
Длинная версия:
Конфигурация
Самая важная основа для хорошего мониторинга NTP - это хорошая конфигурация NTP. Для лучшего понимания прочтите Лучшие текущие практики NTP (BCP 223 / RFC 8633). Вот краткое изложение рекомендаций по настройке:
Где измерить
Когда у вас есть хорошая локальная конфигурация, главное помнить, что ваша проверка должна запросить локальный NTP-сервер для его показателей, а не пытаться вручную измерить смещение от удаленных серверов. Основные серверы NTP (ntpd и chronyd) уже собирают все необходимые вам метрики, поэтому проверки, которые сравнивают часы с удаленными серверами, игнорируют многие встроенные возможности NTP.
Выбор метрики
Итак, отвечая на ваш вопрос, вам должны быть интересны следующие показатели:
Мониторинг
Существует несколько решений для мониторинга NTP - в зависимости от того, какой мониторинг у вас уже есть, некоторые из них могут подойти вам лучше, чем другие. Я написал их обзор на мой блог, вот резюме:
Предостережения
Конечно, стандартный подход заключается в использовании связанного клиента 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 расширяется до двоичного числа 11111 1111, где 1 означает успешный ответ, а 0 означает отсутствие ответа - поэтому 377 означает 100% достижимость), а последний, вероятно, мертв для некоторая причина. Смещение означает смещение по времени в миллисекундах, а джиттер - это изменчивость.