Python接入预警通知接口:服务器告警代码示例

Python是运维监控与自动化脚本中常用的语言。用Python接入互亿无线预警通知接口,可以把Zabbix、Prometheus告警或巡检脚本结果,通过短信或语音发出。本文给出可直接运行的示例,基于标准库urllib,无需安装第三方依赖。…

Python是运维监控与自动化脚本中常用的语言。用Python接入互亿无线预警通知接口,可以把Zabbix、Prometheus告警或巡检脚本结果,通过短信或语音发出。本文给出可直接运行的示例,基于标准库urllib,无需安装第三方依赖。

Python接入的接口与参数

短信接口地址 https://api.ihuyi.com/sms/Submit.json ,语音接口 https://api.ihuyi.com/voice/vm 。核心参数都是account、password、mobile、content四个。

  • account:控制台获取的APIID;
  • password:控制台获取的APIKEY;
  • mobile:接收手机号,多号可用逗号分隔;
  • content:短信内容或语音TTS文本。

Python发送短信告警代码示例

下面用urllib.parse与urllib.request实现POST请求,适合直接放在巡检脚本里:

import urllib.parse, urllib.request, json

def send_sms(mobile, content):
    url = "https://api.ihuyi.com/sms/Submit.json"
    data = urllib.parse.urlencode({
        "account": "你的APIID",
        "password": "你的APIKEY",
        "mobile": mobile,
        "content": content
    }).encode("utf-8")
    req = urllib.request.Request(url, data=data)
    with urllib.request.urlopen(req, timeout=10) as resp:
        return json.loads(resp.read().decode("utf-8"))

r = send_sms("13800138000", "服务器disk-01磁盘使用率超过90%,请尽快清理")
print(r)  # code为2表示提交成功

如果项目已用requests库,只需把请求部分替换为requests.post,逻辑一致。

Python接入注意事项

  • 请求设置timeout,避免告警接口阻塞巡检主流程;
  • account与password从环境变量读取,不要硬编码;
  • 返回code=2表示提交成功,其余错误码记录日志排查;
  • 语音接口地址换成/voice/vm即可,参数相同。

带错误处理与重试的封装

上面的示例是骨架,生产环境还需要处理网络异常与返回码。下面这个版本加上了超时、异常捕获、返回码判断与失败重试,适合直接放进Zabbix或Prometheus告警脚本:

import urllib.parse, urllib.request, json, time, logging

API_ID = os.environ.get("IHUYI_APIID")
API_KEY = os.environ.get("IHUYI_APIKEY")
URL = "https://api.ihuyi.com/sms/Submit.json"

def send_sms(mobile, content, retry=2):
    data = urllib.parse.urlencode({
        "account": API_ID, "password": API_KEY,
        "mobile": mobile, "content": content
    }).encode("utf-8")
    for attempt in range(retry + 1):
        try:
            req = urllib.request.Request(URL, data=data)
            with urllib.request.urlopen(req, timeout=10) as resp:
                r = json.loads(resp.read().decode("utf-8"))
            if r.get("code") == 2:
                return r
            logging.warning("提交失败 %s", r)
        except Exception as e:
            logging.error("请求异常: %s", e)
        time.sleep(2)
    return None

运行方式与依赖说明

该示例只用到Python标准库,Python 3.6以上可直接运行,无需pip安装第三方包。运行前在环境变量中设置IHUYI_APIID与IHUYI_APIKEY,避免密钥硬编码进脚本。

常见报错排查

  • urlopen超时:检查服务器出站443端口是否通畅;
  • 返回code非2:打印完整返回体,对照msg定位,常见是手机号格式或模板未报备;
  • 中文乱码:确认data以utf-8编码;
  • 语音播报无声:把URL换成 https://api.ihuyi.com/voice/vm 即可。

把这段函数放进你的监控脚本,服务器告警就能自动打电话。前往注册免费试用获取APIID与APIKEY。

立即开始,免费体验

新用户注册即送免费测试额度,3分钟快速接入,专属客服全程指导

免费试用 →