什么是URL回调

URL回调,是告警消息的一种通知方式。通过监控宝URL回调,您可以让告警通知发送到您指定的URL,使您能更加灵活处理告警消息。

目前我们对网站监控、服务器性能监控和服务性能监控提供URL回调功能,以后将开放更多监控类型的URL回调功能。

URL回调通知方式最大的特点是用户可以发挥自己的想象,灵活地处理各种告警消息。与普通告警方式相比,URL回调通知方式具有如下表所示的特点。

对比项

普通告警方式

URL回调方式

选择类型

可以

可以

选择项目

可以

可以

选择告警消息类型

不可以

可以

选择告警指标

不可以

可以

告警接收途径

短信、邮件、电话语音

短信、邮件、电话语音、app、网页插件等无限种可能

告警处理方法

人工

人工、程序智能


设置URL回调

设置回调URL、回调token、回调方式后,监控宝就会通过设定的回调方式向指定的URL发送告警消息。

回调URL

输入您指定的回调URL,即通过公网能访问到的URL。点击<获取模拟回调地址>按钮,您可以实时查看模拟的回调URL。

回调token

回调token用来验证您收到的消息是否由监控宝发出。点击<更换一个>按钮可更换回调token,同时您需要更换回调程序中的校验Token。

回调方式

URL回调通过GET或POST方式将告警信息发送至您指定的URL,推荐使用post传递方式。

GET方式参数说明如下表所示:

参数

说明

msg_id

告警消息的ID。

task_user_id

任务的创建用户ID。

task_id

监控项目事务ID。

task_type

监控项目的类型。

fault_time

故障的发生时间(unix时间戳)。

task_status

监控任务的状态:1为不可用,0为恢复可用。

task_summary

监控项目的摘要。

task_name

任务名称。

server_id

服务器ID(只有服务器监控才有此字段)。

content

告警消息的内容,对内容进行了urlencode,需要urldecode得到内容。

token

使用msg_id、task_id、fault_time和您的回调token 这4个参数连接并用MD5算法加密后的值来校验消息。

POST方式参数说明如下表所示:

参数

说明

msg_id

告警消息的ID。

task_user_id

任务的创建用户ID。

task_id

监控项目的ID。

task_type

监控项目的类型。

fault_time

故障发生的时间(unix时间戳)。

message_type

消息状态:1为故障,2为提醒。

message_status

消息类型:1为告警,2为恢复。

task_summary

监控项目的摘要。

task_name

任务名称。

server_id

服务器ID(只有服务器监控才有此字段)。

content

告警消息内容,对内容进行了urlencode,需要urldecode得到内容。

token

使用msg_id、task_id、fault_time和您的回调token 这4个参数连接并用MD5算法加密后的值来校验消息。

message_detail

json串。

约定说明

监控宝发起的请求中消息内容都为UTF-8编码,监控宝会对URL回调结果进行记录,要求您返回的正文内容为UTF-8编码并且不超过100个字符。


URL回调应用场景

场景描述

有很多人都在使用 DNSPod 的域名解析服务,如果您有多个服务器,发现某个服务器出现问题时可能需要登录到DNSPod的系统上,然后从DNS解析中摘除这台机器。如果是深夜出现这样的情况,恐怕你这晚的美梦就要被打扰了!往往这种不确定的情况都会让运维或者开发人员感到非常心烦。

使用URL回调

现在监控宝支持URL回调功能,开发人员可以使用URL回调结合DNSPod开放的API服务,自动进行故障转移。监控宝能在第一时间监测到哪个服务器出现问题,然后将告警消息URL回调到您的程序,您的程序完全可以通过DNSPod的API去摘除问题服务器。这样,您就不必半夜起来打开电脑修改DNS记录了。


URL回调实例

以PHP语言为例,以下是监控宝发起的GET方式URL回调请求:

http://domain/callback.php?msg_id=1&task_user_id=2&task_id=2&task_type=http&fault_time=1271767302&task_status=1&
task_summary=http://domain.com&task_name=my_test&content= 
%E6%B6%88%E6%81%AF%E5%86%85%E5%AE%B9&token=3df5ed43ff3f57b3543d1d3e9c40e8d4

你在callback.php文件中接收GET参数并对消息进行校验:

$msg_id      = $_GET['msg_id'];
$task_id     = $_GET['task_id'];
$fault_time  = $_GET['fault_time'];
$token       = $_GET['token'];
$url_token   = '您自己的回调token';
//如果校验成功,则说明此消息为监控宝系统发出,否则为非法请求,不予处理
if (md5($msg_id . $task_id . $fault_time . $url_token) == $token) {
    ..........
}

以下是监控宝发起的POST方式URL回调请求:

POST http://domain/callback.php
POST: array(10) { ["msg_id"]=> string(9) "101407787" ["message_status"]=> string(1) "2" ["message_type"]=> string(1) "2" ["fault_time"]=> string(10) 
"1409803140" ["content"]=> string(144) 
"%E6%81%A2%E5%A4%8D%E5%91%8A%E8%AD%A6%E7%BA%BF%5B%E6%9C%80%E8%BF%915%E5%88%86%E9%92%9F%E5%B9%B3%E5
%9D%87%E8%B4%9F%E8%BD%BD%E5%A4%A7%E4%BA%8E+1%5D" 
["task_id"]=> string(6) "259197"["task_user_id"]=> string(1) "2" ["task_type"]=> string(4) "load" ["task_summary"]=> string(16) 
"118.144.76.75(2)"["task_name"]=> string(4) "test" ["server_id"]=> string(4) "1234" ["token"]=> string(32) 
"e156828484b1c5c151a4db7dd4f3c666" ["message_detail"]=> string(64) "{"metric":"load_average_5","compare":"gt","value":"1","unit":""}" }

你在callback.php文件中接收POST参数并对消息进行校验:

$msg_id      = $_POST['msg_id'];
$task_id     = $_POST['task_id'];
$fault_time  = $_POST['fault_time'];
$token       = $_POST['token'];
$url_token   = '您自己的回调token';
//如果校验成功,则说明此消息为监控宝系统发出,否则为非法请求,不予处理
if (md5($msg_id . $task_id . $fault_time . $url_token) == $token) {
    ..........
}

为了防止消息被非法重复请求您的回调URL,您可以通过验证具有唯一性的 msg_id 参数是否已经在您的存储(您处理过的消息)中即可判断是否为非法重复请求。