前言
在对系统进行监控告警的过程中,有时候并非在任何时候都要接收告警通知,例如以下场景:
- 计划内变更触发的已知告警可以无需通知
- 非工作时间不接收不严重的告警
- 夜里不接收电话告警
- 等等
本文会介绍几种常见的限制告警通知时段的方法,以及它们各自所适用的场景。
方案比较
各种方案的比较参考如下,在实际配置告警过程中,可以按照实际需求选择合适的方案。
Cron表达式 |
临时关闭 |
静默策略 |
全局日历 |
值班组 |
|
作用阶段 |
影响告警评估,从而影响通知 |
影响告警评估,从而影响通知 |
仅影响通知 |
仅影响通知 |
仅影响通知 |
支持的通知渠道 |
不限制 |
不限制 |
不限制 |
不限制 |
支持所有与人相关的通知渠道,例如短信、电话、邮件,以及钉钉等可以@用户的场景。 |
是否可以复用 |
无法复用,需要针对每个告警规则单独配置 |
无法复用,需要针对每个告警规则单独配置 |
可以 |
可以 |
可以 |
是否临时设置 |
否 |
是 |
是 |
否 |
否 |
支持的场景 |
较复杂 |
简单 |
简单 |
较复杂 |
复杂 |
配置复杂度 |
简单 |
简单 |
较复杂 |
简单 |
较复杂 |
通过 Cron 表达式限制告警触发时间段
在配置告警规则的时候,需要设置告警规则的检查频率,例如设置为固定5分钟间隔,则梅5分钟该规则就会对数据进行一次检查评估,判断是否需要触发告警。
这里除了设置固定间隔外,还支持设置 Cron 表达式。这里使用的是标准的 Cron 表达式,最小时间粒度为分钟。一共分为5段,分别表示:分钟、小时、日、月、周。例如:
0/5 * * * *
表示从0分钟开始,每隔5分钟检查一次0 0/1 * * *
表示从0点0分开始,每个1小时检查一次0 18 * * *
表示每天18点0分检查一次0 0 1 * *
表示每月1日的0点0分检查一次
除了这些基础的使用之外,还可以使用稍微复杂一些的 Cron 表达式,实现更加灵活的告警时间段限制。
- 例如只希望白天8点到18点之间触发告警,则可以设置为
0/5 8-17 * * *
,这个配置表示从 08:00 开始,到 17:59 结束,每5分钟会执行一次告警检查,其余时间则不执行。 - 例如希望周一到周五的上午8点到12点,下午14点到18点之间,每分钟都执行一次告警,则可以配置为
* 8-11,14-17 * * 1-5
。
关于 Cron 表达式的更多使用以及介绍,可以参考 https://crontab.guru/
通过临时关闭告警来限制告警触发时间段
针对某些预期内的告警(例如临时做系统变更,会有一些已知告警),我们希望它们在今后的一段时间内不再通知,那么可以通过临时关闭功能,暂时关闭某个告警。
临时关闭后,在该时间之内,告警规则就不会继续检查和触发,超过该时候之后,告警规则会恢复正常。
如果想要提起中断该作用,只需要点击“恢复”操作即可。
通过静默策略限制告警通知时间
通过临时关闭告警,作用的只是某一个告警规则。如果需要针对多个告警规则都需要在接下来的一段时间内不通知,可以通过静默策略来实现。例如在某集群升级过程中,可能会有一系列的预期内告警,希望对这些告警做屏蔽。
如果这些告警使用的都是同一个告警策略,则可以在告警策略中设置静默规则,例如针对所有 test-project 这个项目产生的告警,临时屏蔽一段时间,则可以设置如下:
该配置即表示,对于 test-project 这个项目产生的告警,会在 2022年12月2日的12点到18之间进行屏蔽,不会通知。
通过日历设置工作日与工作时间
如果希望针对全局告警实现相同的通知时间配置,可以使用全局日历功能。例如在全局日历中设置工作日和工作时间:
然后就可以在行动策略中设置发送时段:
这样所有使用了该行动策略的告警都会遵守该时间段设置,只会在工作时间(根据上图的示例配置,即每周一到周五的9点到18点之间)发送告警,超出该时间范围则不会通知。
更多关于全局日历以及日期重置的使用,可以参考文档:
- https://help.aliyun.com/document_detail/207706.html
- https://help.aliyun.com/document_detail/209961.html
通过值班组实现灵活的值班时间
全局日历主要解决的是全局工作日、工作时间相关的配置。如果针对个别告警,需要使用不同的发送时段设置,可以考虑使用值班组来实现完全灵活且自定义的发送时段。
例如需要每天夜间(0点到7点)接收通知,则可以新建值班组,然后添加轮岗,配置参考如下:
保存后切换到“最终排班”模式查看,可以看到每天只有特定时间段是值班的,即只在这个特定时间段内才会接收到告警通知。
然后行动策略中选择该值班组即可,例如:
需要注意的是,由于值班组里已经设定了时间段,所以行动策略里的“发送时段”选择“任意”即可,这样时间段就完全由值班组控制。如果这里“发送时段”选择了其它选项,那么最终的效果是,先使用全局日历判断是否发送通知,如果需要发送通知,才会使用值班组的时间段做二次判断。
更多关于值班组的使用,可以参考文档 https://help.aliyun.com/document_detail/207705.html。