在CentOS系统中,chrony是默认的NTP时间同步服务,而chronyc是它的命令行客户端工具。要跟踪时钟同步状态,最直接的方法就是运行chronyc sources查看当前的时间源连接情况,再用chronyc sourcestats查看每个源的详细统计数据,最后通过chronyc tracking获取本地时钟与远程服务器之间的同步偏移、频率误差等核心指标。这三条命令基本覆盖了日常运维中90%以上的时钟同步监控需求。

很多运维人员习惯用ntpq命令来检查NTP状态,但CentOS 7及以上版本已经用chrony替代了传统的ntpd。如果你还在用ntpq,那就是在用过时的工具。chronyc的设计更现代、响应更快,尤其在虚拟机和云服务器这种时钟漂移频繁的环境下,chrony的同步速度和精度都明显优于ntpd。下面我会把chronyc的核心用法、配置优化、故障排查全部讲透。

一、chronyc sources:快速查看时间源连接状态

chronyc sources是最常用的第一步命令。它会列出所有配置的NTP服务器或对等体,并显示每个源的状态符号。执行命令:

chronyc sources

输出类似这样:

210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp1.aliyun.com              1   6   377    42   +12ms[  +18ms] +/-  45ms
^- time.windows.com             2   6   377    43   -28ms[  -35ms] +/-  62ms
^+ ntp2.aliyun.com              1   6   377    41   +15ms[  +21ms] +/-  50ms
^- ntp3.aliyun.com              1   6   377    43   +10ms[  +16ms] +/-  48ms

重点看最前面的状态符号:^*表示当前正在同步的主源,^-表示备用源,^+表示可选源,?表示未连接或不可达。Reach列是一个八进制数,377表示最近8次查询全部成功,如果变成0就说明这个源完全断了。Last sample列的方括号里是上一次采样的偏移,方括号外是当前估计的偏移。

二、chronyc sourcestats:深入分析每个时间源的质量

如果你需要更详细的统计信息,比如每个源的采样次数、频率误差、估算误差等,就用chronyc sourcestats:

chronyc sourcestats

这个命令会针对每个源输出一大段数据,包括:

Name/IP address:源的地址;NP:采样点数;NR:剩余有效采样数;Span:采样跨度(秒);Frequency:频率误差,单位ppm;Freq Skew:频率误差的不确定度;Offset:当前偏移估计;Std Dev:偏移的标准偏差。

实际运维中,我建议重点关注Frequency和Std Dev这两个值。Frequency如果超过100ppm,说明本地时钟硬件可能有问题或者系统负载极高。Std Dev如果持续大于100ms,说明这个源的网络质量不好,应该考虑更换。

三、chronyc tracking:查看本地时钟同步的核心指标

这是最关键的一条命令,它展示的是chrony守护进程对本地时钟的跟踪结果:

chronyc tracking

典型输出:

Reference ID    : CB6B04D1 (ntp1.aliyun.com)
Stratum         : 2
Ref time (UTC)  : Thu Jan 16 08:23:45 2025
System time     : 0.000001234 seconds fast of NTP time
Last offset     : +0.000000045 seconds
RMS offset      : 0.000000078 seconds
Frequency       : 3.214 ppm slow
Residual freq   : -0.002 ppm
Skew            : 0.012 ppm
Root delay      : 0.023456 seconds
Root dispersion : 0.001234 seconds
Update interval : 64.5 seconds
Leap status     : Normal

逐行解读:Reference ID是当前同步的源标识;Stratum是层级,1是最精确的,数字越大精度越低;System time是本地时钟相对于NTP时间的偏差,这个值越接近0越好;Last offset是上一次采样的偏移量;RMS offset是偏移的均方根值,长期稳定在1ms以内就算正常;Frequency是本地时钟的频率误差,正数表示快了,负数表示慢了;Root delay是到主源的网络往返延迟估计;Root dispersion是累积的同步误差上限。

四、chronyc的其他实用命令汇总

除了上面三个核心命令,chronyc还有一些运维中经常用到的子命令:

chronyc activity:显示当前有多少个源在线或离线,格式简洁,适合快速扫一眼。

chronyc activity

chronyc makestep:如果发现本地时钟偏差太大(比如超过1秒),可以手动强制步进校正。但这个命令通常不需要手动执行,chronyd在启动时如果检测到大偏移会自动触发。

chronyc makestep

chronyc cmdallow all:允许所有命令通过,默认情况下chronyc只允许监控类命令,修改配置需要cmdallow权限。

chronyc clients:列出所有通过NTP协议连接到本机的客户端(如果你的服务器同时做NTP服务器的话)。

五、chrony配置文件的关键参数优化

chrony的主配置文件在/etc/chrony.conf。要让时钟同步更稳定,有几个参数值得调整:

首先是server指令,建议至少配置4个不同的NTP源,分散风险:

server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server time.windows.com iburst
server ntp.tencent.com iburst

iburst参数表示初次同步时快速发送一组请求,加速首次同步。如果你的服务器在国内,阿里云、腾讯云的NTP源延迟通常在10ms以内,非常适合。

makestep参数控制初始大偏移时是否步进校正:

makestep 1.0 3

意思是如果前3次更新中偏移超过1秒,就执行步进校正。生产环境建议设为makestep 0.1 1,更保守。

driftfile指定频率漂移文件路径,chrony会记录本地时钟的硬件漂移特性:

driftfile /var/lib/chrony/drift

logdir指定日志目录,方便排查问题:

logdir /var/log/chrony
六、时钟同步异常的常见排查思路

实际运维中,时钟同步出问题通常就那么几种情况。第一种是所有源都显示?状态,Reach为0。这种情况先检查网络连通性,用ping和traceroute确认NTP服务器是否可达,再检查防火墙是否放行了UDP 123端口:

firewall-cmd --list-ports
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload

第二种是某个源Reach值很低,比如只有1或者3。这说明网络不稳定或者那个源本身有问题,建议换一个源测试。第三种是System time持续偏大,超过几百毫秒。先用chronyc sources检查是不是选了一个远的或质量差的源做主源,如果是,可以用chronyc select手动切换。

chronyc select 2

第四种情况是虚拟机环境下时钟漂移特别严重。这是因为虚拟机的时钟依赖宿主机,而宿主机本身可能也在漂移。解决办法是在虚拟机里配置chrony的大步长校正,同时确保宿主机的时间同步也正常。

七、设置chrony开机自启和定时监控

确保chronyd服务开机自启:

systemctl enable chronyd
systemctl start chronyd
systemctl status chronyd

如果你想做自动化监控,可以写一个简单的shell脚本定时检查同步状态:

#!/bin/bash
OFFSET=$(chronyc tracking | grep "System time" | awk '{print $5}')
if (( $(echo "$OFFSET > 0.1" | bc -l) )); then
    echo "$(date): Clock offset too large: $OFFSET" >> /var/log/chrony_alert.log
fi

把这个脚本放进crontab每分钟执行一次,一旦偏移超过阈值就记录告警。这比单纯依赖人工检查靠谱得多。

八、chrony与ntpd的核心区别和选型建议

从运维角度说,chrony相比ntpd有几个明显优势:同步速度更快,尤其在系统启动时;对间歇性网络连接的适应性更好,适合笔记本和云服务器;配置更简洁,不需要复杂的restrict规则;内存占用更低。CentOS 7之后默认用chrony不是没有道理的。如果你还在维护老的CentOS 6系统,那确实还在用ntpd和ntpq,但新部署的系统请直接用chrony。

唯一需要注意的是,chrony的命令体系和ntp完全不同,不能混用。chronyc sources对应ntpq的peers,chronyc tracking对应ntpq的rv,chronyc sourcestats对应ntpq的readvar。如果你从ntpd迁移过来,需要重新学习这套命令。

九、总结:日常运维中的最佳实践

跟踪CentOS时钟同步状态,核心就是三板斧:chronyc sources看连接,chronyc sourcestats看质量,chronyc tracking看本地偏差。配置上至少4个源、开启iburst、合理设置makestep、确保UDP 123端口开放。监控上用脚本定时检查偏移量,超过阈值就告警。虚拟机环境要特别注意宿主机的时间同步。把这些做到位,时钟同步问题基本不会成为你的运维痛点。