redis哨兵与主从节点需分别配置多个redis_exporter实例监控:主节点、从节点各用一个带地址和密码的实例,哨兵节点则需单独启用-redis.is-sentinel标志的实例;prometheus中须按角色拆分为不同job并打标,关键指标包括sentinel_master_status、sentinel_slave_count等。

Redis 哨兵(Sentinel)和主从拓扑不能靠单个 redis_exporter 实例自动发现全部节点状态;必须显式配置多个抓取目标,并区分角色——否则你会漏掉哨兵自身健康、主从切换事件、从节点延迟等关键指标。
redis_exporter 怎么同时监控 Sentinel 和 Redis 主从节点
一个 redis_exporter 进程默认只连一个 Redis 实例(-redis.addr),它不会主动连接哨兵或遍历主从关系。要覆盖完整拓扑,得启动多个 exporter 实例,或用 -redis.file 指向含多地址的文件,并配合 -redis.is-sentinel 标志识别哨兵节点。
- 监控 Redis 主节点:启动一个
redis_exporter,加-redis.addr redis://172.16.1.100:6379和-redis.password mypass - 监控 Redis 从节点:另启一个实例,地址换为
redis://172.16.1.101:6380,同样传密码 - 监控 Sentinel 节点:再启一个实例,加
-redis.addr redis://172.16.1.100:26379 -redis.is-sentinel——这个标志必须显式指定,否则 exporter 会尝试用 Redis 协议连哨兵,报ERR unknown command `INFO` - 如果哨兵有多个(比如 3 个),每个都要单独配一个 exporter 抓取目标,Prometheus 才能聚合
sentinel_known_sentinels、sentinel_available_sentinels等指标
prometheus.yml 中如何写 scrape_configs 区分角色
别把所有 Redis/Sentinel 地址塞进同一个 job;角色混在一起会导致 redis_up 标签混乱、告警难定位。应该按角色拆成不同 job,并用 static_configs 或 file_sd_configs 管理目标列表。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 主节点 job:
job_name: 'redis-master',targets 列表只含主库地址,加labels: { role: "master" } - 从节点 job:
job_name: 'redis-slave',targets 只含从库地址,labels: { role: "slave" } - Sentinel job:
job_name: 'redis-sentinel',targets 是所有哨兵地址(如172.16.1.100:26379),且必须加params: { format: ["prometheus"] }(部分老版本 exporter 需要) - 所有 job 都应配置
relabel_configs,例如用replace把__address__提取为instance,避免因 IP 变化导致历史数据断裂
哪些指标能反映哨兵是否正常工作
光看 redis_up == 1 不够——那只是 exporter 自身连上了哨兵,不代表哨兵在有效监控主从。真正有用的指标来自 redis_exporter 对 INFO SENTINEL 的解析结果:
-
sentinel_master_address:当前被监控的主节点 IP 和端口,值为空说明哨兵没识别出主节点 -
sentinel_master_status:1 表示主节点在线且被监控,0 表示下线或未配置 -
sentinel_slave_count:当前哨兵感知到的从节点数量,突然归零可能是网络隔离 -
sentinel_epoch:哨兵纪元号,多个哨兵之间该值应基本一致;若某哨兵长期落后,说明它失联或配置错误 - 注意:
redis_exporter默认不暴露SENTINEL MASTERS的详细字段(如num-slaves、flags),如需这些,得启用-redis.export-client-list并确认 Redis 版本 ≥ 6.2
容易忽略的权限与连接问题
哨兵模式下,exporter 连接 Redis 主从节点时,常因权限或命令禁用失败,而错误日志里只显示 connection refused 或空响应。
- 确保 Redis 配置中未禁用
INFO命令(rename-command INFO ""会导致 exporter 报错) - Sentinel 节点默认不接受密码认证(即使你配了
requirepass),所以-redis.password对哨兵 job 通常要留空,否则连不上 - 主从节点若开启
protected-mode yes且 bind 未包含 exporter 所在机器 IP,连接会直接被拒绝——检查redis.conf中的bind和port配置 - 集群模式下,
redis_exporter无法直接监控 Cluster,必须用--redis.cluster启动参数,且要求 Redis ≥ 3.0;但哨兵模式下不要加这个参数,否则会误判为集群并报错
最麻烦的其实是哨兵故障转移期间的指标断层:主从角色切换时,旧 master 的 exporter 可能还在上报 role="master",而新 master 的 exporter 尚未重载标签。这时得依赖 sentinel_master_address + sentinel_master_status 组合判断真实主节点,而不是单纯信 redis_role。










