证券代码:831315|7X24服务热线:400-720-7200

URL回调说明

1. 功能说明。

通过URL回调功能,您可以将故障和恢复的信息发送到您指定的URL上,从而更加灵活的处理各种告警消息。

2. 支持消息类型。

目前仅支持SmartEye监控告警信息。

3. 使用方法。

3.1 在回调URL处填写您指定的回调地址,一般是您服务器上一个用于获取和处理回调信息的文件,需要能够通过公网正常访问。

3.2 在您的服务器上设置回调密钥,这用于确认回调通知是由安畅网络发出的。

3.3 勾选“开启URL回调”并点击“应用”后,URL回调将通过POST方式将告警信息发送至您指定的URL。

4. 编码约定。

4.1 安畅网络发送的消息内容均为UTF-8编码。

4.2 您完成回调过程后需向安畅网络返回结果 HTTP 200 状态,否则认为回调失败。HTTP 相应 body 内容并不关心会直接丢弃。

5. 传递参数。

5.1 URL回调通过POST方式将告警信息发送至您指定的URL。具体参数如下:

参数 类型 必含 释义
uuid string 消息唯一标示
zone string 事件发生区域,可能为空字符串
type string 事件类型,SmartEye告警消息固定type值为:smarteye
event_data string 事件内容 Json 串,根据 type 类型不同 内容可能不同
rtype string 报警对象资源类型,可能为空
create_time string 事件发生时间 UTC 格式
timestamp integer 消息发送时间戳,用于检测消息是否过期
sign string 签名

5.2 SmartEye event_data参数如下:

参数 类型 必含 释义
monitor_name string 监控项名称
monitor_type string 监控项类型:
server:服务器监控
interchanger:网络设备监控
service:服务监控
website:站点监控
host string monitor_type是server和interchanger时代表创建监控时所填IP。
monitor_type是service时代表所填host
monitor_type 是website时代表所填url
status string 消息类型:
PROBLEM:故障告警
OK:恢复告警
status_url string monitor_type 是service时是创建时所填的状态页地址,其余monitor_type时为空。
alarm_content string 告警消息内容,如:连续3次发生[内存使用率(mem.memused.percent)>=90]

6. Python验签示例代码。

    
# encoding:utf-8
"""
Python2.7 Flask0.11.1
"""
import hashlib
import hmac
import urllib
import time
import datetime
from flask import Flask
from flask import json
from flask import request
app = Flask(__name__)
# UC平台获取
secret_key = '7EYCHxuC8dXiWCozr8k0CFXuxQ1zK3Md'
@app.route('/callback', methods=['POST'])
def callback():
    callback_data = {para: str(request.form.get(para)) for para in request.form}
    # 校验参数完整性
    if callback_data.get('type', '') != 'smarteye' or not callback_data.get('sign', '') or not callback_data.get(
            'timestamp', ''):
        print '缺少必要参数'
        return 'error'
    # 校验请求是否过期,自定义延迟3分钟以上的消息丢弃
    if time.mktime(datetime.datetime.now().timetuple()) - float(callback_data.get('timestamp', 0)) > (3 * 60):
        print '消息过期'
        return 'error'
    # 获取原始签名,并从callback_data移除
    source_sign = callback_data.pop('sign')
    # 所有字段升序排列
    callback_data_sorted = sorted(callback_data.iteritems(), key=lambda d: d[0], reverse=False)
    # python2.7 urlencode 使用的是RFC 2396 规范
    # 拼接 URL query string 字符串 (RFC3986 规范)
    sign_str = urllib.urlencode(callback_data_sorted).replace('+', '%20')
    # 对sign_str 进行 sha1 签名
    sign = hmac.new(secret_key, sign_str, hashlib.sha1).hexdigest()
    if sign == source_sign:
        print '验证成功'
        event_data = callback_data.get('event_data')
        # 转换JSON,具体参数详见文档
        event_data_json = json.loads(event_data)
        print event_data_json.get('alarm_content')
        # todo add your code
    else:
        print '验证失败'
    return 'ok'
if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5679, threaded=True, debug=True)
    

温馨提示

反馈会在1个工作日内与您联系(工作时间:周一至周五,9:00-17:30)。紧急问题建议您拨打400-720-7200或提交工单,谢谢!