Linux

虛擬機的 NodeClockNotSynchronising 上的 Prometheus 警報

  • November 29, 2020

我正在嘗試確定為什麼此警報 ( NodeClockNotSynchronising) 會針對我已配置的少數 VM 觸發。(不是全部,只是幾個,這很奇怪)

根據導出的指標,我看到:

# 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_adjtimeAPI 和相關常量,請參閱。

在 Linux 上,這可能來自 NTP 或 PPS。讓我們假設 NTP,並進一步假設錯誤狀態是STA_UNSYNC,未同步。這是在啟動時設置的。如果使用ADJ_OFFSETmode完成系統呼叫,則清除,換句話說,如果 ntpd 正在嘗試逐漸更改時鐘。這沒有發生是沒有意義的,所有的時鐘都會至少有一點點關閉。

查看您的/etc/ntp.conf. server通過orpool指令確保它包含 4 個或更多源。刪除任何以 .開頭的無紀律的本地時鐘server 127.127.1。LOCL 已過時,大多數伺服器時鐘並不令人驚訝,並且可能是 0 偏移量阻止了不同步被清除。

重新啟動ntpd並等待兩分鐘。觀察與 NTP 伺服器相比的偏移量ntpq -p,或chronyc sources -v,應該是一位數或兩位數毫秒,但不為零。

仔細檢查日期。在不混淆時區的情況下嘗試:date --utc

引用自:https://serverfault.com/questions/1043358