是什么
时钟偏差指各主机的系统时间不一致。在时序采集链路里,数据点的时间戳通常由采集端主机生成(Telegraf、各类 exporter、自研 agent 写库),主机时钟偏几秒,曲线就整体平移几秒:跨主机对比错位、按时间窗口聚合的数据落进错误的桶、告警窗口判断失准。因此所有参与采集、转发、写入的主机都必须与统一时间源同步。
基本信息
| 同步方式 | Linux 主机启用 chrony 或 ntpd,指向内网时间源,与上游层级对齐 |
|---|---|
| 容器环境 | 容器与宿主机共用内核时钟,无需也不应在容器内跑独立时间同步 |
| 查看偏移 | chronyc tracking、chronyc sources -v、timedatectl |
| 允许阈值 | 由业务决定:秒级监控对偏差敏感,天级报表相对宽松 |
| 数据侧影响 | 曲线错位、窗口聚合错桶、跨主机关联失效 |
典型使用场景
- 多主机指标对齐:同一时刻的 CPU、延迟曲线要能叠在一起比较,时间轴必须一致
- 日志与指标关联:跨主机检索同一故障时,时间戳偏差会让因果顺序完全错乱
- 窗口聚合与告警:五分钟窗口统计依赖各来源时间戳落在同一区间内
- 安全与认证:证书有效期校验、TOTP 动态口令、Kerberos 都要求客户端与服务端时间接近,偏差过大会直接登录失败
- 数据回填与补数:回补历史时若写入端时间错乱,会造成时间线上的数据重叠或被去重覆盖
检查与验证
检查与验证
# 查看同步状态与当前偏移(System time 即此刻偏差)
chronyc tracking | grep -E "Reference|System time|Last offset|Leap"
# 列出时间源:行首 * 为当前选中,+ 为备选,? 为不可达
chronyc sources -v
# 快速确认系统时钟是否已与时间源同步
timedatectl | grep -E "Time zone|synchronized|NTP"
# 写一条自带时间戳的数据,再用响应头 Date 评估偏差
curl -si -XPOST "http://127.0.0.1:8086/api/v2/write?org=my-org&bucket=metrics&precision=s" \
-H "Authorization: Token $INFLUX_TOKEN" \
--data-binary "clock_check value=1 $(date +%s)" | grep -i "^date:"检查项逐条读法
| 检查项 | 看什么 | 异常表现 |
|---|---|---|
| chronyc tracking | System time 当前偏差 | 出现数百毫秒以上偏移说明同步不健康 |
| chronyc sources -v | 源状态标记 | 全部为 ? 说明时间源不可达,主机在自行走时 |
| timedatectl | System clock synchronized | 显示 no 表示未与任何时间源同步 |
| 数据侧比对 | 客户端时间戳与写入响应时间之差 | 差值稳定不等于零,或在正负之间跳变 |
chrony 默认用平滑方式校正偏差,避免时间跳变影响依赖单调时钟的进程;只有在启动早期或长时间失同步后才需要 makestep 立即步进,配置前要评估对定时任务和已写入数据的影响。
允许偏差没有统一标准:采集端仍应保持同步,但在告警规则里可以把阈值设得比同步精度宽一档,避免秒级抖动造成误报;跨时区业务还要确认切分报表用的时区与时间戳本身无关。