1、阿里云短信服务API
2、Jenkins-plugin:Generic Webhook Trigger Plugin
-
阿里云
- 下载 阿里云短信服务SDK ( # python setup.py install )
- 创建短信服务ACCESS_KEY_ID
-
Grafana
- 产生报警信息
- 将报警信息发送给Jenkins的webhook接口
-
Jenkins
- 创建JOB,执行python脚本
- 设置JOB的webhook地址
一、首先根据实际情况修改阿里云短信接口的python demo
# -*- coding: utf-8 -*- import sys from aliyunsdkdysmsapi.request.v20170525 import SendSmsRequest from aliyunsdkdysmsapi.request.v20170525 import QuerySendDetailsRequest from aliyunsdkcore.client import AcsClient import uuid from aliyunsdkcore.profile import region_provider from aliyunsdkcore.http import method_type as MT from aliyunsdkcore.http import format_type as FT #import const import json """ 短信业务调用接口示例,版本号:v20170525 Created on 2017-06-12 """ try: reload(sys) sys.setdefaultencoding('utf8') except NameError: pass except Exception as err: raise err # 注意:不要更改 ACCESS_KEY_ID = "LTAIqEab3HRpRmk6" ACCESS_KEY_SECRET = "TrnLKl5Qdd7aiAxsUF9v57635y07oK" REGION = "cn-hangzhou" PRODUCT_NAME = "Dysmsapi" DOMAIN = "dysmsapi.aliyuncs.com" #Jenkins webhook变量 PhoneNumbers = sys.argv[1].split(",") Contents = sys.argv[2] State = sys.argv[3] print "PhoneNumbers: %s" % PhoneNumbers print "Contents: %s" % Contents acs_client = AcsClient(ACCESS_KEY_ID, ACCESS_KEY_SECRET, REGION) region_provider.add_endpoint(PRODUCT_NAME, REGION, DOMAIN) def send_sms(business_id, phone_numbers, sign_name, template_code, template_param=None): smsRequest = SendSmsRequest.SendSmsRequest() # 申请的短信模板编码,必填 smsRequest.set_TemplateCode(template_code) # 短信模板变量参数 if template_param is not None: smsRequest.set_TemplateParam(template_param) # 设置业务请求流水号,必填。 smsRequest.set_OutId(business_id) # 短信签名 smsRequest.set_SignName(sign_name) # 数据提交方式 # smsRequest.set_method(MT.POST) # 数据提交格式 # smsRequest.set_accept_format(FT.JSON) # 短信发送的号码列表,必填。 smsRequest.set_PhoneNumbers(phone_numbers) # 调用短信发送接口,返回json smsResponse = acs_client.do_action_with_exception(smsRequest) # TODO 业务处理 return smsResponse if __name__ == '__main__': __business_id = uuid.uuid1() #print(__business_id) #params = "{"code":"11113"}" #params = u'{"name":"wqb","code":"12345678","address":"bz","phone":"13000000000"}' params = {"name":Contents,"state":State} params = json.dumps(params) print params for PhoneNumber in PhoneNumbers: print(send_sms(__business_id, PhoneNumber, "wjoyxt", "SMS_155355123", params))
附:阿里云短信模板详情
模版类型:短信通知
模版名称:Grafana短信模板
模版CODE:SMS_155355123
模版内容:Grafana告警名称:${name} ,现在状态变为:${state}
申请说明:公司内部运维人员专用告警短信
二、Jenkins插件Generic Webhook Trigger Plugin配置
三、创建Grafana Notification channels,Url:http://172.17.102.200:8080/generic-webhook-trigger/invoke?token=sms
完成!至此在Grafana触发报警后会通过这个Channel 发送一个POST请求到Jenkins,Jenkins便会执行对应的JOB从而发送报警短信。
构建过程日志如下图所示:
回调参数示例:
{ "title": "My alert", "ruleId": 1, "ruleName": "Load peaking!", "ruleUrl": "http://url.to.grafana/db/dashboard/my_dashboard?panelId=2", "state": "alerting", "imageUrl": "http://s3.image.url", "message": "Load is peaking. Make sure the traffic is real and spin up more webfronts", "evalMatches": [ { "metric": "requests", "tags": {}, "value": 122 } ] }
手动测试:
curl -H "Content-Type: application/json" -X POST -d '{"ruleName":"test","state":"OK"}' "http://172.17.102.200:18080/generic-webhook-trigger/invoke?token=sms"