哨兵本身不发告警通知,只做故障判定和自动切换;需手动配置sentinel notification-script并确保其可执行、参数正确、通知链路通畅,且哨兵已达成odown判定。

哨兵本身不发告警通知,它只做故障判定和自动切换;所谓“未发送告警”,本质是没配通知逻辑,不是功能缺失。
哨兵日志里有 +odown 但收不到邮件/钉钉/企业微信
哨兵默认不集成任何通知渠道,+odown、+failover-end 这类事件只写进日志,不会主动外发。要收到通知,必须手动配置 sentinel notification-script。
- 脚本路径必须是绝对路径,且哨兵进程有执行权限(常见坑:
/etc/redis/notify.sh写了但没chmod +x) - 脚本接收三个参数:
$1(event 类型,如+sdown)、$2(master name)、$3(IP:port),别漏解析 - 脚本内不能阻塞太久(建议超时控制在 5 秒内),否则会拖慢哨兵主循环
- 测试时用
redis-cli -p 26379 SENTINEL simulate-failure sdown master mymaster触发一次假下线,看脚本是否真执行
notification-script 执行了但告警没送达
脚本跑通 ≠ 告警发出。常见断点在通知链路本身:
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 邮件发送失败:检查脚本里是否调用
mail命令但没装mailutils或ssmtp,或 SMTP 认证信息写错 - Webhook 超时:钉钉/企微 Webhook 地址被防火墙拦截,或脚本里用
curl -X POST但没加--connect-timeout 3 - 环境变量丢失:Docker 启动哨兵时没透传
PATH或密钥变量,导致脚本里python3 notify.py找不到解释器 - 日志没落盘:脚本 stdout/stderr 没重定向到文件,出错时无迹可查,建议开头加
exec >> /var/log/sentinel-notify.log 2>&1
哨兵根本没触发 notification-script
先确认哨兵是否真判定故障。很多“没告警”其实是“没判定”:
- 查
SENTINEL masters输出,看flags字段有没有odown—— 只有 odown 才触发通知脚本,sdown 不触发 - 检查
quorum是否满足:比如配置了sentinel monitor mymaster 192.168.1.10 6379 2,但当前只有 1 个哨兵在线,永远达不到 quorum=2,就不会升级为 odown - 确认哨兵之间能互通:
SENTINEL sentinels mymaster返回空列表,说明哨兵集群没形成共识,彼此发现不了,自然无法投票 - 注意时间窗口:从 sdown 到 odown 默认需等
down-after-milliseconds × 2(即两次确认),期间什么都不会通知
notification-script 是唯一可控的告警入口,但它依赖哨兵先完成客观下线判定;而判定能否成立,又取决于网络连通性、quorum 数量、以及所有哨兵对 master 状态的一致视图——这些底层状态不稳,脚本再完善也白搭。










