心跳检测本身不直接发短信或邮件,只负责发现异常;告警由zabbix等上层系统在确认超时+连续丢失n次心跳后触发,需准确传递状态并配置双通道通知及容错机制。

心跳检测本身不直接发短信或邮件,它只负责发现异常;告警动作由上层监控系统(如Zabbix、Prometheus、自研平台)在确认心跳失联后触发。关键在于把“心跳异常”这个状态准确传递给告警引擎,并配置好通知渠道。
明确心跳异常的判定逻辑
集群心跳异常不是“收不到包”就立刻告警,而是需满足超时+连续失败条件,避免网络抖动误报:
- 心跳间隔通常设为3–10秒(如Hadoop DataNode默认3秒)
- 超时阈值一般为心跳间隔的3–10倍(例如间隔5秒,超时设为30秒)
- 连续丢失N次心跳才判定为异常(常见N=3或N=5),而非单次丢包
- Zabbix中可通过触发器表达式写成:{HOSTNAME:agent.ping.nodata(30s)}=1,表示30秒内无agent响应即触发
将心跳状态接入告警系统
不同架构接入方式不同,但核心是让监控系统能采集到心跳结果:
-
Zabbix场景:用
zabbix_agentd内置的agent.ping或自定义键值(如check.heartbeat.status)采集节点心跳返回码;也可通过简单TCP端口连通性检查(net.tcp.port[host,port])间接反映服务存活 - 自研/微服务场景:各节点定时向注册中心(如Nacos、Consul)上报心跳,监控服务监听注册中心的节点上下线事件,转为告警事件
-
Kubernetes场景:利用kubelet与API Server的心跳机制,通过
kube_node_status_condition指标监测Ready状态为False持续超时即告警
配置短信与邮件双通道告警
以Zabbix 4.0.5为例,邮件需脚本+SMTP+媒介类型三者协同;短信常依赖网关API或第三方服务(如阿里云短信、腾讯云SMS):
-
邮件配置要点:使用授权码而非邮箱密码;SMTP服务器地址(如
smtp.163.com)、端口(587或465)、加密方式(STARTTLS或SSL)必须匹配;脚本sendmail.sh需有执行权限且归属zabbix用户 -
短信配置要点:编写调用短信API的脚本(如
sendsms.sh),传入手机号、模板ID、参数;在Zabbix“报警媒介类型”中新增该脚本,参数设为{ALERT.SENDTO}和{ALERT.MESSAGE} - 统一告警动作:在“动作(Actions)”中设置条件为“触发器=心跳异常”,操作步骤同时添加“发送邮件”和“发送短信”,可指定不同用户组或按严重级别分流(如重要级发短信+邮件,次要级仅邮件)
验证与容错建议
真实环境中需覆盖边界情况:
- 手动停止被监控节点的agent服务或切断网络,等待超时后检查是否收到告警
- 模拟短暂断网(如
iptables -A OUTPUT -p tcp --dport 10050 -j DROP再恢复),确认告警不误发、恢复后自动清除 - 邮件/短信脚本中加入日志记录和错误退出码判断,防止静默失败
- 对短信通道做降级处理——若API调用失败,自动 fallback 到邮件或企业微信










