如何在OMS中设置服务器离线时的心跳查询与即时告警?
OMS服务器离线即时告警配置+心跳查询语句方案
我之前也碰到过一模一样的问题:谷歌搜的方案要么延迟半天不告警,要么小波动就炸一堆通知,折腾了好久终于摸出了精准触发的配置方式,连带着心跳查询语句一起给你整理出来,亲测有效:
一、精准告警配置步骤(避免延迟/误报)
- 锁定心跳监控模块:别用基于日志或资源使用率的间接告警,直接找到OMS里的「服务器心跳状态监控」(一般在「监控规则」→「实体心跳」分类下),绑定服务器的心跳检测状态作为触发源
- 设置即时触发条件:把告警触发规则改成「心跳状态从『正常』切换为『失联』时立即触发」,必须关闭默认的“连续N次失败才告警”阈值,同时把告警冷却时间设为0(或1分钟以内)——很多默认配置的冷却时间会导致延迟,这是之前方案失效的核心原因
- 过滤冗余告警:
- 添加实体过滤规则,只针对生产环境/核心服务器组,排除测试机、临时运维机器
- 开启告警去重:同一个服务器的离线告警,5分钟内只推送1次,避免网络波动导致的重复轰炸
- 完善告警通知:通知模板里必须包含「服务器IP/主机名」「离线时间」「OMS监控实例ID」,方便运维快速定位;渠道选运维常用的(企业微信/短信/邮件),确保接收人覆盖到值班团队
二、OMS心跳状态查询语句(实时验证+自定义告警数据源)
下面是通用的心跳查询SQL,你可以直接在OMS的内置SQL查询工具里运行,也可以把它作为自定义告警规则的数据源,确保触发逻辑精准:
-- 查询所有服务器的实时心跳状态,离线超过1分钟标记为异常 SELECT entity_id AS 服务器ID, entity_name AS 服务器名称, ip_address AS 服务器IP, last_heartbeat_time AS 最后心跳时间, CASE WHEN TIMESTAMPDIFF(MINUTE, last_heartbeat_time, NOW()) > 1 THEN '已离线' ELSE '在线' END AS 当前状态 FROM oms_heartbeat_records -- 不同OMS表名可能不同,比如monitor_heartbeat WHERE entity_type = 'SERVER' -- 筛选服务器类型实体 ORDER BY last_heartbeat_time DESC;
注意事项:
- 不同厂商的OMS表结构可能有差异,如果表名/字段不对,直接去OMS的数据库里查对应的心跳表(一般带heartbeat/monitor关键字)
- 测试时可以手动断开一台测试服务器的心跳服务,验证告警是否在1分钟内触发,同时检查有没有误报
- 对于网络不稳定的边缘服务器,可以单独设置「连续2次心跳失败触发告警」,但核心生产服务器一定要保持「即时触发」
内容的提问来源于stack exchange,提问作者itye1970
相关产品推荐
相关产品推荐

