SLS告警最佳实践——Webhook通知最佳实践

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: SLS告警通知对接了常用的各种 IM 系统,例如钉钉、企业微信、飞书、Slack。SLS对这些系统的 Webhook 进行了包装,用户无需关心各个通知渠道的具体消息格式,只需要配置希望通知的内容即可。除此之外,还有其它的一些场景,需要使用通用Webhook(自定义 Webhook),本文主要介绍通用 Webhook 使用过程中常见的一些问题和最佳实践。

SLS告警通知对接了常用的各种 IM 系统,例如钉钉、企业微信、飞书、Slack。SLS对这些系统的 Webhook 进行了包装,用户无需关心各个通知渠道的具体消息格式,只需要配置希望通知的内容即可。

除此之外,还有其它的一些场景,需要使用通用Webhook(自定义 Webhook),本文主要介绍通用 Webhook 使用过程中常见的一些问题和最佳实践。

Webhook请求

Webhook 调用本质上就是一次 HTTP 请求调用,SLS告警支持 GET、POST、PUT、DELETE 等多种方法。但是从应用广泛性上来讲,建议如下:

  • 如无特殊必要,建议使用 POST 方法,因为该方法在各个 Web 框架中支持程度最好
  • 请求体建议一律使用 JSON 格式,默认情况下也会加上 Content-Type: application/json这个 header
  • Webhook 处理正常的话返回值需要返回 200,不然会认为请求失败,有可能重复调用

内容模板

上文提到,Webhook的通知内容建议是JSON格式,因此在配置内容模板的时候需要注意,最后的渲染内容需要是合法的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 }}"}

那么最终渲染的结果是:

{
"project": "test-alert",
"service": "signin",
"message": "user "xxx" signin failed, error is: userNotFound"}

由于 alert.annotations.message 本身包含双引号,因此会导致最终的渲染结果不是合法JSON,从而导致发送失败。

在此情况下,可以使用内置模板函数 quote 来对数据进行引用,从而避免特殊字符导致的 JSON 格式异常,例如模板配置如下:

{
"project": "{{ alert.project }}",
"service": "{{ alert.labels.service }}",
"message": {{ alert.annotations.message|quote }}
}

那么最终渲染的结果就是合法的 JSON,内容如下:

{
"project": "test-alert",
"service": "signin",
"message": "user \"xxx\" signin failed, error is: userNotFound"}

网络问题

告警的Webhook通知仅支持公网访问,因此某些场景下,如果为内部系统,不希望对外开启访问的时候,可以通过一个公网代理的方式来解决。架构参考如下:

Untitled Diagram.png

IP 白名单

告警的 Webhook 通知使用的是动态代理,因此不固定 IP 地址,无法通过配置 IP 白名单的方式限制访问。此时建议通过 HTTP Header 校验的方式来避免被恶意调用。例如:

  • 自定义 Token:Header 添加 Authorization: Bearer xxxxx,其中 xxxxx 为自定义 Token
  • 使用 BasicAuth,Header 添加 Authorization: Basic $(base64_encode({username}:{password}))

下面示例为 Nginx 的 BasicAuth 配置,作为参考:

  • 在密码文件中添加用户,用户名为 admin,密码为 foobar。

注意:如果没有 conf/passwd 文件,可以先手动创建

htpasswd -b conf/passwd admin foobar

  • 配置 Nginx,添加 auth_basic 和 auth_basic_user_file 配置,开启 BasicAuth。
location / {
    auth_basic  on;
    auth_basic_user_file  conf/passwd;
    root   html;
    index  index.html index.htm;
}
  • 重启 Nginx 或者重新加载 Nginx 配置。


由于 echo -n admin:foobar | base64结果为 YWRtaW46Zm9vYmFy,因此在配置 Webhook 的时候,添加自定义 Header Authorization: Basic YWRtaW46Zm9vYmFy即可。


进一步参考

更多相关信息,可以参考:

对我们工作感兴趣的,可以通过如下方式了解更多,谢谢关注!

进一步参考

更多相关信息,可以参考:

对我们工作感兴趣的,可以通过如下方式了解更多,谢谢关注!

1624537055188-0b4cb237-52d3-4ac9-875d-1f8714e21d08.png

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
存储 数据采集 监控
无数据告警最佳实践
在对SLS的Logstore和Metricstore进行监控的过程中,有时候会出现一些无数据的情况,监控SLS的存储库中无数据的情况,是保证数据成功上传到SLS的一个重要手段,本文将介绍无数据告警的常见配置方法。
477 0
无数据告警最佳实践
|
8月前
|
存储 数据采集 监控
【最佳实践】无数据告警配置
背景在对SLS的Logstore和Metricstore进行监控的过程中,有时候会出现一些无数据的情况,例如数据采集阶段出现故障Logtail采集异常、数据导入任务异常或者SDK写入数据出错等情况都有可能导致日志库中没有数据。业务系统出现问题例如用户的业务日志中有某个系统模块的日志,在一段时间内,由...
178 0
【最佳实践】无数据告警配置
|
存储 监控 索引
SLS告警最佳实践——自定义分析告警历史
在SLS告警评估、触发到通知的整个生命周期过程中,都会有一些日志记录,通过这些日志我们可以借助告警对系统的整体健康状况、稳定性等有一个相对全面的了解。
569 0
|
JSON 监控 应用服务中间件
SLS告警最佳实践——Webhook通知最佳实践
SLS告警通知对接了常用的各种 IM 系统,例如钉钉、企业微信、飞书、Slack。SLS对这些系统的 Webhook 进行了包装,用户无需关心各个通知渠道的具体消息格式,只需要配置希望通知的内容即可。 除此之外,还有其它的一些场景,需要使用通用Webhook(自定义 Webhook),本文主要介绍通用 Webhook 使用过程中常见的一些问题和最佳实践。
747 0
|
存储 Prometheus 运维
顺滑迁移Prometheus告警到SLS告警
Prometheus作为一个开源的云原生监控系统,具有很广泛的应用场景,通过各种Exporter收集各类设备,应用的指标,将各类指标抽象为时序数据,在Prometheus上可以使用PromQL进行高效的指标查询和分析。SLS告警是云上的一站式告警监控运维平台,支持各种Ops场景。SLS告警系统主要包括指标采集,监控系统,告警管理,通知管理等子系统。本文介绍如何将Prometheus告警无缝转换为SLS告警,并使用SLS告警的管理功能。
822 0
|
存储 运维 Kubernetes
SLS告警最佳实践—— K8s事件中心告警管理
K8S事件中心是SLS的日志应用之一,主要记录了集群的状态变更,包括创建Pod、运行Pod、删除Pod、组件异常等。K8S事件中心实时收集K8S中的所有事件并提供存储、查询、分析、可视化与告警能力。K8s事件中心默认也会提供仪表盘和告警,本文主要介绍下如何在ACK控制台和SLS控制台管理K8s事件中心的告警及其区别和使用场景。
1220 0
SLS告警最佳实践—— K8s事件中心告警管理
|
弹性计算 Prometheus 监控
最佳实践:基于SLS实现统一告警
告警对于企业的开发运维,安全运维,业务运维有着至关重要的作用。然而很多企业在告警运维方面存在着重复建设、监控质量差、告警风暴、触达不人性化、无法闭环等问题。
最佳实践:基于SLS实现统一告警
|
JSON 应用服务中间件 数据处理
SLS告警最佳实践——在通知中引用日志内容
在配置告警通知的时候,通常我们需要知道告警的触发详情。例如Nginx访问错误告警,我们需要知道错误的HTTP Status 分布,错误的机器IP等信息,并且需要将这些信息体现在通知中,以便在接收到告警通知后,能够一目了然地知道发生了什么事情。那么在创建告警规则的时候,我们就需要进行合理的配置,使得告警在触发后,可以将这些信息放在合适的位置发送给通知服务,从而在通知模板里可以被引用到,从而被正确地通知。
514 0
|
运维 监控 安全
SLS告警响应升级——通知对接FC进行自动化操作
阿里云SLS告警响应升级,通知渠道新增了对函数计算的支持,从而可以在告警触发的时候进行一定的自动化响应操作,以便进行故障自愈,减轻手动运维压力,提高系统的可用性。
368 0
|
机器学习/深度学习 监控 物联网
DataDog告警数据还能这么用-接入SLS开放告警
DataDog是一个用于云上应用的监控和分析平台,可以自动采集和分析日志、指标和链路追踪等数据,还可以用于基础设施和云服务的事件监控,对于服务器、应用程序以及采集到的各种数据提供了很好的可观测效果。但是DadaDog对于告警通知的管理功能比较缺乏,例如不支持短信、语音等通知渠道,也不支持用户组和值班组管理,还不具备动态发送告警通知的功能,因此不能覆盖用户的部分使用场景。SLS的告警功能很好地弥补了DataDog的这些不足之处,通过SLS提供的开放告警功能,用户也可以将DataDog的告警消息接入到SLS进行统一管理。本文将介绍如何快速创建DataDog的告警并将其告警消息接入到SLS中。
1150 0