结论:采集系统里“设备离线”告警的误报,多数来自把“网络断了”和“设备停机”混成了一个状态。做法是分三层判断:链路层看心跳,设备层看数据有没有刷新,业务层看工单是否在生产,三层都满足才算“异常离线”,并对每一层设计独立的超时与恢复条件。
一、先把三种状态拆开
状态|判断依据|典型原因|处置
链路中断|网关到平台的心跳连续丢失|网线、交换机、4G信号、网关断电|网络侧处理,设备数据按断网补传
设备无响应|网关在线,但对某设备的读取连续失败|设备关机、通讯线松动、从站地址变更|现场检查,标记“设备无响应”
数据停滞|读取成功但值长时间不变|传感器卡死、点位映射错误|按点位设置“最大不变时长”,超过则提示
三者合并成一个“离线”,现场收到告警后无从下手,时间久了就没人理会。
二、心跳与超时怎么定
三、避免“假离线”的四个办法
• 恢复滞后:状态恢复需连续成功2到3次,防止信号临界时状态来回跳。
• 计划停机屏蔽:交接班、午休、保养时段通过班次日历屏蔽“数据停滞”告警,只保留链路告警。
• 网关重启识别:心跳序号归零代表网关重启,应记为“重启事件”,而不是一次离线加一次上线。
• 补传后回写状态:断网恢复后,补传的历史数据带原始时间戳,状态时间线要按原始时间回写,避免统计出来的在线率偏低。
四、落地时的字段建议
设备状态表建议至少包含:设备ID、网关ID、当前状态、状态开始时间、最后一次成功读取时间、最后错误码、连续失败次数、是否计划停机。状态变更写入状态变更流水表,保留变更前后状态和触发原因,用于事后统计在线率和排查。
五、常见追问
心跳放在业务数据里行不行?不建议。设备没有数据变化时就没有消息,容易被误判成离线,心跳应该独立。
离线告警要不要发短信?链路中断超过一定时长再升级通知,短时波动只记录,不打扰人。
在线率怎么算?用“计划运行时间内可采集时长”除以“计划运行时间”,计划停机时段不计入分母。
多个设备挂在一个网关上,网关断了怎么处理?先判网关,再判设备;网关中断时下属设备统一标记“网关中断”,不要逐个发告警。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。