我正在尝试确定为什么此警报 ( 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
任何帮助将不胜感激。