行动策略过于复杂怎么办?试试下面一些解决方法

简介: 随着使用SLS告警越来越深入,有些用户的行动策略会配置的特别复杂,有些时候可以让用户通过创建多个行动策略来进行一定的精简,但是在一些场景下,用户是无法创建多个行动策略的。

背景

随着使用SLS告警越来越深入,有些用户的行动策略会配置的特别复杂,有些时候可以让用户通过创建多个行动策略来进行一定的精简,但是在一些场景下,用户是无法创建多个行动策略的。例如用户想要通过SLS来统一管理其各个监控系统的告警,所以采用了SLS的开放告警功能,这种情况下,用户一般一个监控系统就只会创建一个开放告警应用,也就只能对应一个行动策略,所以随着需要动态分派告警的各种情况增多,行动策略就会急剧膨胀,从而出现以下情况:

  • 在控制台无法保存
  • 在前端修改时加载过于卡顿
  • 告警延迟增加

因此,对于上述问题,本文介绍了三种优化的方案。

方案对比

利用告警策略拆分行动策略

使用SDK压缩行动策略内容

使用动态接收人

适用场景

适用于熟悉告警策略,并且告警的标签和标注特征明显的情况

优点:管理清晰、不容易出错

缺点:配置麻烦

适用于对告警SDK使用熟练,并且熟悉告警相关DSL语法的用户

优点:可以极大地精简行动策略

缺点:学习成本高,容易出错

适用有自己的企业用户管理系统,或者无法在行动策略分派的情况

优点:SLS侧配置简洁

缺点:用户需要实现一个提供动态分派通知人能力的webhook服务,并且只支持短信、语音和邮件通知渠道

利用告警策略拆分行动策略

告警策略在配置路由合并策略的时候,是可以按照告警的一些信息采用不同分组合并的,而不同的分组合并又可以选择不同的行动策略,所以手动将每个分组合并的其余配置全部改为和默认告警策略的一致,那么就可以实现拆分行动策略的目的了。(默认告警策略的分组合并中,合并基准选择自定义,告警属性选择告警规则ID和规则所在项目,告警标签选择所有,首次等待选择1秒,变化等待选择15秒,重复等待选择1分钟)

如下图所示,如果使用一个行动策略的话,那么该行动策略中既要考虑标签中appName为app0的情况,还要考虑appName为app1的情况,按照下图所示的方法拆分后,那么行动策略0中只需要考虑appName为app0的情况,行动策略1中只需要考虑appName为app1的情况,这样就完成了对行动策略的拆分。

最后,在创建告警监控规则或者开放告警应用的时候选择上面创建的告警策略即可。

使用SDK压缩行动策略内容

SLS的控制台在配置行动策略的时候,由于需要保存节点的一些UI信息,那么在存储行动策略时的配置内容就会特别大,容易超出资源数据的大小限制,从而导致从控制台上无法保存。如果是通过SDK管理行动策略的话,那么可以省去控制台上那些额外的UI信息,这个行动策略的大小就会变小很多。例如通过以下代码创建一个行动策略。

packagemainimport (
"fmt"sls"github.com/aliyun/aliyun-log-go-sdk")
var (
// 日志服务的服务入口。创建资源必须是河源区域。endpoint="cn-heyuan.log.aliyuncs.com"// 阿里云访问密钥AccessKey。更多信息,请参见访问密钥。阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维。accessKeyId=""accessKeySecret=""// 创建日志服务Client。client=sls.CreateNormalInterface(endpoint, accessKeyId, accessKeySecret, "")
)
funcmain() {
actionPolicy :=&sls.ResourceActionPolicy{
ActionPolicyId:              "test-action-policy",
ActionPolicyName:            "Test Action Policy",
PrimaryPolicyScript:         "if alert.labels.appName == \"app0\":\n    fire(type=\"sms\", users=[\"user1\"], groups=[], oncall_groups=[], receiver_type=\"static\", external_url=\"\", external_headers={}, template_id=\"sls.builtin.cn\", check_quota=\"true\", period=\"any\")\n    stop()\nif alert.labels.appName == \"app1\":\n    fire(type=\"email\", users=[\"user2\"], groups=[], oncall_groups=[], receiver_type=\"static\", external_url=\"\", external_headers={}, template_id=\"sls.builtin.cn\", check_quota=\"true\", period=\"any\")\n    stop()\nfire(type=\"webhook_integration\", integration_type=\"dingtalk\", webhook_id=\"user3\", template_id=\"sls.builtin.cn\", period=\"any\")",
SecondaryPolicyScript:       "",
EscalationStartTimeout:      "10m",
EscalationInprogressEnabled: false,
EscalationInprogressTimeout: "30m",
EscalationEnabled:           true,
EscalationTimeout:           "1h",
 }
record :=&sls.ResourceRecord{
Id:    actionPolicy.ActionPolicyId,
Tag:   actionPolicy.ActionPolicyName,
Value: sls.JsonMarshal(actionPolicy),
 }
err :=client.CreateResourceRecord("sls.alert.action_policy", record)
fmt.Println("[create action policy]", err)
}

第一列行动策略对应的DSL语法的脚本展开如下:

ifalert.labels.appName=="app0":
fire(type="sms", users=["user1"], groups=[], oncall_groups=[], receiver_type="static", external_url="", external_headers={}, template_id="sls.builtin.cn", check_quota="true", period="any")
stop()
ifalert.labels.appName=="app1":
fire(type="email", users=["user2"], groups=[], oncall_groups=[], receiver_type="static", external_url="", external_headers={}, template_id="sls.builtin.cn", check_quota="true", period="any")
stop()
fire(type="webhook_integration", integration_type="dingtalk", webhook_id="user3", template_id="sls.builtin.cn", period="any")

创建好了以后,在控制台上点击编辑创建好的行动策略如下图所示。通过SDK创建的行动策略没有UI信息,但是依然可以正常运行。

上述的行动策略对应的有UI信息的行动策略如下图所示。

使用动态接收人

SLS提供了动态接收人功能,可以通过Webhook服务设置告警通知的动态接收人。该Webhook服务办不仅可以按照SLS的用户模型返回需要通知告警的联系人方式,还可以进行告警的动态分派,实现与行动策略相同的能力,不仅如此,由于行动策略无法支持按照特殊内容(例如告警的fire_results字段)进行动态分派,因此在这种情况下就必须使用动态接收人的方式了。

如下图所示,使用动态接收人后,行动策略就只需要一个行动节点,从而变得简洁。

参考文档

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
程序员
程序员变量命名神器——CodeLf
作为程序猿,最头疼的是不是觉得变量名、方法名不会取名字,现在推荐款神器 -- CodeLf 。有了这个,以后代码的变量名就是 so easy 了,下面给大家讲解一下如何使用。
2772 0
程序员变量命名神器——CodeLf
IntelliJ IDEA 自定义控制台输出多颜色格式功能 --- 安装Grep Console插件
IntelliJ IDEA 自定义控制台输出多颜色格式功能 --- 安装Grep Console插件
3719 0
|
程序员 开发者
IDEA插件-Grep Console彩色控制台
IDEA插件-Grep Console是一款用于增强IDEA开发环境的工具,它可以帮助开发者更好地搜索和过滤控制台输出。
2336 0
IDEA插件-Grep Console彩色控制台
|
监控 安全 持续交付
【专栏】Webhook是服务器主动发送事件通知的机制,打破传统客户端轮询模式,实现数据实时高效传递。
【4月更文挑战第29天】Webhook是服务器主动发送事件通知的机制,打破传统客户端轮询模式,实现数据实时高效传递。常用于持续集成部署、第三方服务集成、实时数据同步和监控告警。具有实时性、高效性和灵活性优势,但也面临安全风险和调试挑战。理解并善用Webhook能提升系统性能,广泛应用于现代软件开发和集成。
1308 0
|
消息中间件 运维 监控
【kafka异常】kafka 常见异常处理方案(持续更新! 建议收藏)
【kafka异常】kafka 常见异常处理方案(持续更新! 建议收藏)
5361 0
【kafka异常】kafka 常见异常处理方案(持续更新! 建议收藏)
|
监控 数据可视化 应用服务中间件
打通钉钉+WebHook: 日志服务(SLS)告警实践
用一个最最常用的案例(Nginx日志分析)来说明当前使用场景,告警要解决的3个问题:是否有错误;是否有性能问题;是否有流量急跌或暴涨
7899 0
|
13天前
|
人工智能 自然语言处理 Shell
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
|
8天前
|
人工智能 安全 机器人
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI助手,支持钉钉、飞书等多平台接入。本教程手把手指导Linux下部署与钉钉机器人对接,涵盖环境配置、模型选择(如Qwen)、权限设置及调试,助你快速打造私有、安全、高权限的专属AI助理。(239字)
4931 13
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
|
9天前
|
人工智能 机器人 Linux
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI智能体,支持飞书等多平台对接。本教程手把手教你Linux下部署,实现数据私有、系统控制、网页浏览与代码编写,全程保姆级操作,240字内搞定专属AI助手搭建!
4928 17
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
|
7天前
|
人工智能 机器人 Linux
OpenClaw(Clawdbot、Moltbot)汉化版部署教程指南(零门槛)
OpenClaw作为2026年GitHub上增长最快的开源项目之一,一周内Stars从7800飙升至12万+,其核心优势在于打破传统聊天机器人的局限,能真正执行读写文件、运行脚本、浏览器自动化等实操任务。但原版全英文界面对中文用户存在上手门槛,汉化版通过覆盖命令行(CLI)与网页控制台(Dashboard)核心模块,解决了语言障碍,同时保持与官方版本的实时同步,确保新功能最快1小时内可用。本文将详细拆解汉化版OpenClaw的搭建流程,涵盖本地安装、Docker部署、服务器远程访问等场景,同时提供环境适配、问题排查与国内应用集成方案,助力中文用户高效搭建专属AI助手。
3498 8

热门文章

最新文章