Keepalived 通过 NOTIFY 脚本结合 syslog 实现审计日志:在 vrrp_instance 中配置 notify 脚本,脚本用 logger 命令将状态、实例名、时间、主机名、IP 和 VIP 绑定情况写入系统日志,并支持 rsyslog 归档与上下文增强,需确保 root 权限和时间精度。

Keepalived 本身不内置审计日志功能,但可通过监听其状态变化(如 `NOTIFY` 脚本)结合系统日志工具(如 rsyslog 或 journalctl)记录主从切换事件,实现可追溯的审计日志。
利用 NOTIFY 脚本捕获状态变更
Keepalived 在角色切换(MASTER/BACKUP/FAULT)时会调用配置中指定的 `notify` 脚本,并传入当前状态作为参数。这是记录审计日志最直接、最可靠的入口点。
- 在 keepalived.conf 的 vrrp_instance 块中添加:
notify /etc/keepalived/notify.sh - 脚本需具备可执行权限(
chmod +x /etc/keepalived/notify.sh) - 脚本内通过
$1获取状态(如 "MASTER"、"BACKUP"、"FAULT"),通过$2获取实例名,建议统一格式输出到 syslog
规范写入系统日志(rsyslog/journald)
避免直接写文件(难管理、无轮转、权限易出错),推荐使用 logger 命令或 syslog 系统调用,确保日志进入标准审计通道。
- 示例 notify.sh 片段:
logger -t keepalived-audit "VRRP instance '$2' transitioned to $1 at $(date --iso-8601=seconds)" - 这样日志会出现在
/var/log/messages(rsyslog)或journalctl -t keepalived-audit(journald)中 - 如需归档或转发,可在 rsyslog 配置中按 tag 过滤并写入独立文件(如
/var/log/keepalived-audit.log)
补充关键上下文提升审计价值
仅记录状态不够,审计日志需包含足够上下文以支持事后分析和责任认定。
- 加入本机主机名和 IP:
hostname和ip addr show dev eth0 | grep inet | head -1 | awk '{print $2}' - 记录 VIP 绑定情况(如
ip addr show dev eth0 | grep 'inet.*virtual') - 若对接监控或告警系统,可同步触发 webhook 或写入数据库(需注意脚本执行超时限制,默认 5 秒)
验证与权限注意事项
日志能否成功写入,取决于脚本运行用户(keepalived 主进程通常以 root 启动,notify 脚本也以 root 执行)及目标日志路径权限。
- 确认
logger命令可用(多数系统默认安装) - 如使用自定义日志文件,需确保 keepalived 进程有写入权限(不推荐)
- 测试方法:手动执行 notify.sh MASTER dummy,再查
journalctl -t keepalived-audit -n 5
不复杂但容易忽略的是时间精度和日志唯一性——建议在日志中加入毫秒级时间戳或序列号,避免高频率切换时日志条目难以区分。

















