SLS新版本告警入门——告警策略-路由合并(1)

路由合并概述

SLS的告警策略包含三种子策略:

  • 路由合并
  • 抑制
  • 静默


其中最重要的就是路由合并策略。简而言之,路由合并的作用就是:告警经过一定的规则,合并成不同的合并集合,统一进行通知的发送。它的最大的优点就是可以进行告警的降噪,由于是合并后统一发送,因此可以有效避免告警风暴的产生。


可以参考如下的简单示例:

SLS新版本告警入门——告警策略-路由合并(1)

一共产生了四个告警,它们经过路由合并之后,变成了三个合并集合,其中Alert-1和Alert-3在一起,会被一起发送通知。当然这只是一个非常简单的示意,可以简单理解为这里根据的是不同的颜色进行了合并。在实际的使用场景中,可以根据告警自身的多种属性进行策略的配置,例如把相同严重度的告警合并在一起,或者把同一个Project产生的告警放在一起,等等。在了解了路由合并的基本作用之后,接下来我们来看路由合并的一些详细使用。

告警指纹

在对路由合并进行深入的了解之前,我们需要先来认识一下告警的指纹。简单来说,每个告警都需要有一个唯一的身份证号,需要我们来识别它。

SLS新版本告警入门——告警策略-路由合并(1)

例如 08:00 产生了一条告警,说的是 192.168.1.100 这台机器 CPU 使用率过高,达到了 90%;然后再 08:05 继续产生了一条告警,说 192.168.1.100 这台机器 CPU 使用率过高,达到了 95%。在这个例子中,我们可以看到,这两个触发的告警描述的其实是同一件事情,本质上它们其实是同一个告警,只不过是在连续的两个周期都触发了而已。就好像某个人昨天穿了白色的衣服出门,今天穿了黑色的衣服出门,虽然看起来有稍许区别,但其实还是同一个人。


对于告警来说,也有这样的一个唯一标识,不管它在什么时候触发,我们都可以通过该标识来知道,它描述的某一个确切的事情。我们可以称之为告警的指纹。如果两个告警的指纹完全相同,那么它们就是同一个告警的两次出现。


告警指纹的计算依赖于告警的如下属性:

  • 用户ID:阿里云账号UID
  • Project:告警监控规则所在的项目
  • 告警规则ID
  • 告警标签(key-value 结构)


一句话概括就是:如果两条告警属于同一用户在同一个Project下创建的同一条告警监控规则,并且它们的标签相同,那么就是同一个告警。


关于告警的标签,是在配置监控规则的时候设置的。

SLS新版本告警入门——告警策略-路由合并(1)

  • 分组评估:
    • 不分组:则默认没有标签
    • 标签自动:仅对时序库有效,自动将时序指标的所有标签作为告警的标签
    • 标签自定义:需要用户自己配置分组的标签,例如 * | select host, count(*) as cnt group by host 这样的查询语句,结果里会有 host 和 cnt 两个字段,假如用户配置了按照 host 进行分组,那么告警里就会有 host 这个标签
  • 如果开启了无数据告警,那么还会有一个特殊的标签 __no_data__
  • 此外用户还可以自己添加标签,例如自己添加 app: nginx 类似的固定标签

基于告警指纹的降噪

假如同一个告警一直在触发,那么在告警管理的流程中,只会保留最新的那一次触发。也就是说,每个告警集合会根据告警的指纹进行去重,仅保留最新版本。

SLS新版本告警入门——告警策略-路由合并(1)

例如:某台主机从 20:00 开始每分钟不停地触发高CPU告警,告警策略按照配置来进行发送。那么在首次触发后,后续重复的告警都会去重并且延迟(因为配置了重复等待)发送。

合并集合

上面我们解释了告警指纹及其去重机制,接下来介绍一下合并集合。合并集合简单来说就是一个告警的容器,是一个批量处理单元。所有在该容器内的告警都会进行统一的发送通知。


合并集合有如下属性:

  • 合并基准
  • 行动策略
  • 首次等待时间
  • 变化等待时间
  • 重复等待时间


这几个属性解决了如下问题:

  • 为什么告警会在一起:合并基准
  • 要发送给谁:行动策略
  • 如何发送:首次等待、变化等待、重复等待


我们可以配置告警策略的路由合并基准,将告警归类自动分派到多个合并集合中,并进一步的降噪控制(去重、合并等)后,将合并的告警分别发送给相应的行动策略。

SLS新版本告警入门——告警策略-路由合并(1)


例如上面的例子,通过合并基准的配置,将十个告警分到了六个合并集合中,并且会使用各自的行动策略来进行通知的发送。

使用告警策略进行数据隔离

通常来说,如果两个合并集合的五个属性完全相同,那么它们本质上就是同一个合并集合。但是这有个前提,就是需要这两个合并集合是由同一个告警策略产生的。

也就是说,告警策略相当于是提供了一个命名空间的作用。如果两个告警使用了不同的告警策略,那么即使最终它们所在的合并集合各个属性都相同,但它们也是不同的合并集合。


因此可以使用告警策略来进行告警数据的隔离。例如不同的团队使用不同的告警策略,那么这两个团队的告警数据肯定不会混在一起,每个团队只需要关注自己的告警策略配置即可。


最后,如果您还想了解更多智能运维前沿资讯,欢迎您报名参加【数智创新行·智能运维专场】。

6月25日|上海·西岸国际人工智能中心

数智创新行上海站·智能运维专场

阿里云将带来云原生智能运维解决方案,满足海量事件有效感知、高效响应,可观测数据统一分析、故障定位,以及基于AI的异常检测等需求,助力企业构建自己的运维平台,成为开发、运维人员高效可靠的助手。

扫描海报二维码或点击下方链接报名, 期待您一起开启智能运维新时代!

https://www.aliyun.com/page-source//developer/special/osssalon

SLS新版本告警入门——告警策略-路由合并(1)

上一篇:SLS告警最佳实践——在通知中引用日志内容


下一篇:IDEA中用好Lombok,撸码效率至少提升5倍