通知策略最佳实践

ARMS告警管理支持通过通知策略对已经产生的告警事件进行路由、分组、压缩和聚合,然后通过短信、电话、邮箱、钉钉、企业微信、飞书、Webhook等多种方式进行通知。此外,通知策略还支持配置重复通知策略、升级策略和排班策略等,满足不同场景下的高级通知需求。

背景信息

用户通过配置告警规则或者主动推送方式产生大量告警事件后需要及时收到通知,但因为告警事件数量较多,期望的通知场景、通知方式也各不相同,同时部分用户还期望能够管理告警的生命周期。为了解决这些问题,ARMS通知策略支持按需匹配告警事件,对告警事件进行压缩、分组生成告警,然后提供多样化的方式进行通知;ARMS通知策略还支持告警关闭、屏蔽、认领等功能,帮助用户及时、准确地收到告警通知,方便快捷地查看并管理告警。

通知策略处理流程

使用通知策略的前提是已经准备好了告警事件的来源。目前ARMS告警事件有两种来源:

  • ARMS告警规则:ARMS告警管理默认集成ARMS告警规则,在ARMS控制台可以配置应用监控告警规则、前端监控告警规则、Prometheus告警规则、K8s监控告警规则和应用安全告警规则,在配置的告警规则满足触发条件后,会产生告警事件并可以被通知策略匹配到。

  • 集成:ARMS告警管理支持第三方产品的集成,ARMS支持将自建Prometheus、SLS日志服务、云监控、Grafana、Zabbix、Skywalking等产品的事件快速发送到ARMS进行管理,也支持通过自定义集成方式将事件主动上报到ARMS。在配置好集成后,来自集成的事件可以被通知策略匹配到。

在配置好告警事件来源后,通知策略对告警事件的处理流程如下图所示,分为告警事件匹配、事件处理和告警通知三部分。

image

告警事件匹配

告警事件是通知策略进行处理的基本单位,告警事件来自于ARMS告警规则或者集成,支持一些必填的基本属性和可扩容的扩展字段,字段的键值对被称为事件的Label。告警事件匹配

如上图所示,告警事件包括事件名称、事件描述、开始时间、结束时间等基本字段,也包括一些扩展字段。如果事件除基础字段之外的Label都完全相同,则会被ARMS默认压缩为一个事件。

创建通知策略时,可以按照任意Label来匹配告警事件,事件匹配规则支持通过等于、正则匹配等多种匹配规则对告警事件进行过滤。

在使用事件匹配规则匹配告警事件时,需要注意以下几点:

  • 事件匹配规则可以匹配到所有的满足条件的非静默告警事件。

  • 同一个事件匹配规则之内的多个条件是“并”的关系,同时满足的告警事件才会被匹配到。

  • 多个事件匹配规则之间是“或”的关系,满足任何一个事件匹配规则的告警事件都会被匹配到。

通过定义事件匹配规则,您可以将任何告警事件精准识别出来,并且按照需求进行通知或静默。

事件处理

满足事件匹配规则的告警事件才会被处理,您可以在配置通知策略时设置对告警事件的处理方式。

事件处理方式支持以下两种:

  • 压缩:将匹配到的告警事件压缩为一个告警或者按照分组压缩为多个告警。

    当设置事件处理方式为压缩时,可以进一步设置是否需要按照指定Label进行分组,即将事件按照指定Label进行分组后压缩为多个告警。按照Label进行分组后,每个分组有单独的告警触发、发送和恢复的生命周期,可以单独进行发送、恢复和管理。

    设置分组后,如果每个分组的告警事件连续五分钟没有新的告警事件触发,则会被认为告警事件已经恢复。当一个分组下面所有的告警事件都恢复时,告警就会恢复并且发送恢复通知。

    如果无需接收恢复通知,可以设置取消,那么在告警恢复时将不会发送恢复通知,但是事件和告警仍然会自动恢复,只是在告警恢复时不再发送恢复通知。

  • 静默:将匹配到的告警事件全部标记为静默,使其他任何通知策略无法匹配到这些事件。

    当设置告警事件处理方式为静默时,可以进一步设置静默规则生效的时间段。在这个时间段内,满足条件的告警事件都会被标记为静默事件,被标记为静默的事件无法被任何通知策略匹配到。事件处理方式设置为静默时,无需配置告警通知方式。

告警通知

当告警处理方式设置为压缩后,ARMS会将告警事件压缩为一个告警事件组或按照设置的Label分为多个告警事件组,每个告警事件组被称为告警,在通知策略里可以设置告警的通知对象和通知方式。

通知人可以选择联系人、联系人组、钉钉群、Webhook、排班策略等,通知方式选择需要接收通知的方式。

升级通知方式可以选择以下两种:

  • 重复通知:当告警在没有恢复的持续期间内,每隔一段时间就重新进行通知。

  • 升级策略:当告警在没有恢复的持续时间内,按照设置的升级策略以其他方式通知不同的对象。

示例场景

使用通知策略进行告警通知时,推荐参考以下内容配置:

  • 配置合理的告警规则或者集成,产生包含必备字段的告警事件。

  • 按照需求配置一个或者多个需要静默的通知策略,如果是长时间需要静默的事件,建议关闭对应的告警规则或者停止推送此类事件到集成。

  • 通知策略的数量原则上与不同的通知对象群体数对应,先按照不同的通知对象群体创建对应的通知策略,然后设置事件匹配规则来匹配想要发送给这个群体的事件。

  • 当使用钉钉群、企业微信或者飞书等IM工具作为告警接收平台时,推荐使用IM机器人的方式发送告警,并且使用卡片上的屏蔽、认领、解决告警等功能来快捷地在任意平台管理告警规则,并且在事后查看告警的产生数据、统计数据、解决人员和平均解决时长等信息。

下面通过三个具体场景演示通知策略的使用方式。

说明

如下三个场景是比较常见且合理使用ARMS告警管理来实现告警需求的具体场景,在具体实践中可以参考下面的一个场景或者结合多个场景实现复杂的业务场景下的通知需求。

场景一:告警发送到个人并认领、处理告警

配置告警规则并且通知到个人是比较基础且常见的一个场景。

配置告警规则

如果使用了ARMS Prometheus,可以在ARMS控制台配置基本的容器CPU告警规则和容器内存告警规则。配置告警规则1

如果使用的不是ARMS Prometheus,则可以通过集成将告警事件上报,然后在告警事件历史页面查看告警事件。集成告警事件

配置通知策略

在产生告警事件或者预期可以产生告警事件后,就可以创建通知策略来处理告警事件,从而产生告警并且发送给自己。

以上面具体的Prometheus告警规则为例,如果需要将当前集群下的告警规则产生的告警事件发送到钉钉群,需要先创建钉钉机器人,然后再创建通知策略。

通知策略设置如下:

  1. 事件匹配规则:需要将alert-dev集群名称下的两个告警规则产生的告警事件全部匹配到,并且避免匹配到其他规则的事件,所以可以设置匹配告警事件规则为:告警事件的集群名称alert-dev,且告警名称容器CPU告警-测试容器内存告警-测试

  2. 事件处理:处理方式选择压缩,因为当前匹配到的告警事件来自于两个告警规则,实际通知时如果需要两个规则的事件产生不同的告警,并且有独立的通知周期,那么可以设置事件分组的字段为集群名称告警名称,两个告警规则产生的事件将会被分到两个独立的告警中。

  3. 告警生成:通知人选择之前新建好的钉钉机器人,通知方式选择钉钉,此处设置基础的重复通知模式,设置当告警持续期间,每5分钟重复发送一次通知。

场景一通知策略

配置好通知策略后,单击保存,然后查看对应的钉钉群,即可看到对应的告警通知。

认领、处理告警

当钉钉群收到告警通知时,单击卡片上的按钮即可处理告警。第一次处理告警时,需要绑定手机号。更多信息,请参见在告警通知群中处理告警

容器CPU告警-测试

  • 认领告警:将告警状态置为已经认领,同时其他人可以看到告警已经被认领。

  • 关闭/解决告警:将告警状态置为已解决,并且填写解决方案。如果告警事件实际上仍在持续,则会产生新的同名告警。

  • 关注告警:关注告警后,可以在右侧弹框首页查看关注的告警列表。

  • 推送告警:如果关联了工单系统,可以将告警推送到工单系统。

  • 屏蔽告警:如果告警事件暂时不需要关注,可以选择屏蔽一段时间告警通知不进行发送。

  • 未解决告警:可以查看未解决告警列表。

场景二:告警发送到多个不同的业务团队

例如SRE团队可能需要配置告警规则并且根据不同的业务标签,将告警发送到不同的业务团队。

目前某公司有SRE团队、业务部门A、业务部门B、业务部门C四个团队,四个业务团队的业务应用混合部署在cluster-dev、cluster-prod-1cluster-prod-2集群中,其中cluster-dev是测试集群,cluster-prod-1cluster-prod-2是生产集群,不同业务团队的应用部署在不同的命名空间下。

现在SRE团队需要为每个集群配置基本的容器CPU告警、容器内存告警、容器磁盘告警和一些业务告警规则。现在想要实现如下两个通知需求:

  • 测试集群cluster-dev的告警通知发送到对应的业务团队的钉钉群,不发送短信、电话,每个业务团队仅接收其负责的Pod的告警,通知频率较低。

  • 生产集群cluster-prod-1cluster-prod-2的所有告警通知都需要发送给SRE团队,每个业务团队仅接收其负责的Pod的告警,通知频率较高。

使用Prometheus告警规则模板创建告警规则

如果您的集群接入了ARMS Prometheus,则可以参考以下操作使用Prometheus告警规则模板创建告警规则,如果是使用集成将事件发送到ARMS告警管理,则需自行配置告警规则。

  1. ARMS控制台Prometheus监控 > Prometheus告警规则模板页面,根据需求先创建告警规则模板。具体操作,请参见Prometheus告警规则模板

    场景二Prometheus告警模板

  2. 创建告警规则模板之后,批量应用到集群cluster-dev、cluster-prod-1cluster-prod-2。

    场景二应用告警模板

  3. Prometheus监控 > Prometheus告警规则页面,可以看到告警规则已经批量创建好,每个集群都应用了四条告警规则。

    场景二告警规则

创建联系人、联系人组、IM机器人

添加SRE团队、业务部门A、业务部门B、业务部门C的联系人,通知方式可以是联系人(短信、电话、邮件),IM机器人(钉钉、企业微信、飞书)和Webhook。

在这个场景中,每个业务团队都需要添加部分联系人和一个钉钉群。场景二联系人组

创建通知策略进行告警通知

需求1:测试集群cluster-dev的告警通知发送到对应的业务团队的钉钉群,不发送短信、电话,每个业务团队仅接收其负责的Pod的告警,通知频率较低。

为了实现这个需求,此处需要创建三条通知策略,分别对应三个业务团队的钉钉群。

业务团队A接收测试环境的通知策略设置如下:

  • 事件匹配规则:此通知策略需要过滤出来自测试集群的属于业务团队A名下的Pod产生的告警事件。在本场景中,业务团队之间是通过命名空间(Namespace)隔离,所以设置事件匹配规则如下图所示。如果在业务场景中,业务团队之间通过Pod名称或者其他自定义标签隔离,可以通过额外过滤条件进行过滤。

  • 事件处理:选择压缩,因为告警事件可能来自多个告警规则,所以这里需要按照告警名称做分组,集群名称可以选填,不影响结果。

  • 告警生成:测试环境的告警只需要通知到钉钉群,所以这里选择钉钉群,设置通知频率为30分钟重复通知一次。

场景二通知策略

参考业务团队A为业务团队B和业务团队C创建对应的通知策略。业务团队的通知策略

需求2:生产集群cluster-prod-1、cluster-prod-2的所有告警通知都需要发送给SRE团队,每个业务团队仅接收其负责的Pod的告警,通知频率较高。

为了实现此需求,需要另外创建四个通知策略,分别对应于SRE团队和三个业务团队的生产环境接收对象。

SRE团队需要接收所有告警,所以通知策略需要设置如下:

  • 事件匹配规则:来自生产集群cluster-prod-1、cluster-prod-2的所有告警事件都需要发送到SRE团队。所以这里仅过滤集群名称,不再添加其他条件。

  • 事件处理:这里可能匹配到来自多个集群、多个告警规则的告警事件,所以分组这里需要选择集群名称、告警名称。

  • 告警生成:生产环境需要通知到SRE团队成员的短信和电话以及钉钉群,所以这里需要选择对应的联系人组、钉钉群,选择对应通知方式,并且设置升级通知方式为告警持续期间,每隔5分钟重复通知一次。

SRE团队通知策略

每个业务团队需要接收其相关的Pod的告警,以业务团队A为例通知策略需要设置如下:

  • 事件匹配规则:来自生产集群cluster-prod-1、cluster-prod-2的所有与业务团队A相关的告警事件都需要发送给业务团队A,本场景中业务团队应用在不同命名空间下,所以添加过滤条件为命名空间等于team-a

  • 事件处理:这里可能匹配到来自多个集群、多个告警规则的告警事件,所以分组这里需要选择集群名称、告警名称

  • 告警生成:生产环境需要通知到业务团队A成员的短信和电话以及钉钉群,所以这里需要选择对应的联系人组、钉钉群,选择对应通知方式,并且设置通知方式为告警持续期间,每隔5分钟重复通知一次。

业务团队通知策略

参考业务团队A为业务团队B和业务团队C创建对应的通知策略。

创建完成之后,就能够满足发送需求,后续钉钉群告警规则的管理请参见上文场景一

在本场景中,一共创建了:

  • 四条告警规则模板。

  • 若干联系人和钉钉机器人。

  • 七条通知策略。

满足了监控测试和生产环境的基础资源并按照环境、团队将告警发送给不同对象的需求。后续如果需要添加新的告警规则,仅需添加告警规则,无需变更通知策略。如果团队或者发送需求有调整,也仅需改变通知策略。

场景三:告警按照轮值人员和应急响应机制进行通知

部分情况下,告警通知可能需要按照值班表发送给不同人员,并且在告警发送对象未及时响应的情况下进行升级通知。

例如某部门工作时间由三个小组成员A、B、C轮流值班,非工作时间由成员D值班,值班人员未及时响应时需要向上升级。

具体需求为:

  • 三位成员A、B、C每人值班两天,然后轮换下一位,值班成员A、B、C仅在每天上午9点~晚上6点接收告警,其他时间由成员D值班。

  • 正常情况下告警通知仅发送短信,但是在10分钟告警未认领的情况下,电话通知值班人员。

  • 如果在电话通知值班人员的10分钟后,告警仍然未被认领,则会电话通知团队主管。

创建联系人和排班策略

  1. 创建联系人成员A、B、C、D和告警值班通知钉钉群。具体操作,请参见联系人钉钉机器人

  2. 创建排班策略。

    • 创建班次1,值班成员包括A、B、C,每天9:0018:00接收告警,每48小时轮换一次。

    • 创建班次2,值班成员包括D,每天18:00到次日09:00接收告警,不轮换。

    场景三排班策略

  3. 单击保存即可查看创建的值班表。场景三值班表

创建升级策略

按照需求,当告警10分钟未认领时,需要给值班人员发送电话通知,当告警20分钟未认领时,需要给团队主管发送电话通知。升级策略

创建通知策略

事件匹配规则和事件处理可以参考上文场景一或者场景二,在本场景中,为了使用上面配置的排班策略和升级策略,需要选择通知人/排班为创建的排班策略,然后选择升级通知方式为对应的升级策略。场景三通知策略