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

本文涉及的产品
对象存储 OSS,20GB 3个月
云备份 Cloud Backup,100GB 3个月
阿里云盘企业版 CDE,企业版用户数5人 500GB空间
简介: 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通知仅支持公网访问,因此某些场景下,如果为内部系统,不希望对外开启访问的时候,可以通过一个公网代理的方式来解决。架构参考如下:

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日志并进行多维度分析。
目录
相关文章
|
10天前
|
开发者 Python
基于Python的日志管理与最佳实践
日志是开发和调试过程中的重要工具,然而,如何高效地管理和利用日志常常被忽略。本文通过Python中的logging模块,探讨如何使用日志来进行调试、分析与问题排查,并提出了一些实际应用中的优化建议和最佳实践。
|
25天前
|
JSON Java fastjson
Java日志通关(五) - 最佳实践
作者日常在与其他同学合作时,经常发现不合理的日志配置以及五花八门的日志记录方式,后续作者打算在团队内做一次Java日志的分享,本文是整理出的系列文章第五篇。
|
19天前
|
SQL 数据库 Java
Hibernate 日志记录竟藏着这些秘密?快来一探究竟,解锁调试与监控最佳实践
【8月更文挑战第31天】在软件开发中,日志记录对调试和监控至关重要。使用持久化框架 Hibernate 时,合理配置日志可帮助理解其内部机制并优化性能。首先,需选择合适的日志框架,如 Log4j 或 Logback,并配置日志级别;理解 Hibernate 的多级日志,如 DEBUG 和 ERROR,以适应不同开发阶段需求;利用 Hibernate 统计功能监测数据库交互情况;记录自定义日志以跟踪业务逻辑;定期审查和清理日志避免占用过多磁盘空间。综上,有效日志记录能显著提升 Hibernate 应用的性能和稳定性。
28 0
|
22天前
|
消息中间件 Prometheus 监控
Producer的监控与日志记录最佳实践
【8月更文第29天】在分布式系统中,消息队列作为关键组件之一,其稳定性和性能至关重要。生产者(Producer)负责生成并发送消息到消息队列中,因此确保生产者的健康运行是非常重要的。本文将探讨如何为生产者设置监控和日志记录,以跟踪其健康状况和性能指标。
24 0
|
2月前
|
存储 分布式计算 监控
日志数据投递到MaxCompute最佳实践
日志服务采集到日志后,有时需要将日志投递至MaxCompute的表中进行存储与分析。本文主要向用户介绍将数据投递到MaxCompute完整流程,方便用户快速实现数据投递至MaxCompute。
158 2
|
3月前
|
运维 监控 Java
系统日志规范及最佳实践
系统日志规范及最佳实践
185 1
系统日志规范及最佳实践
|
3月前
|
监控 Java API
【Spring Boot】深入解密Spring Boot日志:最佳实践与策略解析
【Spring Boot】深入解密Spring Boot日志:最佳实践与策略解析
76 1
|
3月前
|
运维 Serverless API
Serverless 应用引擎产品使用合集之sls日志告警调用函数计算,出现抛出的结果异常,是什么原因
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
3月前
|
存储 运维 Serverless
函数计算产品使用问题之日志告警不生效,一般是由于什么造成的
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
3月前
|
存储 运维 监控
Spring Boot中的日志管理最佳实践
Spring Boot中的日志管理最佳实践

热门文章

最新文章

相关产品

  • 日志服务