为什么时间必须先对齐
分布式推理链路上有网关、引擎、宿主内核、监控采集和日志系统多个时间源。排障时靠的是把各处的日志按时间轴拼起来,一旦某台机器偏移到秒级,因果顺序就会颠倒——看起来是引擎先报错,实际是网关先超时。chrony 是当前主流发行版默认的 NTP 实现,比老的 ntpd 收敛更快,也适合虚拟化与频繁休眠的环境。
基本信息
| 适用平台 | RHEL/CentOS 8+、Ubuntu、Debian 等 Linux 发行版 |
|---|---|
| 服务名 | chronyd(RHEL 系与 Debian 系均为 chrony) |
| 配置文件 | /etc/chrony.conf 或 /etc/chrony/chrony.conf |
| 常用命令 | chronyc tracking、chronyc sources -v、timedatectl status |
| 权限要求 | 查看状态普通用户可读,改配置需 root |
典型使用场景
- 事故复盘前的前置检查:确认各节点时间一致,日志时间轴才可用来定因果
- 发现日志乱序:同一请求在网关与引擎的记录顺序矛盾,先怀疑时钟偏移
- 新节点上线纳入统一时间源:避免使用与本机房不同的默认 NTP 池
- 虚拟化平台时钟不稳:确认已启用平台提供的时间同步能力
- 证书与令牌报错排查:系统时间偏差会导致证书校验失败与令牌提前失效
检查时间状态
检查时间状态
timedatectl status # 系统时钟、时区与 NTP 是否启用
chronyc tracking # 偏移量、层级与同步状态
chronyc sources -v # 各时间源的可达性与偏差
chronyc waitsync 30 0.01 # 等待偏差收敛到 10 毫秒以内
chronyc makestep # 立即校准(仅在确认可承受时间跳变时使用)
date -u # 与下游日志比对时统一看 UTCtracking 字段读法
| 字段 | 含义 | 正常与异常 |
|---|---|---|
| Reference ID | 当前选中的时间源 | 显示为具体上游地址或本机标识 |
| Stratum | 时间源层级 | 数字越大离权威时钟越远,2 到 4 属常见范围 |
| System time | 与参考源的当前偏差 | 持续在毫秒级内属正常,秒级以上需排查 |
| Last offset | 最近一次校正的偏差 | 突然变大说明链路或上游出现抖动 |
| Frequency | 本机时钟频偏 | 数值稳定说明晶振正常,剧烈漂移多为虚拟化环境 |
| Leap status | 闰秒状态 | 正常应为 Normal |
容器共享宿主内核时钟:时间同步在宿主做,不要在每个容器里单独跑 NTP 客户端,否则两套时间源互相拉扯,日志越修越乱。
时间大幅回跳属于高风险变更:会影响证书校验、令牌有效期与依赖时间的业务逻辑,改时间要按变更流程走并记录影响窗口。