什么是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 参数是否已经在您的存储(您处理过的消息)中即可判断是否为非法重复请求。