概述
在之前的告警策略和行动策略相关的文章中,我们可以看到,为了配置各种策略逻辑,使用的都是类似的交互方式,即基于可视化图的表单。本文主要来介绍一下策略图相关的交互和配置。
编排框架基本介绍
一个典型的策略图结构如下:
可以看到,通常来说,有以下几种节点:
- 开始:表示该策略的开始
- 结束(最下面):表示策略的结束
- 结束(右侧):表示策略的中断
- 条件节点
- 业务节点:例如上图中的行动组配置
结束(中断)与继续
跟在条件逻辑右侧的结束节点,表示的是策略的中断执行。除了结束之外,有些策略还可以添加继续链接,表示继续向下执行。
例如上图的结束节点,逻辑类似于如下的脚本:
其中条件逻辑后面的结束,相当于是函数的 return 语句,因此不会继续向下执行。
如果是继续链接的话,如下图所示:
则相当于如下的脚本:
因此即使满足了if语句,依然会继续向下执行。
策略继承
告警策略继承
目前只有告警策略(包含路由合并、抑制和静默)可以继承。策略继承相当于两个策略的策略图拼接起来。例如父策略如下:
子策略如下:
则最终子策略的效果相当于:
因此可以看到,策略图最下面的结束节点,只是表示当前策略逻辑上的结束,假如当前策略有子策略的话,有可能会继续执行子策略的。但是条件节点右侧的结束,表示的是整个执行的中断,因此如果匹配了条件,就不会再继续向西执行。
通过继承实现全局静默
策略继承的一个非常便捷的用途就是用来实现全局静默。例如有一个父策略 sls.root
,它有若干个子策略例如 alert-policy-1
、alert-policy-2
等等。假如某一天希望静默掉所有 labels.env = test
即测试环境的告警的时候,就可以配置 sls.root
的静默策略,从而对所有子策略都生效,而无需对每个子策略单独配置。
循环继承
另一个问题就是循环继承。假如 A 继承 B,B 又继承了 A,就会导致继承链上出现环。此时会从当前策略沿着继承链向上,直到到达循环点。例如:
- 使用的是策略 A,则最终效果是 B + A,因为 A 继承自 B
- 使用的是策略 B,则最终效果是 A + B,因为 B 继承自 A
进一步参考
了解更多的信息,可以参考 SLS 的官方文档:
对我们工作感兴趣的,可以通过如下方式了解更多,谢谢关注!
- SLS首页:https://www.aliyun.com/product/sls
- 知乎:https://zhuanlan.zhihu.com/aliyunlog
- 微信公众号:日志服务 or LogAnalytics
- 哔哩哔哩:https://space.bilibili.com/630680534