CPU飙高才发现问题?用CES告警加SMN自动通知
服务器出问题最被动的时机,是用户先发现网站打不开、你后知后觉去查,才发现 ECS 的 CPU 早已跑满半小时。等你在监控面板上看到那条红色曲线,黄花菜都凉了——用户已经流失,口碑也受了影响。与其被动救火,不如让监控自己"喊你"。华为云云监控 CES 能持续采集 ECS、RDS 等资源的指标,配上一条告警规则:当 CPU 使用率连续超过阈值,就自动触发消息通知服务 SMN,把告警推到你的邮件或短信。整个过程不写一行业务代码,纯配置就能把"事后救火"变成"事前预警",你在开会、睡觉都能第一时间收到消息。

一、告警规则串起监控与通知
一条 CES 告警规则由三部分组成:监控对象(哪个 ECS)、触发条件(什么指标、怎么比较、超多少)、动作(触发后干什么)。其中"动作"就是通知——CES 的告警通知依赖 SMN,规则里填一个 SMN 主题的 topic_urn,告警一触发就把消息发到该主题下所有订阅者。也就是说,CES 负责"看",SMN 负责"喊",两者一接就闭环。
二、先准备 SMN 主题和订阅
在发告警前,得先有一个能接收消息的 SMN 主题,并添加订阅(邮件/短信/HTTP 等),订阅者要点击确认才生效。主题创建后你会拿到它的 URN,形如 urn:smn:cn-north-4:账号ID:topic-alarm。这个 URN 就是后面告警规则里要填的接收地址。
三、用接口创建告警规则
CES 创建告警规则的接口是 POST /V1.0/{project_id}/alarms。下面创建一个"ECS 的 CPU 使用率连续 3 次采样超 85%"的告警,并绑定上面的 SMN 主题:
import os, requests
CES = "https://ces.cn-north-4.myhuaweicloud.com"
TOKEN = os.environ["HW_TOKEN"]
topic_urn = os.environ["SMN_TOPIC_URN"] # urn:smn:...:topic-alarm
body = {
"alarm_name": "ecs-cpu-high",
"alarm_type": "MULTI_INSTANCE",
"metric": {"namespace": "SYS.ECS",
"dimensions": [{"name": "instance_id",
"value": os.environ["ECS_ID"]}]},
"condition": {"period": 1, "filter": "average",
"comparison_operator": ">=", "value": 85,
"unit": "%", "count": 3, "alarm_level": 2},
"alarm_action_enabled": True,
"alarm_actions": [{"type": "notification",
"notificationList": [topic_urn]}],
}
resp = requests.post(
f"{CES}/V1.0/{os.environ['HW_PROJECT_ID']}/alarms",
json=body, headers={"X-Auth-Token": TOKEN, "Content-Type": "application/json"})
print("告警规则已创建:", resp.json().get("alarm_id"))
关键点:namespace 必须写对(ECS 是 SYS.ECS),维度 name 是 instance_id、value 填具体 ECS ID;condition 里 period 是采样周期(分钟),count 是连续几次达标才告警,避免抖动误报。

四、几个要注意的点
第一,namespace 和维度名写错会导致规则建了也不采集,建议对照官方"监控服务命名空间"文档填。第二,告警只在"生效时间"内发通知,默认全天,若设了时段别漏配。第三,SMN 处理有延迟时告警可能晚到几分钟,别指望秒级触达。第四,订阅者没点确认链接,永远收不到消息,这是最容易漏的一步。第五,告警通知依赖 SMN 服务,若主题被删或 URN 失效,规则会静默失效,建议定期核查。第六,除邮件短信外,还能接 FunctionGraph 做自动处置(如自动扩容),玩法不止通知一种。第七,告警不是越灵敏越好,阈值定太低、采样周期太短,正常业务抖动也会频繁触发,告警刷屏到让你麻木反而忽略真问题;建议结合历史曲线定一个"确实异常"的线,并用 count 连续几次才触发来滤掉毛刺。第八,CES 还支持"恢复通知",勾选后指标回到正常也会发一条,方便你确认问题已解除、及时收尾。
五、小结
等资源挂了才发现,不如让 CES 在指标异常时自动喊你。流程是:先建 SMN 主题并添加已确认的订阅,再用 POST /V1.0/{project_id}/alarms 创建告警规则,监控对象填 ECS(namespace=SYS.ECS、维度 instance_id),condition 设 CPU 阈值与连续次数,alarm_actions 绑定 SMN 的 topic_urn,超阈值即推邮件/短信。注意 namespace 别写错、订阅要确认、生效时段与延迟。接口与字段以华为云 CES、SMN 官方文档为准。
- 点赞
- 收藏
- 关注作者
评论(0)