Я пытаюсь определить, почему это предупреждение ( NodeClockNotSynchronising
) срабатывает для нескольких виртуальных машин, которые я подготовил. (Не все, всего несколько, что странно)
Согласно экспортируемым метрикам, я вижу:
# HELP node_timex_sync_status Is clock synchronized to a reliable server (1 = yes, 0 = no).
# TYPE node_timex_sync_status gauge
node_timex_sync_status 0
Я могу использовать ssh в одну из виртуальных машин, и ntpd
работает, а Команда date
возвращает правильное время.
Итак, покопавшись в документации коллектора timex
и коде , вот что "не работает":
var syncStatus float64
var divisor float64
var timex = new(unix.Timex)
status, err := unix.Adjtimex(timex)
if err != nil {
return fmt.Errorf("failed to retrieve adjtimex stats: %w", err)
}
if status == timeError {
syncStatus = 0
} else {
syncStatus = 1
}
Поскольку syncStatus равен 0, генерируется предупреждение. Покопаемся в кодах возврата системного вызова adjtimex () :
#define TIME_ERROR 5 /* clock not synchronized */
Почему ядро должно возвращать TIME_ERROR
, когда ntpd
работает и часы синхронизированы? Любая помощь будет очень признательна.
Какой бы ntpd вы ни запускали, дисциплина времени ядра сообщает об ошибке.
См. man ntp_adjtime
для API и связанных с ним констант.
В Linux это может быть либо NTP, либо PPS. Предположим, что NTP, а также статус ошибки STA_UNSYNC
, не синхронизирован. Это устанавливается при загрузке. И очищается, если системный вызов выполняется с режимом ADJ_OFFSET
, другими словами, если ntpd пытается постепенно изменить часы. Этого не происходит не имеет смысла, все часы будут хотя бы немного сбиты.
Просмотрите свой /etc/ntp.conf
. Убедитесь, что он содержит 4 или более источников с помощью директив server
или pool
. Удалите все недисциплинированные локальные часы, которые начинаются с сервера 127.127.1
. LOCL устарел, часы большинства серверов не впечатляют, и, возможно, смещение 0 препятствует очистке рассинхронизации.
Перезапустите ntpd
и подождите две минуты. Наблюдайте за смещениями по сравнению с NTP-серверами с ntpq -p
или хроническими источниками -v
, они должны быть однозначными или двузначными мс, но не равными нулю.
Проверьте дату.Попробуйте, не путая часовые пояса: date --utc