Оповещение Prometheus о NodeClockNotSynchronising для виртуальных машин

Я пытаюсь определить, почему это предупреждение ( 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 работает и часы синхронизированы? Любая помощь будет очень признательна.

1
задан 29 November 2020 в 14:59
1 ответ

Какой бы 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

1
ответ дан 22 November 2020 в 18:43

Теги

Похожие вопросы