来源:so.csdn.net
发布时间:Dec 4, 2020, 9:21:19 AM
原地址:https://blog.csdn.net/JB324/article/details/110646172
整体思想
使用python封装一下阿里云的语音服务,暴露一个restapi地址,配置到alertmanager的receiver url上,脚本接收到alertmanager发过来的消息之后,获取告警的信息,再将告警信息转化成语音服务API的入参
脚本
# -*- coding: utf-8 -*-
import urllib, urllib2, sys
import logging
import json
from logging.handlers import TimedRotatingFileHandler
from flask import Flask
from flask import request
app = Flask(__name__)
app.config["JSON_AS_ASCII"] = False
logger = logging.getLogger('voicealert')
logger.setLevel(logging.DEBUG)
fileHandler = TimedRotatingFileHandler("alert.log", when='D', encoding="utf-8")
fileHandler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fileHandler.setFormatter(formatter)
logger.addHandler(fileHandler)
def call_voice_notify(phone_number,variables):
host = 'http://yzxyytz.market.alicloudapi.com'
path = '/yzx/voiceNotifySms'
method = 'POST'
appcode = '3b74f48651134c5cabc32a491d36c6cd'
querys = 'phone='+phone_number+'&templateId=TP18040817'
url = host + path + '?' + querys
headers={
'Authorization': 'APPCODE ' + appcode}
bodys = urllib.urlencode({
})
voicerequest = urllib2.Request(url, data=bodys, headers=headers)
response = urllib2.urlopen(voicerequest)
content = response.read()
if (content):
logger.debug("voice alert api response:"+json.dumps(content, ensure_ascii=False))
return content;
@app.route('/alert/voice', methods=['POST'])
def voice_alert():
alert_info = json.loads(request.data)
logger.debug("message sent by alertmanager:"+json.dumps(alert_info, ensure_ascii=False))
phonenums = ["17839707556"]
alert_status = alert_info['status']
if alert_status == "firing":
for phonenum in phonenums:
#result=call_voice_notify(phonenum,alert_info['groupLabels']['alertname'])
result={
"return_code":"10001"}
elif alert_status == "resolved":
result = {
"return_code": "问题已修复","order_id": "NA"}
return result
if __name__ == "__main__":
app.run(host="127.0.0.1", port=6666, debug=True)