本文介紹使用自訂Webhook的常見問題。
如何設定內容範本
當通過自訂Webhook進行警示通知時,建議設定通知內容為JSON格式,即最終渲染的內容需為合法的JSON格式。
例如為如下的警示訊息配置內容範本,由於alert.annotations.message欄位值中包含雙引號(""),因此您在內容範本中直接使用{{ alert.annotations.message }},會導致渲染結果不是合法的JSON,從而導致發送警示通知失敗。
您需要使用內建模板函數quote(value)對資料進行引用,避免因為特殊字元導致JSON格式異常。
警示訊息樣本
{ "project": "test-alert", "region": "cn-hangzhou", "labels": { "service": "signin", "env": "prod" }, "annotations": { "message": "user \"xxx\" signin failed, error is: userNotFound" } }內容範本樣本
{ "project": "{{ alert.project }}", "service": "{{ alert.labels.service }}", "message": {{ alert.annotations.message | quote }} }渲染結果樣本
{ "project": "test-alert", "service": "signin", "message": "user \"xxx\" signin failed, error is: userNotFound" }
如何選擇網路
Log Service警示中的Webhook通知僅支援公網訪問。如果是內部系統,且不希望對外開啟訪問功能時,可以通過公網代理方式解決。參考架構如下圖所示。
如何設定存取權限校正
您可以通過設定IP白名單或設定HTTPHeader的方式來進行許可權校正。
為您的Webhook服務設定訪問IP白名單。IP地址為120.76.47.88、119.23.150.175。
通過設定HTTPHeader的方式來進行許可權校正。
使用自訂Token:在Header中添加
Authorization: Bearer token,其中token需替換為您自訂的Token。使用Basic Auth:在Header中添加
Authorization: Basic $(base64_encode(username:password)),其中username、password需替換為實際的使用者名稱和密碼。
例如您的Webhook服務使用了Nginx反向 Proxy,則您可以在Nginx中設定Basic Auth,從而實現存取權限校正。
在Nginx中設定Basic Auth。
在密碼檔案中添加使用者。
重要如果不存在conf/passwd檔案,需先手動建立。
例如使用者名稱為admin,密碼為foobar。
htpasswd -b conf/passwd admin foobar在Nginx中添加auth_basic和auth_basic_user_file配置,開啟Basic Auth。
location / { auth_basic on; auth_basic_user_file conf/passwd; root html; index index.html index.htm; }重啟Nginx。
在行動策略中設定自訂Webhook。
echo -n admin:foobar | base64的結果為YWRtaW46Zm9vYmFy,因此在設定自訂Webhook時,您可以直接使用Authorization: Basic YWRtaW46Zm9vYmFyHeader。具體操作,請參見Webhook-自訂。