本文介紹使用自定義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" }
如何選擇網絡
日志服務告警中的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反向代理,則您可以在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 YWRtaW46Zm9vYmFy
Header。具體操作,請參見Webhook-自定義。