Prometheus 针对虚拟机的 NodeClockNotSynchronising 发出警报

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_ERRORntpd运行且时钟同步时会返回?如能得到任何帮助我将不胜感激。

答案1

无论您运行的是哪个 ntpd,内核时间规则都会报告错误。

man ntp_adjtime参阅API和相关常量。

在 Linux 上,这可以来自 NTP 或 PPS。我们假设 NTP,并进一步假设错误状态为STA_UNSYNC,不同步。这是在启动时设置的。如果系统调用使用ADJ_OFFSET模式换句话说,如果 ntpd 尝试逐渐更改时钟。这种情况不发生是没有意义的,所有时钟至少都会有一点偏差。

检查您的/etc/ntp.conf。确保它包含 4 个或更多来源(通过serverpool指令)。删除任何缺乏纪律的当地时钟,以 开头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

有时允许,警报就会被清除。

相关内容