使用自定义Webhook的常见问题

本文介绍使用自定义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通知仅支持公网访问。如果是内部系统,且不希望对外开启访问功能时,可以通过公网代理方式解决。参考架构如下图所示。

image

如何设置访问权限校验

您可以通过设置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)),其中usernamepassword需替换为实际的用户名和密码。

例如您的Webhook服务使用了Nginx反向代理,则您可以在Nginx中设置Basic Auth,从而实现访问权限校验。

  1. 在Nginx中设置Basic Auth。

    1. 在密码文件中添加用户。

      重要

      如果不存在conf/passwd文件,需先手动创建。

      例如用户名为admin,密码为foobar。

      htpasswd -b conf/passwd admin foobar
    2. 在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;
      }
    3. 重启Nginx。

  2. 在行动策略中设置自定义Webhook。

    echo -n admin:foobar | base64的结果为YWRtaW46Zm9vYmFy,因此在设置自定义Webhook时,您可以直接使用Authorization: Basic YWRtaW46Zm9vYmFy Header。具体操作,请参见Webhook-自定义