zabbix利用阿里云短信服务添加短信报警

时间:2024-03-17 15:59:35

注册阿里云,在短信服务里申请短信签名

签名名称会在脚本中用到。

申请短信模板

模板CODE会在脚本中用到,模板内容要添加参数,即zabbix传来的报警内容。

创建AccessKey 

使用阿里云api需要访问秘钥,在访问控制页面-->用户管理-->新建用户

第一次生成AccessKey时会给你密码,AccessKey ID和密码脚本里会用到。

编写报警脚本

# vim /usr/lib/zabbix/alertscripts/sendSMS.py
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
from aliyunsdkdysmsapi.request.v20170525 import SendSmsRequest
from aliyunsdkdysmsapi.request.v20170525 import QuerySendDetailsRequest
from aliyunsdkcore.client import AcsClient
import json
import uuid
import sys

reload(sys)
sys.setdefaultencoding(\'utf-8\')

"""
短信产品-发送短信接口
Created on 2017-06-12
"""
REGION = "cn-hangzhou"# 暂时不支持多region
# ACCESS_KEY_ID/ACCESS_KEY_SECRET 根据实际申请的账号信息进行替换
ACCESS_KEY_ID = "你的AccessKey ID"
ACCESS_KEY_SECRET = "你的AccessKey密码"
acs_client = AcsClient(ACCESS_KEY_ID, ACCESS_KEY_SECRET, REGION)
# 请参考本文档步骤2
def send_sms(business_id, phone_number, sign_name, template_code, template_param=None):
    smsRequest = SendSmsRequest.SendSmsRequest()
    # 申请的短信模板编码,必填
    smsRequest.set_TemplateCode(template_code)
    # 短信模板变量参数,友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
    if template_param is not None:
        smsRequest.set_TemplateParam(template_param)
    # 设置业务请求流水号,必填。
    smsRequest.set_OutId(business_id)
    # 短信签名
    smsRequest.set_SignName(sign_name);
    # 短信发送的号码,必填。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
    smsRequest.set_PhoneNumbers(phone_number)
    # 发送请求
    smsResponse = acs_client.do_action_with_exception(smsRequest)
    return smsResponse
__business_id = uuid.uuid1()
print __business_id
sendto = str(sys.argv[1])     #zabbix传过来的第一个参数
message = str(sys.argv[2])    #zabbix传过来的第二个参数
params = {"message": message} #对应短信模板里设置的参数
params = json.dumps(params)
print send_sms(__business_id, sendto, "你的短信签名", "你的短信模板CODE", params)

zabbix配置

大功告成!