keepalived故障转移告警核心是通过notify机制调用外部脚本触发第三方api;每个vrrp_instance配置notify脚本,状态变更时传入实例名、新状态、优先级三个参数;推荐仅对master/fault状态发钉钉/企微/飞书告警,并加限频、日志记录及异步执行。

Keepalived 故障转移通知集成第三方告警,核心是利用其 notify 机制触发外部脚本,再由脚本调用第三方平台 API。它不依赖 Keepalived 内置功能,而是靠轻量、可控的“状态出口”完成联动。
Keepalived 的 notify 是最稳的告警入口
每个 vrrp_instance 可配置 notify /path/to/script.sh,状态变化(MASTER/BACKUP/FAULT)时自动执行,并传入三个参数:实例名、新状态、优先级。这是语义明确、时机精准、无额外开销的触发点,比轮询日志或监听端口更可靠。
用脚本对接企业微信/钉钉/飞书机器人
推荐用 curl 发送 HTTP POST 请求,5 行内完成。以钉钉为例:
#!/bin/bash
INSTANCE=$1
STATUS=$2
HOST=$(hostname)
TIME=$(date '+%Y-%m-%d %H:%M:%S')
if [[ "$STATUS" == "MASTER" || "$STATUS" == "FAULT" ]]; then
curl -X POST 'https://oapi.dingtalk.com/robot/send?access_token=xxx'
-H 'Content-Type: application/json'
-d "{"msgtype": "text","text": {"content": "[Keepalived 告警] ${HOST} 切换为 ${INSTANCE} 的 ${STATUS} 状态\n时间:${TIME}"}}"
fi
注意替换 access_token,并确保服务器能访问公网(或内网机器人地址)。企业微信、飞书同理,只需改 URL 和 JSON 结构。
关键实践建议
- 告警只发
MASTER和FAULT:BACKUP是正常待命态,通常无需通知 - 加简单限频:比如 FAULT 状态 5 分钟内只发一次,避免风暴(可用
touch -m+stat判断) - 记录本地日志:每条告警写入
/var/log/keepalived-alert.log,含时间、主机、状态、实例,方便回溯 - 避免阻塞主进程:脚本内不做耗时操作(如 sleep、复杂解析),发完即退;必要时用
&异步或at延迟
替代路径:日志采集统一告警
若已有 Prometheus + Alertmanager 或 ELK 栈,可让 Keepalived 输出到 syslog(默认开启),再用 Filebeat 或 journalbeat 抓取 VRRP_Instance 相关日志行,匹配 Entering MASTER STATE 等关键词触发告警规则。这种方式解耦更强,适合中大型运维体系。
不复杂但容易忽略











