时间同步排查
时间漂移不只是显示问题:证书校验依赖时间戳,分布式系统靠时间戳排序,日志跨机器对齐也靠它。排查分两步,先用 timedatectl 看系统时钟是否处于同步状态,再用 chronyc 看时间源的可达性与偏差量。需要立刻校正时用 makestep 强制步进,但要先评估对业务的影响。
基本信息
| 典型表现 | 证书报时间无效、日志顺序错乱、集群节点互相拒绝 |
|---|---|
| 排查组合 | timedatectl status + chronyc tracking + chronyc sources -v |
| 应急校正 | chronyc makestep 立即步进,chronyc waitsync 等待收敛 |
| 适用范围 | systemd 发行版上的 chrony 或 ntpd 时间服务 |
典型使用场景
- HTTPS 请求报证书尚未生效或已过期,实为系统时间跑偏
- 日志里同一请求的时间戳比上游还早,怀疑节点间时间不一致
- 虚拟化环境长时间挂起后恢复,时钟出现明显跳变
- 内网禁止外网 UDP 后 NTP 同步失败,需要换用内网时间源
- 调整时区后服务仍按旧时区写日志
状态检查
状态检查
timedatectl status # 关注 System clock synchronized 与 NTP service
timedatectl show-timesync --all # 更细的同步状态字段
chronyc tracking # 本机与时间源的偏差、频率误差
chronyc sources -v # 时间源列表,看每行前缀符号判断可达性
chronyc sourcestats # 每个源的统计与偏移
systemctl status chronyd # 服务本身是否在跑应急校正
应急校正
sudo chronyc makestep # 立即步进校时,日志会记录时间跳变
chronyc waitsync 30 0.01 # 等待偏差收敛到 10 毫秒内(最多 30 秒)
sudo systemctl restart chronyd # 改完配置后重载服务
date; timedatectl # 复核本机时间与时区检查项读法
| 检查项 | 正常值 | 异常含义 |
|---|---|---|
| System clock synchronized | yes | no 表示尚未同步,先查时间源可达性 |
| NTP service | active | inactive 说明时间服务没在运行 |
| chronyc sources 前缀 ^* | 带星号即当前选中源 | ^? 表示该源不可达或未同步 |
| tracking 的 System time | 偏差越小越好 | 持续在秒级说明同步没生效 |
| Timezone | 与业务预期一致 | 时区错会让日志时间看似漂移 |
容器共享宿主机的时钟,容器里既改不了也不必改;容器内发现时间不对,应回到宿主机检查 chronyd 与时间源配置。