本文介绍使用自定义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白名单或设置HTTP Header的方式来进行权限校验。
- 为您的Webhook服务设置访问IP白名单。IP地址为120.76.47.88、119.23.150.175。
- 通过设置HTTP Header的方式来进行权限校验。
- 使用自定义Token:在Header中添加
Authorization: Bearer token
,其中token需替换为您自定义的Token。 - 使用Basic Auth:在Header中添加
Authorization: Basic $(base64_encode(username:password))
,其中username、password需替换为实际的用户名和密码。
- 使用自定义Token:在Header中添加
例如您的Webhook服务使用了Nginx反向代理,则您可以在Nginx中设置Basic Auth,从而实现访问权限校验。