什麼是URL Callback

URL Callback,是告警訊息的一種通知方式。透過監控專家URL Callback,您可以讓告警通知發送到您指定的URL,使您能更加靈活處理告警訊息。

目前我們對網站監控、伺服器效能監控和服務效能監控提供URL Callback功能,以後將開放更多監控類型的URL Callback功能。

URL Callback通知方式最大的特點是用戶可以發揮自己的想像,靈活地處理各種告警訊息。與普通告警方式相,URL Callback通知方式具有如下表所示的特點。

對比項

普通告警方式

URL Callback方式

選擇類型

可以

可以

選擇項目

可以

可以

選擇告警訊息類型

不可以

可以

選擇告警指標

不可以

可以

告警接收途徑

簡訊、郵件

簡訊、郵件、電話語音、app、網頁外掛程式等無限種可能

告警處理方法

人工

人工、智能程序


設定URL Callback

設定CallbackURL、Callbacktoken、Callback方式後,監控專家就會透過設定的Callback方式向指定的URL發送告警訊息。

CallbackURL

輸入您指定的CallbackURL,即透過外網能訪問到的URL。點擊<獲取模擬Callback位址>按鈕,您可以即時查看模擬的CallbackURL。

Callbacktoken

Callbacktoken用來驗證您收到的訊息是否由監控專家發出。點擊<更換一個>按鈕可更換Callbacktoken,同時您需要更換Callback程序中的校驗Token。

Callback方式

URL Callback透過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和您的Callbacktoken 這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和您的Callbacktoken 這4個參數連接並用MD5演算法加密後的值來校驗訊息。

message_detail

json串。

約定說明

監控專家發起的請求中訊息內容都為UTF-8編碼,監控專家會對URL Callback結果進行記錄,要求您返回的正文內容為UTF-8編碼並且不超過100個字元。


URL Callback應用場景

場景描述

有很多人都在使用 DNSPod 的域名解析服務,如果您有多個伺服器,發現某個伺服器出現問題時可能需要登入到DNSPod的系統上,然後從DNS解析中摘除這臺機器。如果是深夜出現這樣的情況,恐怕你這晚的美夢就要被打擾了!往往這種不確定的情況都會讓維運或者開發人員感到非常心煩。

使用URL Callback

現在監控專家支援URL Callback功能,開發人員可以使用URL Callback結合DNSPod開放的API服務,自動進行故障轉移。監控專家能在第一時間監測到哪個伺服器出現問題,然後將告警訊息URL Callback到您的程序,您的程序完全可以透過DNSPod的API去移除有問題伺服器。這樣,您就不必半夜起來打開電腦修改DNS記錄了。


URL Callback實例

以PHP語言為例,以下是監控專家發起的GET方式URL Callback請求:

https://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   = '您自己的Callbacktoken';
//如果校驗成功,則說明此訊息為監控專家系統發出,否則為非法請求,不予處理
if (md5($msg_id . $task_id . $fault_time . $url_token) == $token) {
    ..........
}

以下是監控專家發起的POST方式URL Callback請求:

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   = '您自己的Callbacktoken';
//如果校驗成功,則說明此訊息為監控專家系統發出,否則為非法請求,不予處理
if (md5($msg_id . $task_id . $fault_time . $url_token) == $token) {
    ..........
}

為了防止訊息被非法重覆請求您的CallbackURL,您可以透過驗證具有唯一性的 msg_id 參數是否已經在您的儲存(您處理過的訊息)中即可判斷是否為非法重覆請求。