我正在尝试确定为什么此警报 ( 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
无论您运行的是哪个 ntpd,内核时间规则都会报告错误。
请man ntp_adjtime
参阅API和相关常量。
在 Linux 上,这可以来自 NTP 或 PPS。我们假设 NTP,并进一步假设错误状态为STA_UNSYNC
,不同步。这是在启动时设置的。如果系统调用使用ADJ_OFFSET
模式换句话说,如果 ntpd 尝试逐渐更改时钟。这种情况不发生是没有意义的,所有时钟至少都会有一点偏差。
检查您的/etc/ntp.conf
。确保它包含 4 个或更多来源(通过server
或pool
指令)。删除任何缺乏纪律的当地时钟,以 开头server 127.127.1
。LOCL 已过时,大多数服务器时钟并不惊人,并且可能 0 偏移阻止了清除不同步。
重启ntpd
并等待两分钟。观察与 NTP 服务器相比的偏移量ntpq -p
,或chronyc sources -v
应该是一位数或两位数的毫秒,但不为零。
再次检查日期。尝试一下不要混淆时区:date --utc
答案2
对于 ntpd:运行不带选项 -x 的 ntpddeamon
编辑 ntpd 配置文件并删除 -x 选项
vi /etc/sysconfig/ntpd 重新启动 ntpd.service
systemctl 重新启动 ntpd.service
对于 chronyd:如果不存在,请在 /etc/chrony.conf 中添加选项 rtcsync(它包含在默认配置中)。
systemctl 重启 chronyd.service
有时允许,警报就会被清除。