查看原文
其他

SLS 智能告警平台最新技术总结

寂之 云布道师 2023-06-18

凌云时刻

本文主要讲述过去一年内可观测平台 SLS 的改进和迭代。

SLS 作为一站式的可观测平台,提供了对 Log、Metric、Trace 等数据的完整支持,包括数据存储、查询分析、ETL、可视化、监控告警等能力。随着企业业务的不断发展,线上服务以及它们所产生的的可观测数据也会越来越多,越来越复杂,如何从这些海量的异构数据中快速发现有价值的信息,进而赋能运维与运营人员,是一个比较大的挑战。

在这个过程中,可能面临的挑战有:

  • 多套系统重复建设,维护成本高难度大

  • 数据孤岛化,异构数据的协同监控比较困难,不得不做各种数据处理

  • 大量的重复告警无法收敛,用户心态已经麻痹

  • 通知渠道与通知内容形式相对比较单薄,需要进一步去排查和发现问题,影响处理效率

  • 动态分派、人员值班等能力弱,导致工作负载不均衡,影响工作效率

  • ……

为了解决这些问题,我们在 SLS 原有的监控告警能力基础上,进一步做了非常多重大的功能与体验升级,致力于将 SLS 打造成一站式的智能运维平台,从而帮助企业与用户解决以上诸多痛点。之前已经有多篇文章对此作了较为完整的介绍,可参考附1、附2

在过去的一年,我们在功能性、易用性、集成度等方面做了大幅改进和优化,致力于满足不同需求层次的客户诉求,让智能告警触手可及。

架构大图

整体上,SLS 智能告警系统主要分为以下几个组成部分:

  • 告警监控:依托于 SLS 本身强大的存储和查询分析能力,我们可以支持海量数据的实时查询分析、异构数据的协同分析、跨账号跨地域的协同监控等能力;

  • 告警管理:提供了多种告警降噪能力,包括去重、合并、抑制、静默等;

  • 行动管理:对接了十多种通知渠道,可以快速配置使用,并且提供了非常灵活且强大的动态分派能力;

  • 开放告警:对于数据并未接入 SLS 的用户,可以通过开放告警的能力,将自建系统或其它云产品的告警接入 SLS 告警管理系统,从而快速使用 SLS 的告警管理与行动管理能力。

功能演进概述

在过去的一年,主要从以下两个维度做了功能演进:

  • 从点到线:每个独立模块都做了功能增强与优化,例如对于告警监控继承了独享 SQL,丰富了内置规则库等;对于告警管理实现了算法降噪等;通知管理部分新增了多个通知渠道,实现了与外部 CMDB 系统的对接,增强了移动端的通知查看体验;开放告警也丰富了多个数据源等(参考下图标注部分)

  • 从线到面:基于业务实现告警的统一管理,通过在告警管理中心应用中,进行逻辑上的业务划分,可以实现从数据到监控到告警管理的完整流程。

最新功能演进详情

 集成独享 SQL 支持海量数据监控

在需要对大量数据进行监控的时候,由于查询资源的限制,可能会导致查询不完整、查询超时等问题,从而导致监控失效。为了解决该问题,SLS 告警的监控集成了 SQL 独享版,通过开启该功能,可以支持更大数据量、更高性能的监控。

在配置监控查询分析语句的时候,可以选择是否开启 SQL 独享版,有以下三种选项:

  • 启用:始终使用 SQL 独享版去查询,该选项会产生少量的独享 SQL 费用;

  • 关闭:不使用 SQL 独享版。在数据量比较大、SQL 比较复杂的情况下,可能会导致查询不精确,从而影响监控的准确性;

  • 自动:默认不使用 SQL 独享版,当发现查询不精确或者超时失败的时候,会使用 SQL 独享版再去查询。该选项在性能和费用之间做了平衡。

 基于算法的智能合并降噪

在告警降噪过程中,我们可以通过配置适当的合并规则,将具有相似特征的告警合并到同一个分组中,实现批量的通知。例如可以设置将相同应用的告警进行合并,从而避免同一个应用的多个告警频繁触发通知。

但是在有些场景下,并没有非常明确的预设规则可以用来进行合并。基于这些场景,我们提供了智能合并模式。SLS 告警智能合并依托于 NLP 算法,自动化地去学习告警之间的关联或相似关系,在不依赖于历史告警数据的前提下(冷启动),可以实时地对不同来源的告警进行智能合并,然后再通知给用户,让用户免于告警风暴的困扰。关于智能合并更详细的介绍,可以参考附3。

 通知渠道扩展

通知渠道方面,在已有的短信、语音、邮件、钉钉、自定义 Webhook 等基础上,新增了企业微信、飞书、Slack、函数计算、事件总线等通知渠道。

另外对于钉钉、企业微信、飞书、Slack、自定义 Webhook 等这些 Webhook 类型的通知渠道,提供了 Webhook 集成的功能,从而可以配置一次多处复用。在通知内容上,也对这些通知渠道做了包装,因此用户无需感知不同通知渠道的数据协议,只需要关注于自己希望看到的通知内容即可。

除了短信、钉钉这样的通知渠道,还可以对接函数计算来实现一些自动化的响应。即在告警触发后,无需人工干预,可以使用设定好的规则自动去处理故障,让故障的处理变得更加自动化和高效。详细使用案例可以参考附4。

 内容模板增强

由于告警通知支持多个渠道,每个渠道都有各自的内容格式,比如邮件支持 HTML,钉钉等 IM 渠道支持 Markdown,因此同样的通知内容,在不同渠道中,需要使用不同的样式。另外对于具体的通知内容,可能需要根据不同的条件来展示不同的内容(例如告警触发的时候显示原始日志,恢复的时候无需展示);或者需要通过循环的方式,来遍历触发的日志内容,进行格式化的呈现。

基于这样动态渲染以及更丰富样式的诉求,我们在原有内容模板语法的基础上做了大幅改进,从而升级到了新版的模板语法。新版模板语法主要有以下特点:

  • 内容和样式分离,因此在不同的通知渠道中定制不同的样式就变得比较简单

  • 支持 if、for 循环等多种结构,从而可实现动态渲染

  • 提供了 50+ 内置函数对数据进行处理,例如时间格式化、JSON 解析、字符串处理、数学计算等

例如同样的一条告警,使用新的模板语法,可以实现更好看的样式,从而让内容呈现更加直观。更多详细介绍,可以参考附5。

旧模板通知

新模板通知

 对接企业 CMDB 实现动态接收人

SLS 告警管理中,行动策略天然地支持动态分派的能力,例如将测试环境的告警发送给某个接收人,生产环境的告警通过短信发送给另一个接收人:

但是这对于某些特定场景,还是不太方便,例如:

  • 用户信息并没有导入到 SLS 中,而是在企业自建的用户管理系统中(例如 LDAP、AD 等)进行维护

  • 动态分派的条件比较复杂,且条件判断可能非常多,例如几十个上百个条件分支,配置复杂且不方便维护

在这种情况下,SLS 告警提供了动态接收人的方式,用户只需要提供一个 Webhook 服务,用于处理用户信息的对接以及告警通知的分派,无需将大量的用户信息导入 SLS 或配置大量的条件分支。

通过这种方式,可以灵活地与各种企业自建的 CMDB 系统进行对接,包括已有的用户信息管理、通知分派、值班等逻辑,都可以与 SLS 告警系统无缝对接。更多详细介绍可以参考附6

 移动端体验增强

通常在接收到告警通知后,我们可能需要登录控制台,再去查看详细的日志以及告警信息,然后进行告警事务的处理。这就带来了一些不方便,尤其是在路上或者夜里的时候,不仅需要开电脑,还需要登录才能操作。为了增强移动端的体验,我们提供了免登陆查看告警详情的功能。在接收到告警之后,通过免登陆链接在手机上直接点击,无需登录即可查看告警详情、查看触发日志、进行事务处理等操作。更多介绍可参考附7。

 基于业务的告警统一管理

默认情况下,告警是在某个 Project 下进行管理的,也就是说,告警和数据相关联。但是在实际的一些使用场景中,我们可能希望能够根据业务单元为粒度,统一进行告警的管理以及态势的统计分析。因此我们提供了告警管理中心 APP,以业务为中心进行告警的统一管理,每个业务都包含从资源层到事务管理的完整链路。

在告警管理中心 APP 中,我们可以基于这样的业务划分,实现告警通知的统一管理、基于业务的告警态势查看与管理事务等功能。更多详细内容可以参考附8。

 开箱即用:云产品/APP 集成

了让其它云产品或者 SLS 日志应用能够快速启用告警,方便对相关资源进行监控,我们提供了大量的内置监控规则,并提供了一键开启告警的能力。覆盖了多个云产品以及 SLS 自身的功能监控等多个方面。通过这些内置的监控规则,用户甚至无需去理解日志数据的各个字段的详细语义,就可以实现对相关数据的监控,很大程度上降低了复杂数据的监控使用门槛。

目前已经集成的云产品包括容器服务 ACK、服务网格 ASM、操作审计等。以及 SLS 的日志应用,例如 k8s 事件中心、成本管家、日志审计、全栈监控 Cloud Lens for OSS  等十多个应用。

 兼容并包:开放告警

除了将数据接入到 SLS 进行监控之外,对于一些用户已有的监控系统产生的告警,或者多云场景下的告警,也可以通过开放告警的方式统一接入到 SLS 告警管理平台,进行统一的告警管理。目前开放告警累计支持了 Prometheus、AlertManager、Grafana、Zabbix、DataDog、Loki、AWS CloudWatch、New Relic、华为云云监控等十多个监控源,从而可以将 SLS 作为统一的告警管理中心来对各个不同系统的告警进行管理。

 自动化资源编排

随着 Infrastructure as Code 的理念发展,越来越多的企业在使用 Terraform 来进行云资源的管理编排。SLS 告警提供了对 Terraform 的支持,从而方便集成到企业的自动化流程中。另外也提供了完整的 SDK ,以方便批量自动化对告警规则及相关资源进行管理,相关信息可以参考附9、附10

总结与思考

综合来说,过去的一年中我们主要在功能完整性、生态、易用性等方面做了比较大的演进。但整体上来说,依然存在着一些不足:

  • 功能强大带来的是使用门槛的提高,首次上手的难度依然有待改进;

  • 生态开放上有待继续完善,需要更灵活的对接形式,以方便用户按照自身需求做二次开发,避免陷入纯粹的需求驱动的误区;

  • 告警通知后的事务管理,与钉钉等工具的协作依然需要不断演进,完善使用场景,形成操作闭环。

接下来的研发过程中,SLS 一站式智能告警运维系统会努力变得更加好用易用,进一步帮助用户更高效地挖掘潜在的数据价值。

 参考文档

附1:一站式云原生智能告警运维平台——SLS 新版告警发布!

https://developer.aliyun.com/article/783352

附2:这才是可观测告警运维平台——20 个 SLS 告警运维场景

https://developer.aliyun.com/article/783354

附3:抑制告警风暴—SLS 告警智能合并发布

https://developer.aliyun.com/article/835401

附4:SLS 告警响应升级——通知对接 FC 进行自动化操作

https://developer.aliyun.com/article/832394

附5:SLS 告警重磅更新——让你的告警通知一目了然

https://developer.aliyun.com/article/793786

附6:设置动态接收人

https://help.aliyun.com/document_detail/415360.html

附7:免登录查看告警详情

https://help.aliyun.com/document_detail/346631.html

附8:告警管理中心概述

https://help.aliyun.com/document_detail/393361.html

附9:使用 Terraform 玩转 SLS 告警

https://developer.aliyun.com/article/880380

附10:如何使用 SDK 管理告警

https://help.aliyun.com/document_detail/387421.html

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存