主从偏移量差值超1mb即告警是redis数据一致性的硬性红线,因该差值(单位字节)精准反映未追上的数据量,而lag字段为秒级估算、易受网络和执行耗时干扰不可靠。

主从偏移量差异超过 1MB 就该告警,这是 Redis 数据一致性的硬性红线,redis_replication_offset_master_bytes - redis_replication_offset_slave_bytes > 1000000 这个表达式不是经验推荐,而是生产环境踩坑后收敛出的最小安全阈值。
为什么必须用 offset 差值,而不是 info replication 的 lag 字段
info replication 返回的 master_repl_offset 和 slave_repl_offset 是整数,代表已处理的复制字节数;而 lag 是 Redis 自己算的秒级延迟估算,受网络抖动、命令执行耗时影响极大,不可靠。Prometheus 抓取的是前者暴露的指标,所以必须用差值做计算——它反映的是「还没追上的数据量」,单位是字节,可量化、可比对、可设阈值。
- 只看
lag容易漏告:比如主库空闲时lag=0,但某次大 key 写入后 slave 卡住,lag暂时没更新,差值却已飙升 - 差值能提前暴露瓶颈:当差值持续 >500KB,说明 slave 解析/写入速度跟不上,即使还没到 1MB,也该介入排查磁盘 IO 或 CPU
- Redis Exporter 默认暴露
redis_replication_offset_master_bytes和redis_replication_offset_slave_bytes,无需额外配置
告警规则里 for: 3m 的真实含义和调整建议
for: 3m 不是“等满 3 分钟才发”,而是「连续 3 分钟内每一帧采样都满足条件」。Prometheus 默认抓取间隔是 15s,意味着要连续 12 次采样都 >1MB 才真正触发。这个设计防误报,但代价是延迟。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 若集群写入压力高、对一致性敏感(如金融类缓存),建议缩到
for: 90s,即连续 6 次采样达标就告警 - 若 slave 偶尔抖动(如后台 RDB 生成),可加一层过滤:
abs(redis_replication_offset_master_bytes - redis_replication_offset_slave_bytes) > 1000000,避免负值干扰 - 切勿设
for: 1m以下:太短会因 exporter 抓取延迟或瞬时 GC 导致毛刺告警
多实例场景下如何避免重复告警和漏监控
Redis 集群每个 master 节点配多个 slave,redis_exporter 默认只暴露当前连接节点的角色和 offset。如果只部署一个 exporter 指向某个 slave,你就永远看不到其他 slave 的偏移量。
- 必须为每个 slave 实例单独运行一个
redis_exporter,用不同--web.listen-address端口(如:59121,:59122) - Prometheus 配置里不能写死
targets: ['localhost:9121'],得用服务发现或静态列出所有 exporter 地址 - 告警规则里加
by (instance, job)分组,否则一个 master 下三个 slave 同时超标,会合并成一条告警,无法定位具体哪个 slave 掉队 - 别依赖
redis_instance_role标签判断主从:它只在 exporter 连接 slave 时为slave,连 master 时是master,但 offset 指标只在 slave 上有意义
真正难的不是写这条告警语句,而是确保每个 slave 都有独立 exporter、每个 exporter 都稳定上报、Prometheus 抓取不丢帧——偏移量监控一旦断档,你就不知道数据是不是已经悄悄不一致了。










