同步延迟只在总览面板看平均 2 秒。某个分片卡了 4 小时 13 分钟,平均值被其他 15 个分片拉平,告警一直没响。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

max by (shard) (sync_delay_seconds{job="cdc-sync"}) > 60

监控采集的是所有分片的平均值,单个分片异常被稀释。阈值按平均延迟设成 30 秒,长尾问题永远不会越线。指标也没按分片打标签,真出问题定位不到是哪一路。这一点先确认清楚,后面就不用反复试。

「同步延迟阈值」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

具体做法是,延迟指标按分片打 label 每个分片单独设阈值;告警规则改成 max 而不是 avg 连续三个周期越线才报;补一块绝对延迟看板 固定展示最慢的三个分片;告警里带上分片名和最后同步位点。

改完照着核一遍,人为挂起一个分片五分钟 告警按分片名准确触发 平均值不受影响。

作者 9823189