资源用量每日播报:用 SMN 主题订阅推到邮箱和群里

举报
茉莉风铃 发表于 2026/09/26 23:02:16 2026/09/26
【摘要】 资源用量每天该主动推而不是手动翻。本文讲用 SMN 主题订阅把每日资源用量(OBS/ECS/费用)通过定时脚本生成并推到邮箱或群机器人,含发布命令与订阅确认注意点。

一、背景:资源用量该主动推,而不是每天去翻控制台

云上跑着一堆资源,流量、存储、费用每天都在变。等月底账单出来才发现某个桶悄悄涨到几个 T,已经晚了。理想状态是每天收到一条播报:今天各资源用了多少、和昨天比涨了没。但每天手动登控制台看一遍,三天就坚持不下去。

华为云的 SMN(简单消息通知服务,Simple Message Notification)就是干"把消息主动推给订阅者"这件事的:你建一个主题(Topic),往里加邮箱、短信、HTTP 端点等订阅者,然后用一条发布(Publish)调用把消息推给所有人。本文讲怎么用 SMN 把"每日资源用量"做成一条自动推送,配合定时任务,每天定点把汇总发到你邮箱或群机器人。

二、SMN 的三个核心概念

理解 SMN 只要抓住三个词:

  • 主题(Topic):一个消息频道,比如叫 daily-usage-report;
  • 订阅(Subscription):挂在主题下的接收端,可以是邮箱、短信、HTTP/HTTPS 端点、函数等;
  • 发布(Publish):往主题推一条消息,所有已确认订阅的接收端都能收到。

订阅在生效前通常需要"确认"——比如邮箱订阅会发一封确认信,点一下才算激活,避免有人乱填别人邮箱收到你的消息。这个确认动作只做一次,之后长期有效。

三、建主题、加订阅

在 SMN 控制台建一个主题:

  1. 新建主题,名称 daily-usage-report,选好协议支持范围;
  2. 添加订阅,协议选「邮件」,端点填你的邮箱;想推到群(如企业微信/钉钉机器人)就选「HTTP」端点,填机器人的 webhook 地址;
  3. 邮箱订阅会收到确认邮件,点击确认链接激活;
  4. HTTP 端点一般会收到一条验证请求,你的机器人服务要按规范回确认。

订阅建好之后,发布消息就只用一个动作。下面是 KooCLI 发布的示意:

hcloud smn message publish \
  --topic_urn <你的主题URN> \
  --subject "每日资源用量播报" \
  --message "今日 OBS 用量 120GB(较昨日 +3GB);ECS 2 台运行中;预估费用 ¥12.5"

topic_urn 是主题的唯一标识,控制台和 API 都能拿到。消息内容就是你要播报的文本,支持换行。具体发布接口字段以官方文档为准。

四、播报内容从哪来

消息本身得有人生成。常见做法是写一个定时脚本(本机 cron、或 FunctionGraph 的 TIMER 触发器),每天固定时间:

  1. 调各云服务的用量/计量 API,把 OBS 容量、ECS 数量、流量等取回来;
  2. 拼成一段人话文本;
  3. 调 SMN 的发布接口推到主题。
def build_report():
    lines = []
    lines.append(f"OBS 用量 {obs_usage()}GB")
    lines.append(f"运行中 ECS {ecs_count()} 台")
    lines.append(f"预估今日费用 ¥{estimate_cost()}")
    return "\n".join(lines)

def push():
    smn_publish(topic_urn, subject="每日资源用量播报", message=build_report())

obs_usage 这类函数内部去调对应服务的查询接口,返回值拼成文本。这样每天到点,你和团队邮箱/群里就收到一条干净的汇总,不用任何人手动看控制台。

五、关键注意点

第一,订阅确认别忘了。最容易被漏的就是邮箱那封确认信,没点确认就永远收不到,排查时还以为代码错了。加完订阅先验证"能不能收到测试消息"再上定时。

第二,HTTP 端点要做验证响应。群机器人/webhook 订阅时,SMN 会先发验证请求,你的服务必须按规范返回确认,否则订阅处于待确认状态,消息发不出去。

第三,消息别太长。SMN 单条消息有长度限制,播报就写关键数字和涨跌,详细明细放链接或附件,别把整张报表塞进一条文本。

第四,敏感信息脱敏。播报可能含资源名、IP,推到群时要考虑群里谁都能看,必要时只播汇总数字、不暴露具体实例 ID。

第五,失败要能感知。如果某天推送没收到,是脚本挂了还是 SMN 限流?建议脚本自身有最低限度的失败告警(比如推不掉就写日志/发另一条到备用渠道),别让"没收到播报"被误读成"一切正常"。

六、总结一下

资源用量每日播报是 SMN 最接地气的使用场景:建主题、加订阅、定时发布,三步走完就能让关键数字每天主动找你,而不是你去找它。真正的灵活点在订阅端——邮箱、群机器人、短信、甚至另一个函数都能挂上,一条消息多端触达。脚本生成播报文本、SMN 负责投递,职责清晰。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。