西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页 → 业内动态 → 业内资讯 → 告警响了一晚上,网站其实好好的:探活误报的三个来源

告警响了一晚上,网站其实好好的:探活误报的三个来源

相关软件相关文章发表评论 来源:本站整理时间:2026/11/5 7:06:50字体大小:A-A+

  • 类型:服务器区大小:1.4M语言:英文 评分:8.0
  • 标签:
立即下载

凌晨两点,手机把我震醒。监控面板上那条红色的“站点不可达”挂着,我第一反应是服务器挂了,翻身爬起来开电脑登录、ping 一下、curl 一下全都正常。网站好好的,一个访客都没少掉,但告警确实响了。这一夜我被吵醒四次,最后一次是凌晨五点。这次之后我花了整整两天,把探活这条链路从脚本到通知渠道整个拆开看了一遍,才发现问题根本不在服务器上,而在我自己搭的这套监控里。下面这三个点,是我踩过的坑,也是我改完之后再没被误报吵醒的原因。

如果你也在给海外站点做探活告警,下面这些服务器本身就是被监控的对象,也可以先看看这几家的报价和技术说明:isvoro(全球云服务器),香港、美国、德国、英国等多地区节点,适合把探活探针分散到不同地区。

第一个坑:探针自己所在的网络在抖,服务器却是好的

我最早是把探活脚本放在自己的一台海外 VPS 上跑的,脚本逻辑很朴素:curl 一个固定的 URL,返回码不是 200 就判定失败。问题出在这个“固定”上。我这台探针机在洛杉矶,走的是一条当时还不错的线路,但那条链路在美西晚高峰会抖 200 到 400 毫秒,偶尔丢包。我把超时设成了 3 秒,于是每天晚上八点到十点,探针就开始隔三差五超时。

而被监控的业务服务器本身在法兰克福,一点毛病没有。这就是典型的探活误报:告警反映的是探针的处境,不是被监控对象的处境。我后来的做法是把超时从 3 秒放宽到 8 秒,同时在探针侧加了一个“连续失败 3 次才判定失败”的计数,而不是一次超时就报。改完之后,那条线路晚高峰照样抖,但告警再没响过。

更稳一点的做法是多地探针:同一个站点从至少两个不同地区的节点去探,只要有一个节点成功就不算失败,这样单条链路的抖动就被过滤掉了。这里牵涉到一个现实问题如果你想让探针覆盖欧洲、美洲、亚洲,就得多准备几台分布在不同地区的机器,用一台机器硬扛全球链路,误报率一定压不下来。

多地探针节点分散部署示意图

第二个坑:探活路径和真实用户路径不是同一条

这个坑更隐蔽。我有一次告警说首页打不开,我手动访问发现首页好好的,只是慢。我顺着往下查,发现探活脚本请求的是 /healthz 这个内部健康检查接口,而这个接口挂在一套独立的服务上,平时正常,但它所在的那台机器当晚会做定时任务,占满了 CPU,响应时间从 5 毫秒涨到了 2 秒多虽然还在超时以内,但响应体里某个字段超时了,脚本判失败。

所以我现在的规则是:探活只探一个真正代表用户体验的路径,比如首页的 HTML,或者一个需要登录才能拿到的动态接口,而不是随便找个内部接口糊弄。而且探针要真的把响应体读下来,光看状态码不够有些反代在故障时会返回 200 但塞一个错误页,脚本不检查就当正常了。

另外还有一个细节:探活请求必须带一个真实的 User-Agent,别用 curl 默认的。有一回我看到监控面板上全是 403,才想起来探针没带 UA,被站点的 WAF 拦了,误报了一整天。

探活脚本检查状态码与响应体内容

第三个坑:告警通知渠道本身不可靠,还互相重复

前两个坑修完,误报少了很多,但只要漏一次我还是会被吵醒,所以接着折腾通知渠道。我对比过好几种方案,说点实在的:

邮件通知最便宜也最不打扰,适合放“每天一次汇总”或者低优先级的告警,唯一的问题是手机邮件客户端不一定实时推送,夜间基本等于没有。

IM 群通知(比如各种机器人群机器人)实时性最好,成本也低,适合第一时间知道“出事了”。但群消息有个致命缺点它不做去重,一次故障连续探活失败三次,就是三条一模一样的消息刷屏。我现在的做法是告警侧加一个“抑制窗口”,同一台主机 10 分钟内的重复告警只推第一条。

电话/短信通知贵,但它是唯一能真把人从床上叫起来的渠道,适合只挂在“影响收入”的核心业务上。我的建议是分级:P1 用电话或者短信,P2 用 IM 群,P3 直接进邮件日报。一股脑全走 IM 群的结果就是群消息变多,人反而麻木了。

还有一个容易被忽略的点:监控本身也会挂。我有过一次探针脚本因为依赖的 Python 环境被升级搞崩了,脚本进程直接没了,监控面板一片安静这叫“静默失败”,比误报危险得多。后来我在监控服务器上加了一条“看门狗”定时任务,每 5 分钟检查一次探针进程还在不在,如果进程不在,就直接用另一条独立通道(比如最土的邮件)告诉运维。这个冗余在真正出事那一次救了我。

多渠道告警通知与抑制窗口流程

我现在的探活配置,改完就没再半夜被吵醒

把上面三条合起来,我现在的配置大概是这样,抄给同样在做海外站点监控和告警阈值调优的人参考:

第一,探针至少两个不同地区,单节点失败不算失败,全部节点失败才算真故障。

第二,超时 8 秒,连续失败 3 次才触发,一次网络抖动直接过滤掉。

第三,探活路径只保留一条,且必须校验响应体内容,不能只看状态码,UA 也要带。

第四,告警分级:P1 电话加短信,P2 群机器人加抑制窗口,P3 进邮件日报。

第五,看门狗冗余,探针进程没了也要有人知道。

这套东西前前后后调了三天,改完之后到现在两个月没有一条误报告警,也没有漏过一次真故障。回头看,探活误报这件事根本不是服务器的问题,是监控这条链路上的每一段都可能出问题:探针的网络、探活的路径、通知的渠道、监控的自监控。你把每一段都当成可能失败的环节去设计,误报自然就少了。

探活配置清单与告警分级整理

顺便说一句,如果你打算给探针配几台分布在不同地区的机器,上面提到的kdatacenter(全球云服务器)这类多机房服务商可以先了解一下节点分布,探针的地域覆盖越均匀,误报过滤效果越好。

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶顶
    • 1 难过难过
    • 5 囧囧
    • 3 围观围观
    • 2 无聊无聊

    发表评论

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲