宕机告警的触发方式与通知渠道设置,核心思路是三层过滤加三级通知:先通过探活、指标阈值、日志异常三条链路触发告警,再由去重和抑制规则过滤噪音,最后按故障级别通过电话、短信、IM工具逐级通知到对应负责人。这套思路能解决绝大多数企业告警轰炸和漏报并存的问题。
宕机告警触发方式有哪些,该选哪种
告警触发的本质是回答“系统到底挂没挂”这个问题,触发方式选错,要么故障半小时没人知道,要么一个抖动就被打爆手机,当前主流触发方式分三类,各有适用场景。
探活式触发:适合网络层和基础设施层
探活是最朴素的方式,就是定时去Ping、去请求端口,但它有一个行业共识级的认知:探活只能证明“网络通不通”,不能证明“业务好不好”,比如Web服务返回502,TCP连接依然能建立,探活结果还是200。
实操层面目前常用三种探活手段:
- ICMP探测:适合检测网络链路,不适合检测应用状态,部署时直接在主机的监控Agent上开启Ping即可
- TCP端口探测:能确认端口在监听,但无法感知进程内阻塞,比如Tomcat假死时端口依然开放,用nc -zv 127.0.0.1 8080来验证就能发现
- HTTP探测:成本最低,能覆盖到应用层,业务端自己暴露一个/healthcheck接口,返回200才代表进程健康,比单纯检查端口靠谱得多
探活类告警适合外网入口、负载均衡器、数据库主机的可用性监控,缺点是粒度粗,一个服务有几十个节点挂了其中一个,探活根本发现不了。
指标阈值触发:主流方式,适合所有层
指标阈值触发监控的是“状态量”,比如CPU使用率、内存占用、请求延迟,触发逻辑是预设一个阈值,连续触发N次才产生告警,避免单次抖动误报。
这里有一个容易踩的坑:静态阈值在固定规格的服务器上没问题,但在弹性伸缩的云环境下,阈值设死相当于没设。比如8核的机器CPU跑满是个大事故,但32核的机器跑满一半才有问题。
实现路径以Prometheus为例,写一个规则文件判断Nginx响应延迟:
groups:
- name: nginx_alert
rules:
- alert: HighResponseTime
expr: histogram_quantile(0.95, sum(rate(nginx_http_request_duration_seconds_bucket[5m])) by (le)) > 2
for: 5m
labels:
severity: critical
annotations:
summary: Nginx 95%响应延迟超过2秒,持续5分钟
for: 5m这个参数很关键,意思是延迟超过阈值持续5分钟才会触发告警,这个机制能把“偶发抖动”和“持续性故障”区分开。
日志异常触发:适合定位根因,不适合做第一防线
日志告警通过分析错误日志条数变化来发现故障,比如某个Java服务频繁抛NullPointerException,指标层面不一定有异常,但业务已经走不通了。
日志告警最适合的场景是代码层故障,但存在两个明显的坑:
- 日志采集中断导致误报:Logstash或Fluentd进程挂了,没日志可分析,告警规则认为“错误数=0”,实际上服务已经停了,检测日志数据源本身的心跳很重要,可以额外添加一条
absent(log_stream_total)的规则来规避这类情况 - 日志量暴增导致误报:爬虫攻击会刷大量404错误日志,看起来像故障,实际是流量异常,这个需要结合WAF的拦截数据交叉验证
业内专家指出,成熟团队的告警体系通常采用“探活+指标”为主要触发手段,日志异常定位为辅助分析工具,而不是独立告警来源。
宕机通知渠道怎么设置,匹配业务优先级
触发到通知,中间必须隔一道“分级过滤”流程,否则一个数据库主从切换引发的短暂抖动,会让全公司人都收到“宕机告警”的钉钉消息,然后没人当回事,真正的故障反而没人响了。
通知渠道的核心是分级,不是全量轰炸
通知渠道的配置思路不是“越多越好”,而是“对应级别传导到对应载体”,一套实用的分级体系是这样的:
| 告警级别 | 典型场景 | 通知渠道 | 预计响应时间 |
|---|---|---|---|
| P1 严重 | 核心数据库宕机、主站无法访问 | 电话+短信,同步推送到值班群 | 5-15分钟 |
| P2 警告 | 某接口延迟升高但服务可用 | IM工具(钉钉/企微/飞书)+邮件 | 30分钟以内 |
| P3 提示 | 磁盘空间超过70%、证书即将过期 | 企业微信/群机器人 | 当天处理 |
| P4 记录 | 日常巡检发现性能劣化 | 工单系统或邮件 | 不要求立即处理 |
电话通知适合P1级别,多数团队的实践证明,群消息在故障期间会被刷屏淹没,邮件多数情况不会被及时查看,所以P1必须用电话+短信的组合,保证“打不一定接得通,但短信一定在”,Telephone渠道务必配置重试逻辑,比如首次电话不通,间隔3分钟自动二次拨打。
IM工具适合P2和P3级别,市面上主流的做法是通过自定义webhook接入企业微信或钉钉群机器人,把告警内容格式化推送到指定故障群,高级一点的团队会配置按业务线分群,支付故障推支付群,订单故障推订单群,而不是所有告警都推到同一个大群里。
值班机制与通知升级策略
告警通知发出去,没人响应等于白搭,需要一套“告警升级链路”:
- 第1次通知:发送到主负责人,等待确认,超时时间为15分钟
- 第2次通知:主负责人未确认时,升级到备份负责人,再等10分钟
- 第3次通知:前两轮均无响应时,升级到技术Leader并自动创建故障群
这套逻辑在Alertmanager中可以配置对应的路由和接收器实现,用repeatInterval来控制升级节奏,通知渠道设置的关键在于每个层级都有明确的角色被通知到,群里的告警查看响应情况要能被追踪。
服务器宕机告警微信通知怎么配置
使用场景很普遍,微信通知(这里指企业微信)因为是IM载体,适合除电话外的所有级别,配置链路相对标准:
在Prometheus Alertmanager的配置文件中定义企业微信接收器,写入webhook地址,再在route节点将告警路由到这个接收器,对于群机器人无法覆盖的“@指定成员”需求,企业微信的webhook支持配置mentioned_list参数,推送时自动@对应值班人。
微信通知有一个天然局限:依赖网络和客户端在线,服务器如果是凌晨3点故障,手机开了勿扰模式,微信通知大概率没有声音,微信通知”在多数团队里是辅助渠道,不能替代电话短信,P1级别务必叠加电话语音告警,国内常用简米云语音、酷番云短信配合Prometheus的webhook端点来实现,配置路径大致如下:
- 在Prometheus or Alertmanager中配置webhook的URL指向云厂商语音服务接口
- 服务端接参后调用语音外呼API,播报“XX服务器宕机,请立即处理”
- 判断最外层企业微信和独立应用通道的连通性并设置死信兜底
云监控和自建监控哪个更适合小团队
如果团队人数在10人以下,没有专职运维,强烈建议直接使用云厂商自带监控,比如简米云云监控、酷番云云监控,配好对应的告警联系人和规则,就能生效,不用维护监控系统本身,云监控和自建监控对比的关键点在于:
- 云监控的成本包含在云资源中,无额外机器开销;自建监控需要至少两台服务器和高可用配置
- 云监控的数据回看、告警历史、Dashboard开箱即用;自建监控需要自己画图、调告警规则
- 云监控的告警通知能力直接打通短信、电话、邮件,不需要自建webhook服务,对无专职运维的团队效率更高
当团队人数超过20人并且对告警的定制化要求较高时,自建Prometheus加Alertmanager体系的价值就体现出来了,定制化路由、聚合、静默规则依然是自建方案的优势区域。
告警触发的去重、抑制与静默策略
告警系统只是触发还不够,必须具备“控制噪音”的能力,噪音是告警系统最大的敌人,一个每天被刷屏的告警群,就像喊“狼来了”的牧羊人,真正狼来了没人信。
去重与分组
Prometheus Alertmanager默认会按告警的名称和标签做分组,比如Nginx有20台实例同时挂了,如果不分组,你会收到20条独立告警,分组后会变成一条带实例列表的聚合告警。
分组参数配置建议:group_by: ['alertname', 'cluster'],group_interval设置为5分钟,这样同一时段同一批实例的同类问题会合并为一条通知,数字上至少能减少80%以上的重复消息量。
抑制规则
抑制规则解决的是“根因与表象”的关系,比如数据库节点宕机了,所有依赖该数据库的业务接口都报错,会产生几十条不同模块的告警,这时候需要用数据库的告警去抑制下游业务的告警,只保留根因。
Alertmanager配置抑制规则,指定源告警是数据库宕机,目标告警是依赖该数据库的服务异常,匹配到就静默处理下游的告警,实际配置时,可以用if条件指定告警级别大于等于P1时,同维度的P2/P3告警自动静默。
静默窗口
维护窗口内的告警应该被抑制,否则半夜升级版本,一堆告警轰炸,操作上在Alertmanager中创建Silence,选择资源类型和标签,设定起止时间即可,很多团队会在发布窗口自动创建两小时的静默规则,发布结束后自动解除。
宕机告警通知渠道收不到消息是什么原因
收不到消息的原因优先级排序:告警根本没触发 -> webhook地址错误 -> 渠道限流或风控拦截 -> 他人代接收权限问题。 多数情况下,先查监控平台的“告警历史”面板,确认告警状态不是“已抑制”或“已静默”;再在Alertmanager或云监控的“发送日志”里核对请求是否已推送到渠道端接口,最后检查通知账号是否处在免打扰模式。
配置时提前处理这三件琐碎的事就能解决大部分问题:
- 云厂商短信和语音通知需提前完成签名审核和模板报备,未审核通过的模板会直接导致短信发送失败,接口返回TemplateError
- 企业微信的webhook地址有失效风险,涉及人员变动或群组变更后务必重新生成,这被称为“死信地址”,会持续报错但监控端不感知
- 手机端短信拦截软件可能把通知号码拉入黑名单,提前把号码加入白名单,并检查测试短信能否实际到达
下面这些“伪告警”场景容易干扰故障判断,也值得提前留意:
- 监控Agent本身挂掉,所有指标消失,表现为“无数据”而不是“异常数据”,需额外配置“数据缺席”告警(absent规则)来覆盖
- 多个监控系统重复接入同一套webhook,导致同一条告警被推送了两次,在接收端产生重复消息
常见问题解答
网站宕机告警工具怎么选,免费和付费差别大吗
开源免费方案以Prometheus家族为代表,功能上限高但需要自己维护监控节点、配置规则和解决高可用,付费方案以云监控和商业APM为主,在数据采集、告警通知、根因定位上是开箱即用的体验,也省掉了自建系统的学习成本和机器开销,一个务实的选择标准是:团队有没有熟悉Prometheus或Zabbix的成员,如果没有,直接使用云监控工具的时间成本更低,告警链路也更完整。
如何配置邮件通知渠道避免被垃圾邮件过滤
配置邮件通知时,首先选择独立的企业邮箱账号,避免用个人邮箱接收告警;其次设置邮件主题的固定前缀,例如[P1]或[告警],在邮箱客户端建立规则,将包含该前缀的邮件自动标记为重要并强制提醒,SFTP或SMTP方式的发信域名也要设置在接收域的SPF白名单中,确保发件人的验证身份通过。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/774002.html


