
Alibabacloud Cms Alert Rule Create
- 224 installs
- 208 repo stars
- Updated August 4, 2026
- aliyun/alibabacloud-aiops-skills
Define Alibaba Cloud Monitor (CMS) alert rules for CPU, memory, latency, and custom metrics so on-call teams get timely notifications on production incidents.
About
Skill for creating Alibaba Cloud Monitor alert rules across cloud resources, configuring metric thresholds, notification targets, and escalation paths so teams detect failures and capacity issues before user impact grows.
- CMS alert rule authoring
- Metric threshold configuration
- Notification channel setup
- Multi-resource monitoring coverage
- Incident early-warning automation
Alibabacloud Cms Alert Rule Create by the numbers
- 224 all-time installs (skills.sh)
- Ranked #444 of 1,039 Cloud & Infrastructure skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/aliyun/alibabacloud-aiops-skills --skill alibabacloud-cms-alert-rule-createAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 224 |
|---|---|
| repo stars | ★ 208 |
| Last updated | August 4, 2026 |
| Repository | aliyun/alibabacloud-aiops-skills ↗ |
What it does
Define Alibaba Cloud Monitor (CMS) alert rules for CPU, memory, latency, and custom metrics so on-call teams get timely notifications on production incidents.
Files
Alibaba Cloud Alert Rule Management
This skill creates and queries alert rules. Intent routing selects CMS 1.0 or CMS 2.0 workflow automatically.
---
CLI Setup (Required Before Execution)
aliyun configure ai-mode enable
aliyun configure ai-mode set-user-agent --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-cms-alert-rule-create"
aliyun plugin update---
Step 0: Intent Routing
Identify user's monitoring target → route to the correct workflow. See step0-intent-routing.md.| User Scenario | Route To |
|---|---|
| Cloud product system metrics (ECS, RDS, SLB, OSS, Redis, MongoDB…) | CMS 1.0 Workflow |
| Prometheus / APM / UModel / custom metrics | CMS 2.0 Workflow |
---
Supported Alert Types
| Version | Type | Create API | Query API |
|---|---|---|---|
| CMS 1.0 | Cloud Resource (ECS/RDS/SLB/OSS/Redis/MongoDB…) | PutResourceMetricRule | DescribeMetricRuleList |
| CMS 2.0 | Prometheus (PROMETHEUS) | ManageAlertRules | QueryAlertRules |
| CMS 2.0 | APM (APM) | ManageAlertRules | QueryAlertRules |
| CMS 2.0 | UModel (UMODEL) | ManageAlertRules | QueryAlertRules |
---
CMS 1.0 Workflow
For query requests → step-query.md
For create requests:
| Step | Description | Reference |
|---|---|---|
| 1 | Context Lock — namespace, region, instances | step1-context-lock.md |
| 2 | Query Generation — discover metrics via API, match to user intent | step2-query-generation.md |
| 3 | Detection Config — threshold, frequency (default 1min) | step3-detection-config.md |
| 4 | Notification — query contacts → select or create | step4-notification.md |
| 5 | Preview & Execute — show summary → confirm → CLI | step5-preview-execute.md |
| 6 | Verification — check status | step6-verification.md |
---
CMS 2.0 Workflow
For query requests → cms2-step-query.md
For create requests:
| Step | Description | Reference |
|---|---|---|
| 1 | Context Lock — build datasourceConfig (type, instanceId, region) | cms2-step1-context-lock.md |
| 2 | Query Config — build queryConfig (PromQL / APM measures / UModel entity) | cms2-step2-query-config.md |
| 3 | Detection Config — build conditionConfig (P1-P4, threshold, duration) | cms2-step3-detection-config.md |
| 4 | Webhook Query — call list-alert-webhooks, user selects; other types → console | cms2-step5-preview-execute.md |
| 5 | Preview & Execute — show summary → confirm → manage-alert-rules CLI | cms2-step5-preview-execute.md |
---
Critical Rules
Full details → references/critical-rules.md1. Intent Routing — Route cloud resource metrics to CMS 1.0, Prometheus/APM/UModel to CMS 2.0. Never mix APIs. 2. CMS 2.0 API Enforcement — CMS 2.0 alert rules MUST ONLY be created via ManageAlertRules and queried via QueryAlertRules. No other API (e.g. PutResourceMetricRule, DescribeMetricRuleList, ARMS CreateOrUpdateAlertRule, ARMS CreatePrometheusAlertRule) is permitted for CMS 2.0 alert rule creation or query. If ManageAlertRules returns error, DO NOT fallback to other APIs — report the error to user and STOP execution. CLI format: aliyun cms manage-alert-rules --body '{"action":"CREATE",...}' 3. Contact/Webhook Query First — CMS 1.0: DescribeContactGroupList; CMS 2.0: ListAlertWebhooks is MANDATORY before alert creation. (CMS 2.0 other notification → console). DO NOT use CMS 1.0 APIs as substitute for CMS 2.0. Skipping webhook query is a critical failure. 4. Resources Parameter — (CMS 1.0) --resources must always be explicitly passed. 5. Workspace Required — (CMS 2.0) Must ask user for workspace value using AskUser tool. Never auto-construct (e.g. 'default', 'default-cms-{accountId}'). If AskUser fails, retry once with simplified options, then report error and STOP — do NOT proceed with fabricated values. 6. Prometheus Required Params — (CMS 2.0) cluster_id (instanceId) + workspace MUST ASK USER using AskUser tool. Never guess, omit, or auto-select. PromQL is generated based on user-provided cluster_id + monitoring target. If AskUser fails, STOP execution. 7. APM Required Params — (CMS 2.0) service_id (for datasourceConfig.instanceId AND queryConfig.serviceIdList) + workspace MUST ASK USER using AskUser tool. Never fabricate, use placeholders, or auto-select from discovered applications (e.g. via ListTraceApps). Discovery APIs are for reference only — final selection MUST come from user input. If AskUser fails, STOP execution. 8. Required API Calls — Every operation must call designated APIs even if values seem known. 9. Dynamic Metric Discovery — (CMS 1.0) MUST call describe-metric-meta-list. Use metrics.md only as fallback. 10. CLI Timeout — --read-timeout 30 for queries, --read-timeout 60 for writes. 11. Duplicate Pre-check — Query existing rules before creation to avoid duplicates. 12. Mandatory Confirmation — Show config summary and get user confirmation before execution. EVEN in automated/simulated environments, you MUST output a configuration summary block and explicitly state 'Waiting for user confirmation' before proceeding. Do NOT skip this step with excuses about automation. Example format:
【配置摘要】
告警类型: APM/Prometheus
阈值: 5%
严重级别: P2
通知方式: webhook
请确认以上配置是否正确(回复确认或修改意见):13. User-Agent — Set ALIBABA_CLOUD_USER_AGENT="AlibabaCloud-Agent-Skills/alibabacloud-cms-alert-rule-create" for all CLI calls. 14. Network Restriction — Never access external URLs. Use only references/ files and CLI. 15. CLI Self-Discovery — Use --help for CLI syntax when uncertain.
---
Reference Files
| File | Scope | Purpose |
|---|---|---|
step0-intent-routing.md | Shared | Intent routing — CMS 1.0 or CMS 2.0 |
step-query.md | CMS 1.0 | Query alert rules (DescribeMetricRuleList) |
step1-context-lock.md | CMS 1.0 | Context lock |
step2-query-generation.md | CMS 1.0 | Query generation & metric discovery |
step3-detection-config.md | CMS 1.0 | Detection config |
step4-notification.md | CMS 1.0 | Notification & contact handling |
step5-preview-execute.md | CMS 1.0 | Preview & execute |
step6-verification.md | CMS 1.0 | Verification |
cms2-step-query.md | CMS 2.0 | Query alert rules (QueryAlertRules) |
cms2-step1-context-lock.md | CMS 2.0 | Datasource config (Prometheus/APM/UModel) |
cms2-step2-query-config.md | CMS 2.0 | Query config (PromQL, APM, UModel) |
cms2-step3-detection-config.md | CMS 2.0 | Detection condition config (P1-P4) |
cms2-step5-preview-execute.md | CMS 2.0 | Preview, execute & webhook query |
metrics.md | CMS 1.0 | Common metrics quick reference (fallback) |
prometheus-metrics.md | CMS 2.0 | Prometheus PromQL patterns |
apm-metrics.md | CMS 2.0 | APM metrics and operators |
critical-rules.md | Shared | Expanded critical rule details, API tables, examples |
ram-policies.md | Shared | Required RAM permissions |
related_apis.yaml | Shared | API lookup before CLI calls |
---
Cleanup (After Execution)
aliyun configure ai-mode disableAPM 指标参考
本文档包含 ARMS APM 告警的指标分组和常用指标参考。
指标分组概览
| 分组 | 英文标识 | 适用场景 |
|---|---|---|
| 应用提供服务统计 | APP_STAT | 接口性能、QPS、错误率监控 |
| JVM 监控 | JVM | Java 应用堆内存、GC、线程监控 |
| 异常统计 | EXCEPTION | 应用异常数、异常类型分布 |
| 数据库调用 | DB | SQL 响应时间、慢查询监控 |
| 主机监控 | HOST | 应用所在主机资源监控 |
| NoSQL 调用 | NOSQL | Redis/MongoDB 调用监控 |
| 外部服务调用 | EXTERNAL | 外部 HTTP 调用监控 |
| MQ 消费/生产 | MQ | 消息队列性能监控 |
应用提供服务统计 (APP_STAT)
| 指标 | 英文名 | 单位 | 推荐阈值 | 说明 |
|---|---|---|---|---|
| 响应时间 | rt | ms | > 500ms Warn, > 1000ms Critical | 接口平均响应时间 |
| 请求数 | count | 次/分 | 业务相关 | 接口调用量 |
| 错误数 | error | 次/分 | > 10 Warn, > 50 Critical | 接口错误次数 |
| 错误率 | errorRate | % | > 1% Warn, > 5% Critical | 错误请求占比 |
| 慢调用数 | slowCount | 次/分 | > 10 Warn | 响应时间超阈值的请求数 |
| HTTP 状态码 | httpCode | - | 5xx > 0 | 按状态码统计 |
示例告警规则:
{
"alert-type": "APP_STAT",
"alert-rule-content": {
"condition": "OR",
"rules": [{
"aggregates": "AVG",
"alias": "rt",
"nValue": 3,
"operator": "CURRENT_GTE",
"value": 800
}]
}
}JVM 监控 (JVM)
| 指标 | 英文名 | 单位 | 推荐阈值 | 说明 |
|---|---|---|---|---|
| 堆内存使用量 | heapUsed | MB | > 80% Warn | JVM 堆内存已使用 |
| 堆内存使用率 | heapUsedPercent | % | > 80% Warn, > 90% Critical | 堆内存使用百分比 |
| 非堆内存使用量 | nonHeapUsed | MB | > 500MB Warn | 非堆内存使用 |
| GC 次数 | gcCount | 次/分 | FullGC > 1 Critical | 垃圾回收次数 |
| GC 耗时 | gcTime | ms | > 500ms Warn | 垃圾回收耗时 |
| 线程数 | threadCount | 个 | > 500 Warn | 活跃线程数量 |
| 死锁线程数 | deadlockedThreads | 个 | > 0 Critical | 死锁线程检测 |
关键约束:
- JVM 指标仅适用于 Java 应用
heapUsedPercent是最常用的 JVM 健康指标- FullGC 频繁(> 1次/分钟)通常表示内存泄漏
异常统计 (EXCEPTION)
| 指标 | 英文名 | 单位 | 推荐阈值 | 说明 |
|---|---|---|---|---|
| 异常数 | exceptionCount | 次/分 | > 10 Warn, > 50 Critical | 应用抛出异常次数 |
| 异常接口数 | exceptionInterface | 个 | > 5 Warn | 产生异常的接口数量 |
| 特定异常类型 | exceptionType | 次/分 | > 0 (Critical类) | 按异常类型统计 |
常见需要监控的异常类型:
NullPointerExceptionOutOfMemoryErrorSQLExceptionTimeoutExceptionConnectionRefusedException
数据库调用 (DB)
| 指标 | 英文名 | 单位 | 推荐阈值 | 说明 |
|---|---|---|---|---|
| SQL 响应时间 | sqlRt | ms | > 200ms Warn, > 1000ms Critical | SQL 执行平均耗时 |
| SQL 调用量 | sqlCount | 次/分 | 业务相关 | SQL 执行次数 |
| 慢 SQL 数 | slowSqlCount | 次/分 | > 10 Warn | 超过阈值的慢查询数 |
| SQL 错误数 | sqlError | 次/分 | > 0 Warn | SQL 执行错误次数 |
主机监控 (HOST)
| 指标 | 英文名 | 单位 | 推荐阈值 | 说明 |
|---|---|---|---|---|
| CPU 使用率 | cpuUsage | % | > 70% Warn, > 85% Critical | 主机 CPU 使用率 |
| 内存使用率 | memoryUsage | % | > 75% Warn, > 90% Critical | 主机内存使用率 |
| 磁盘使用率 | diskUsage | % | > 80% Warn, > 90% Critical | 磁盘空间使用率 |
| 网络入流量 | networkIn | KB/s | 业务相关 | 网络入方向流量 |
| 网络出流量 | networkOut | KB/s | 业务相关 | 网络出方向流量 |
外部服务调用 (EXTERNAL)
| 指标 | 英文名 | 单位 | 推荐阈值 | 说明 |
|---|---|---|---|---|
| 调用响应时间 | externalRt | ms | > 500ms Warn | 外部服务调用耗时 |
| 调用错误数 | externalError | 次/分 | > 5 Warn | 外部调用失败次数 |
| 调用量 | externalCount | 次/分 | 业务相关 | 外部服务调用次数 |
告警规则操作符
| 操作符 | 英文标识 | 说明 |
|---|---|---|
| 当前值 >= | CURRENT_GTE | 当前值大于等于阈值 |
| 当前值 > | CURRENT_GT | 当前值大于阈值 |
| 当前值 <= | CURRENT_LTE | 当前值小于等于阈值 |
| 当前值 < | CURRENT_LT | 当前值小于阈值 |
| 环比上涨 >= | HOH_GTE | 环比上涨百分比 |
| 环比下跌 >= | HOH_LTE | 环比下跌百分比 |
| 同比上涨 >= | YOY_GTE | 同比上涨百分比 |
| 同比下跌 >= | YOY_LTE | 同比下跌百分比 |
聚合方式
| 聚合方式 | 英文标识 | 说明 |
|---|---|---|
| 平均值 | AVG | 统计周期内的平均值 |
| 求和 | SUM | 统计周期内的总和 |
| 最大值 | MAX | 统计周期内的最大值 |
| 最小值 | MIN | 统计周期内的最小值 |
指标分组归属约束
创建 APM 告警时,必须确保指标与分组的正确对应:
| 指标 | ✅ 正确分组 | ❌ 禁止分组 |
|---|---|---|
rt, errorRate | APP_STAT | JVM, EXCEPTION |
heapUsed, gcCount | JVM | APP_STAT, DB |
exceptionCount | EXCEPTION | APP_STAT, JVM |
sqlRt, slowSqlCount | DB | APP_STAT, EXCEPTION |
cpuUsage, memoryUsage | HOST | JVM, APP_STAT |
CLI 参数映射
| 配置项 | CLI 参数 | 示例值 |
|---|---|---|
| 应用 PID | --pids | "atc889zkcf@xxx" |
| 指标分组 | --alert-type | APP_STAT |
| 告警名称 | --alert-name | "order-service-rt-alert" |
| 地域 | --region-id | cn-hangzhou |
| 通知策略 | --notification-policy-id | "np-xxx" |
完整示例
接口 RT 告警
aliyun arms create-or-update-alert-rule \
--region-id "cn-hangzhou" \
--alert-name "order-service-rt-critical" \
--metrics-type "APM" \
--pids "atc889zkcf@9781f3c4e12xxx" \
--alert-type "APP_STAT" \
--alert-rule-content '{"condition":"OR","rules":[{"aggregates":"AVG","alias":"rt","nValue":3,"operator":"CURRENT_GTE","value":800}]}' \
--notification-policy-id "np-xxxx"JVM 堆内存告警
aliyun arms create-or-update-alert-rule \
--region-id "cn-hangzhou" \
--alert-name "order-service-heap-critical" \
--metrics-type "APM" \
--pids "atc889zkcf@9781f3c4e12xxx" \
--alert-type "JVM" \
--alert-rule-content '{"condition":"OR","rules":[{"aggregates":"AVG","alias":"heapUsedPercent","nValue":3,"operator":"CURRENT_GTE","value":85}]}' \
--notification-policy-id "np-xxxx"CMS 2.0:查询告警规则
目的
查询已有的 CMS 2.0 告警规则(Prometheus/APM/UModel),支持灵活过滤。
---
API 请求结构
POST /queryAlertRules
API 版本: 2024-03-30
Endpoint: metrics.{regionId}.aliyuncs.com
顶层参数:
- maxResults (integer, 可选) — 分页大小
- nextToken (string, 可选) — 分页令牌
- clientToken (string, 可选) — 幂等令牌
- body (QueryAlertRulesInput, 必填) — 请求体
QueryAlertRulesInput:
- workspace (string, 必填) — Workspace,必须向用户询问获取
- filter (QueryAlertRulesFilter) — 过滤条件
- pagination (Pagination) — 分页配置workspace 是必传参数,必须向用户询问获取,不可自行构造(其值不一定以 default 开头)。注意:过滤字段放在 body.filter 内部,而非 body 顶层。QueryAlertRulesFilter支持的完整字段需参考官方 API 文档。基于响应结构推断的常用过滤模式包括按datasourceConfig.type、displayName、status、enabled等字段过滤。
---
CLI 命令
export ALIBABA_CLOUD_USER_AGENT="AlibabaCloud-Agent-Skills/alibabacloud-cms-alert-rule-create"
# 基本查询(带分页)
aliyun cms query-alert-rules \
--max-results 100 \
--body '{
"workspace": "{user_provided_workspace}"
}'
# 带过滤条件的查询
aliyun cms query-alert-rules \
--max-results 50 \
--body '{
"workspace": "{user_provided_workspace}",
"filter": {
<filter-fields>
}
}'---
可用参数
| 参数 | 位置 | 类型 | 是否必填 | 说明 | 示例 |
|---|---|---|---|---|---|
maxResults | 顶层 | integer | 否 | 分页大小 | 50、100 |
nextToken | 顶层 | string | 否 | 上一次响应返回的分页令牌 | ""(首页) |
body.workspace | body | string | 是 | Workspace,必须向用户询问获取 | (用户提供) |
body.filter.datasourceConfig.type | body.filter | string | 否 | 按告警类型过滤 | PROMETHEUS、APM、UMODEL |
body.filter.datasourceConfig.instanceId | body.filter | string | 否 | 按数据源实例过滤 | Prometheus 实例 ID |
body.filter.* | body.filter | — | 否 | 其他过滤字段参见 API 文档 | 参见 API 文档 |
重要:filter的完整字段定义需参考官方 API 文档(QueryAlertRulesFilter),上表仅列出基于响应结构推断的常用字段。
---
常用查询示例
列出所有规则(全量扫描)
aliyun cms query-alert-rules \
--max-results 100 \
--body '{
"workspace": "{user_provided_workspace}"
}'列出所有 Prometheus 告警规则
aliyun cms query-alert-rules \
--max-results 50 \
--body '{
"workspace": "{user_provided_workspace}",
"filter": {
"datasourceConfig": {"type": "PROMETHEUS"}
}
}'列出所有 APM 告警规则
aliyun cms query-alert-rules \
--max-results 50 \
--body '{
"workspace": "{user_provided_workspace}",
"filter": {
"datasourceConfig": {"type": "APM"}
}
}'列出所有 UModel 规则
aliyun cms query-alert-rules \
--max-results 50 \
--body '{
"workspace": "{user_provided_workspace}",
"filter": {
"datasourceConfig": {"type": "UMODEL"}
}
}'分页查询(下一页)
aliyun cms query-alert-rules \
--max-results 50 \
--next-token "<token-from-previous-response>" \
--body '{
"workspace": "{user_provided_workspace}"
}'---
响应结构
{
"data": {
"totalCount": 0,
"alertRules": [...]
},
"code": "",
"success": true,
"requestId": "",
"nextToken": ""
}每条 alertRule 的关键字段
| 字段 | 说明 |
|---|---|
uuid | 告警规则 UUID |
displayName | 规则显示名称 |
status | 当前状态 |
enabled | 是否启用 |
workspace | 工作空间 |
datasourceConfig.type | 告警类型(PROMETHEUS / APM / UMODEL) |
datasourceConfig.instanceId | 数据源实例 ID |
datasourceConfig.regionId | 地域 |
queryConfig.type | 查询类型 |
queryConfig.promQl | PromQL 表达式(Prometheus) |
conditionConfig.severity | 严重等级(P1-P4) |
conditionConfig.operator | 比较运算符 |
conditionConfig.threshold | 告警阈值 |
conditionConfig.durationSecs | 持续时间(秒) |
scheduleConfig.intervalSecs | 检测间隔(秒) |
notifyConfig.channels | 通知渠道 |
notifyConfig.silenceTimeSecs | 静默时间(秒) |
labels | 标签(键值对) |
annotations | 注解(键值对) |
createdAt | 创建时间 |
updatedAt | 最后更新时间 |
---
工作流程
1. 识别用户的查询意图和所需过滤条件 2. 向用户询问获取 workspace 值 3. 使用 --max-results 和 --body '{"workspace": "...", "filter": {...}}' 构建 query-alert-rules 请求 4. 执行查询 CLI 命令 5. 解析响应:结果在 data.alertRules 中,使用 nextToken 进行分页 6. 格式化并向用户展示结果 7. 如果用户需要修改/删除,使用 manage-alert-rules 并设置 action=UPDATE/BATCH_DELETE
CMS 2.0 步骤 1:上下文锁定(datasourceConfig + workspace)
目的
构建 CMS 2.0 告警规则的 datasourceConfig 和 workspace。此步骤决定使用哪个监控系统、实例和工作空间。
---
workspace 参数(必填)
所有 CMS 2.0 API 调用都需要 workspace 参数。
| 字段 | 类型 | 是否必填 | 获取方式 |
|---|---|---|---|
workspace | string | 是 | 必须询问用户获取 |
workspace 是 CMS 2.0 API 的必传参数,其值不一定以 default 开头,格式不固定,必须向用户询问获取,不可自行构造。---
datasourceConfig 结构
| 字段 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
type | string | 是 | 数据源类型:PROMETHEUS、APM、UMODEL |
instanceId | string | 按需 | Prometheus 实例 ID(type=PROMETHEUS 时使用);APM 应用 service_id(type=APM 时使用) |
regionId | string | 否 | 地域 ID(各类型可选,缺省与规则/网关一致) |
---
各类型配置说明
Prometheus
⚠️ 必须向用户询问 `cluster_id`(即 Prometheus 实例 ID,对应 `datasourceConfig.instanceId`)和 `workspace`。这两个参数必须由用户提供,不可猜测、不可省略、不可自动构造。
| 字段 | 获取方式 | 是否必填 |
|---|---|---|
cluster_id (instanceId) | 🔴 必须询问用户 — 即 Prometheus 实例 ID | 是 |
workspace | 🔴 必须询问用户 — 不可自行构造 | 是 |
{
"type": "PROMETHEUS",
"instanceId": "{user_provided_cluster_id}",
"regionId": "cn-hangzhou"
}cluster_id就是 Prometheus 实例的 instanceId,用户可在 ARMS 控制台或 Prometheus 实例列表中找到- 获取 cluster_id 和 workspace 后,再根据用户的监控需求(如 CPU、内存、Pod 重启等)生成对应的 PromQL
APM
⚠️ 必须向用户询问 `service_id`(用于 `datasourceConfig.instanceId`)和 `workspace`。这两个参数必须由用户提供,不可猜测、不可省略、不可自动构造。
| 字段 | 获取方式 | 是否必填 |
|---|---|---|
service_id (instanceId) | 🔴 必须询问用户 — APM 应用 ID,传入 datasourceConfig.instanceId | 是 |
workspace | 🔴 必须询问用户 — 不可自行构造 | 是 |
{
"type": "APM",
"instanceId": "{user_provided_service_id}",
"regionId": "cn-hangzhou"
}重要:根据官方 API 文档,当 type=APM 时,instanceId 传入的就是 service_id。service_id 是 APM 应用的唯一标识,用户可在 ARMS 控制台的应用列表中找到。
UModel
⚠️ 必须向用户询问 `workspace`。此参数必须由用户提供,不可猜测、不可省略、不可自动构造。
| 字段 | 获取方式 | 是否必填 |
|---|---|---|
workspace | 🔴 必须询问用户 — 不可自行构造 | 是 |
{
"type": "UMODEL",
"regionId": "cn-hangzhou"
}UModel 不需要 instanceId — 实体选择在 queryConfig 中完成。
---
必填参数检查清单
- [ ] workspace 已从用户处获取 — 🔴 必须询问用户(必须向用户询问获取,不可自行构造)
- [ ] datasourceConfig.type 已确认(PROMETHEUS / APM / UMODEL)
- [ ] Prometheus:
cluster_id已从用户处获取 — 🔴 必须询问用户(即 instanceId,不可猜测) - [ ] APM:
service_id已从用户处获取 — 🔴 必须询问用户(用于 datasourceConfig.instanceId,不可编造) - [ ] regionId 已确认(或使用默认值,缺省与规则/网关一致)
---
下一步
→ cms2-step2-query-config.md
CMS 2.0 步骤 2:查询配置(queryConfig)
目的
构建 queryConfig,定义需要监控的指标/数据。配置内容因告警类型而异。
---
queryConfig 类型
| datasourceConfig.type | queryConfig.type | 说明 |
|---|---|---|
| PROMETHEUS | PROMETHEUS_SINGLE_QUERY | 自定义 PromQL 表达式 |
| PROMETHEUS | PROMETHEUS_PRESET_METRIC | 预定义指标(来自 metricSet)(⚠️ 官方文档未列出此类型,可能需要确认) |
| APM | APM_MULTI_QUERY | 带过滤条件的应用指标 |
| UMODEL | UMODEL_METRICSET_QUERY | 基于实体的指标集查询 |
---
Prometheus 查询配置
⚠️ PromQL 是基于用户提供的 `cluster_id`(即 Prometheus 实例 ID)和监控需求来动态生成的。
- 用户必须先提供cluster_id(🔴 必须询问用户,对应datasourceConfig.instanceId)
- 然后根据用户的监控目标(如 CPU、内存、Pod 重启等)生成对应的 PromQL
- 流程:用户提供 cluster_id + 监控目标 → 生成对应 PromQL → 填入 queryConfig
方式 A:自定义 PromQL(PROMETHEUS_SINGLE_QUERY)
{
"type": "PROMETHEUS_SINGLE_QUERY",
"promQl": "<根据用户监控需求动态生成的 PromQL>",
"enableDataCompleteCheck": true
}PromQL 生成示例:
| 用户监控目标 | 生成的 PromQL |
|---|---|
| 节点 CPU 使用率 | 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) |
| 节点内存使用率 | (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 |
| Pod 重启次数 | increase(kube_pod_container_status_restarts_total[1h]) |
| 容器 CPU 使用率 | sum(rate(container_cpu_usage_seconds_total[5m])) by (pod) * 100 |
常用 PromQL 模式 → 参见 prometheus-metrics.md
enableDataCompleteCheck(boolean):可选,是否启用数据完整性检查。方式 B:预设指标(PROMETHEUS_PRESET_METRIC)
⚠️ 官方文档未列出此类型,可能需要确认是否实际支持。
{
"type": "PROMETHEUS_PRESET_METRIC",
"metricSet": "node-exporter",
"metric": "cpu_usage"
}---
APM 查询配置(APM_MULTI_QUERY)
⚠️ `serviceIdList` 中的 `service_id` 必须由用户提供(🔴 必须询问用户),不可自行编造或使用占位符。
{
"type": "APM_MULTI_QUERY",
"serviceIdList": ["{user_provided_service_id}"],
"filterList": [
{
"key": "interface",
"type": "eq",
"value": "/api/order"
}
],
"measureList": [
{
"measureCode": "rt",
"windowSecs": 300,
"groupBy": ["interface"]
}
]
}service_id 是 APM 应用的唯一标识(如 atc889zkcf@9781f3c4e12xxx),用户可在 ARMS 控制台的应用列表中找到。APM 指标代码
| 指标分组 | measureCode | 说明 |
|---|---|---|
| APP_STAT | rt | 响应时间(毫秒) |
| APP_STAT | count | 请求次数 |
| APP_STAT | error | 错误次数 |
| APP_STAT | errorRate | 错误率(%) |
| JVM | heapUsedPercent | 堆内存使用率(%) |
| JVM | gcCount | GC 次数 |
| EXCEPTION | exceptionCount | 异常次数 |
| DB | sqlRt | SQL 响应时间(毫秒) |
| HOST | cpuUsage | 主机 CPU 使用率(%) |
| HOST | memoryUsage | 主机内存使用率(%) |
更多详情 → 参见 apm-metrics.md
---
UModel 查询配置(UMODEL_METRICSET_QUERY)
{
"type": "UMODEL_METRICSET_QUERY",
"metricSet": "ai-app-operation-metrics",
"metric": "token-usage",
"entityDomain": "ai-application",
"entityType": "application",
"entityFilters": [
{
"field": "app-id",
"operator": "eq",
"value": "app-123"
}
],
"labelFilters": [
{
"key": "env",
"operator": "eq",
"value": "prod"
}
],
"entityFields": [
{
"field": "app-name"
}
]
}UModel queryConfig 字段说明
| 字段 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
type | string | 是 | UMODEL_METRICSET_QUERY |
metricSet | string | 是 | 指标集名称 |
metric | string | 是 | 指标名称 |
entityDomain | string | 否 | 实体所属域 |
entityType | string | 否 | 实体类型 |
entityFilters | array(UmodelEntityFilter) | 否 | 实体过滤列表 |
labelFilters | array(UmodelLabelFilter) | 否 | 标签过滤条件 |
entityFields | array(UmodelEntityField) | 否 | 需要附带返回的实体字段 |
---
下一步
→ cms2-step3-detection-config.md
CMS 2.0 步骤 3:检测配置(conditionConfig)
目的
构建 conditionConfig,定义告警阈值和检测行为。
---
严重等级
CMS 2.0 使用 P 级严重等级(与 CMS 1.0 的 critical/warn/info 不同):
| 等级 | 名称 | 说明 | 推荐场景 |
|---|---|---|---|
| P1 | 严重 | 紧急,需要立即处理 | 服务宕机、数据丢失风险 |
| P2 | 错误 | 重要,需要尽快关注 | 性能下降、高错误率 |
| P3 | 警告 | 值得注意,需要排查 | 接近阈值 |
| P4 | 信息 | 仅供参考 | 监控感知 |
---
conditionConfig 类型
| datasourceConfig.type | conditionConfig.type | 说明 |
|---|---|---|
| PROMETHEUS | PROMETHEUS_SIMPLE_CONDITION | 单一阈值条件 |
| APM | APM_SIMPLE_CONDITION | 单/多阈值(按严重等级) |
| APM | APM_COMPOSITE_CONDITION | 多条件组合,支持 AND/OR 逻辑 |
| UMODEL | UMODEL_METRICSET_CONDITION | 实体指标阈值 |
---
Prometheus 条件配置
{
"type": "PROMETHEUS_SIMPLE_CONDITION",
"durationSecs": 300,
"severity": "P2"
}Prometheus 的阈值和比较逻辑在 PromQL 表达式中定义,conditionConfig 仅配置持续时间和严重等级。
durationSecs
| 值 | 说明 |
|---|---|
| 0 | 即时告警(无持续时间要求) |
| 60 | 持续 1 分钟 |
| 300 | 持续 5 分钟 |
---
APM 简单条件(APM_SIMPLE_CONDITION)
支持在一条规则中配置多个严重等级阈值:
{
"type": "APM_SIMPLE_CONDITION",
"aggregate": "AVG",
"operator": "GreaterThanThreshold",
"thresholdList": [
{ "severity": "P1", "threshold": 1000 },
{ "severity": "P2", "threshold": 500 }
]
}可用运算符(APM / UModel)
| 运算符 | 说明 |
|---|---|
GreaterThanThreshold | 大于阈值 |
GreaterThanOrEqualToThreshold | 大于等于阈值 |
LessThanThreshold | 小于阈值 |
LessThanOrEqualToThreshold | 小于等于阈值 |
APM 组合条件(APM_COMPOSITE_CONDITION)
多条件组合逻辑:
{
"type": "APM_COMPOSITE_CONDITION",
"severity": "P2",
"relation": "AND",
"compareList": [
{
"aggregate": "AVG",
"measureCode": "rt",
"operator": "GreaterThanThreshold",
"threshold": 500,
"severity": "P2"
},
{
"aggregate": "SUM",
"measureCode": "errorRate",
"operator": "GreaterThanThreshold",
"threshold": 5,
"severity": "P2"
}
]
}---
UModel 条件配置
{
"type": "UMODEL_METRICSET_CONDITION",
"durationSecs": 300,
"severity": "P2",
"operator": "GreaterThanThreshold",
"threshold": 100000
}---
scheduleConfig
检测间隔配置:
| 字段 | 类型 | 说明 |
|---|---|---|
type | string | 调度类型:FIXED(固定间隔)/ CRON(定时) |
intervalSecs | integer | 调度间隔(秒),type=FIXED 时使用 |
FIXED 调度
{
"type": "FIXED",
"intervalSecs": 60
}常用间隔:60(1 分钟)、300(5 分钟)、900(15 分钟)
---
下一步
→ 步骤 4:通知(Webhook) — 调用 ListAlertWebhooks 查询 webhook,让用户选择 → 放入 notifyConfig。其他通知类型请提醒用户在云监控控制台中配置。 → cms2-step5-preview-execute.md(预览与执行)
CMS 2.0 步骤 5:预览与执行
目的
向用户展示配置摘要,获得确认后执行 manage-alert-rules CLI 命令。
---
核心规则
必须先向用户展示配置摘要并等待确认,然后再执行 CLI 命令。
⚠️ CMS 2.0 不使用联系人或联系人组。 请勿在此流程中调用PutContact、PutContactGroup或DescribeContactGroupList。通知仅通过 webhook 实现(ListAlertWebhooks)。其他通知类型请提醒用户在规则创建后到云监控控制台中配置。
---
配置摘要模板
执行前向用户展示:
| 项目 | 值 |
|---|---|
| 告警类型 | Prometheus / APM / UModel |
| Workspace | {user_provided_workspace}(🔴 用户提供) |
| Prometheus: cluster_id | {user_provided_cluster_id}(🔴 用户提供,即 instanceId) |
| APM: service_id | {user_provided_service_id}(🔴 用户提供,用于 datasourceConfig.instanceId + serviceIdList) |
| 规则名称 | (规则名称) |
| 内容模板 | (可选) |
| 数据源 | type + instanceId(如适用) |
| 查询 | (PromQL / APM 指标 / UModel 实体) |
| 严重等级 | P1/P2/P3/P4 |
| 阈值 | 运算符 + 值 |
| 持续时间 | X 秒 |
| 检测间隔 | X 秒 |
| 通知(Webhook) | 用户选择的 webhook 名称(或"无 — 请在控制台中配置") |
| 通知(其他) | ⚠️ 其他通知类型 → 创建后在云监控控制台中配置 |
| 标签 | (可选) |
| 注解 | (可选) |
---
步骤 4:查询 Webhook(通知)
在构建 CLI 命令之前,查询用户可用的 webhook:
export ALIBABA_CLOUD_USER_AGENT="AlibabaCloud-Agent-Skills/alibabacloud-cms-alert-rule-create"
aliyun cms list-alert-webhooks --page-size 50 --workspace "{user_provided_workspace}" --read-timeout 30响应包含 webhooks 数组。向用户展示列表供其选择:
| 字段 | 说明 |
|---|---|
webhookId | 唯一标识符(用于 notifyConfig) |
name | 显示名称 |
url | Webhook URL |
method | HTTP 方法(GET/POST) |
流程: 1. 调用 list-alert-webhooks 获取 webhook 列表 2. 向用户展示 webhook 列表,让其选择一个或多个 3. 如果用户需要 webhook → 将选择的 webhookId 放入 notifyConfig.channels 4. 如果没有可用 webhook 或用户需要其他通知类型(联系人组等) → 提醒用户在规则创建后到云监控控制台中配置
---
CLI 命令
export ALIBABA_CLOUD_USER_AGENT="AlibabaCloud-Agent-Skills/alibabacloud-cms-alert-rule-create"
aliyun cms manage-alert-rules --body '{
"action": "CREATE",
"workspace": "{user_provided_workspace}",
"displayName": "<rule-name>",
"contentTemplate": "",
"enabled": true,
"datasourceConfig": {
"type": "<PROMETHEUS|APM|UMODEL>",
"instanceId": "<instance-id>",
"regionId": "<region-id>"
},
"queryConfig": {
"type": "<query-type>",
...
},
"conditionConfig": {
"type": "<condition-type>",
"severity": "<P1|P2|P3|P4>",
"operator": "<operator>",
"threshold": <value>,
"durationSecs": <seconds>
},
"scheduleConfig": {
"type": "FIXED",
"intervalSecs": 60
},
"actionIntegrationConfig": {
"enabled": false,
"actions": []
},
"armsIntegrationConfig": {
"enabled": false
},
"notifyConfig": {
"type": "DIRECT_NOTIFY",
"channels": [
{
"type": "webhook",
"identifiers": ["{webhookId}"]
}
]
},
"labels": {},
"annotations": {}
}'---
通知配置(支持 Webhook)
CMS 2.0 通过 CLI 支持 webhook 通知。 其他通知类型(联系人组、钉钉等)必须在云监控控制台中配置。
Webhook 流程
1. 调用 list-alert-webhooks --page-size 50 --workspace "{user_provided_workspace}" 查询可用 webhook 2. 向用户展示 webhook 列表供其选择 3. 将选择的 webhookId 放入 notifyConfig:
"notifyConfig": {
"type": "DIRECT_NOTIFY",
"channels": [
{
"type": "webhook",
"identifiers": ["{webhookId_1}", "{webhookId_2}"]
}
]
}其他通知类型
联系人组、钉钉机器人、邮件、短信等通知类型,请在规则创建后到云监控控制台中配置:
中国地域:https://cms.console.aliyun.com/操作路径:告警规则 → 找到对应规则 → 编辑 → 通知设置
用户不需要 Webhook 的情况
如果用户明确拒绝 webhook 或没有可用 webhook,则从请求体中省略 notifyConfig,并提醒用户在控制台中配置通知。
ActionIntegrationConfig / ArmsIntegrationConfig
| 配置项 | 字段 | 类型 | 说明 |
|---|---|---|---|
| ActionIntegrationConfig | enabled | boolean | 是否启用行动集成 |
| ActionIntegrationConfig | actions | array(string) | 行动集成 ID 列表 |
| ArmsIntegrationConfig | enabled | boolean | 是否启用 ARMS 集成 |
---
完整示例
Prometheus CPU 告警
aliyun cms manage-alert-rules --body '{
"action": "CREATE",
"workspace": "{user_provided_workspace}",
"displayName": "K8s-Node-CPU-High",
"enabled": true,
"datasourceConfig": {
"type": "PROMETHEUS",
"instanceId": "{user_provided_cluster_id}",
"regionId": "cn-hangzhou"
},
"queryConfig": {
"type": "PROMETHEUS_SINGLE_QUERY",
"promQl": "100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)"
},
"conditionConfig": {
"type": "PROMETHEUS_SIMPLE_CONDITION",
"durationSecs": 300,
"severity": "P2"
},
"scheduleConfig": {"type": "FIXED", "intervalSecs": 60},
"notifyConfig": {
"type": "DIRECT_NOTIFY",
"channels": [
{"type": "webhook", "identifiers": ["my-webhook-id"]}
]
}
}'⚠️ 如果用户选择了 webhook,按上述方式包含 notifyConfig。其他通知类型请提醒用户在规则创建后到云监控控制台中配置。APM 响应时间告警
aliyun cms manage-alert-rules --body '{
"action": "CREATE",
"workspace": "{user_provided_workspace}",
"displayName": "Order-Service-RT-High",
"enabled": true,
"datasourceConfig": {
"type": "APM",
"instanceId": "{user_provided_service_id}",
"regionId": "cn-hangzhou"
},
"queryConfig": {
"type": "APM_MULTI_QUERY",
"serviceIdList": ["{user_provided_service_id}"],
"measureList": [{"measureCode": "rt", "windowSecs": 300}]
},
"conditionConfig": {
"type": "APM_SIMPLE_CONDITION",
"durationSecs": 300,
"aggregate": "AVG",
"thresholdList": [
{"severity": "P1", "threshold": 1000},
{"severity": "P2", "threshold": 500}
]
},
"scheduleConfig": {"type": "FIXED", "intervalSecs": 60},
"notifyConfig": {
"type": "DIRECT_NOTIFY",
"channels": [
{"type": "webhook", "identifiers": ["my-webhook-id"]}
]
}
}'⚠️ 如果用户选择了 webhook,按上述方式包含 notifyConfig。其他通知类型请提醒用户在规则创建后到云监控控制台中配置。---
响应处理
成功响应:
{
"data": {
"alertRule": {
"uuid": "rule-uuid-xxx",
"displayName": "...",
"enabled": true,
"...": "完整规则对象"
},
"deletedCount": 0,
"deletedUuidList": []
},
"code": "",
"success": true,
"requestId": "request-id-xxx",
"message": ""
}创建/更新操作返回data.alertRule(完整规则对象);BATCH_DELETE 操作返回data.deletedCount和data.deletedUuidList。
保存 uuid 用于后续验证和管理。
---
下一步
→ 通过 cms2-step-query.md 验证规则创建(按 uuid 查询) → 如果配置了 webhook,通知即刻生效。其他通知类型请在云监控控制台中配置(https://cms.console.aliyun.com/)
关键规则 — 详细参考
本文件包含 SKILL.md 中关键规则摘要的展开详情。规则标注有 (CMS 1.0)、(CMS 2.0) 或 (Shared) 适用范围。
---
1. 意图路由 (Shared)
根据监控目标将用户请求路由到正确的工作流:
| 用户场景 | 路由至 | API |
|---|---|---|
| 云产品系统指标(ECS、RDS、SLB、OSS、Redis 等) | CMS 1.0 工作流 | PutResourceMetricRule, DescribeMetricRuleList |
| Prometheus / APM / UModel / 自定义指标 | CMS 2.0 工作流 | ManageAlertRules, QueryAlertRules |
禁止跨版本混用 API。 CMS 1.0 API 无法处理 Prometheus/APM/UModel 数据。CMS 2.0 API 无法处理云资源指标。
---
2. 创建前查询联系人/Webhook
CMS 1.0:联系人查询
详细内容参见 step4-notification.md。创建告警规则前,必须先调用 DescribeContactGroupList 查询已有的联系人组。
CMS 2.0:Webhook 查询
强制要求:在创建任何 CMS 2.0 告警之前,必须调用 `ListAlertWebhooks`。 跳过此步骤属于严重错误。
在配置通知前,调用 ListAlertWebhooks 查询可用的 webhook。
| 操作 | API | CLI |
|---|---|---|
| 查询 webhook | ListAlertWebhooks | aliyun cms list-alert-webhooks --page-size 50 --workspace {workspace} |
- 将 webhook 列表展示给用户供其选择
- 将选中的 webhookId 写入
notifyConfig.channels - 其他通知类型(联系人组、钉钉等)→ 提醒用户在规则创建后前往云监控控制台配置
CMS 2.0 不使用联系人或联系人组。 以下 CMS 1.0 API 在 CMS 2.0 工作流中禁止使用:
-PutContact、PutContactGroup、DescribeContactGroupList
- 不得使用 CMS 1.0 通知 API 替代 CMS 2.0 webhook 查询
---
3. Resources 参数格式 (CMS 1.0)
--resources 参数必须始终显式传递,不可省略。
| 范围 | 格式 |
|---|---|
| 所有资源 | --resources '[{"resource":"_ALL"}]' |
| 单个实例 | --resources '[{"resource":"i-xxx"}]' |
| 多个实例 | --resources '[{"resource":"i-xxx"},{"resource":"i-yyy"}]' |
此规则适用于所有云产品(ECS、RDS、SLB、OSS、MongoDB 等)。
---
4. Workspace 必填 (CMS 2.0)
所有 CMS 2.0 API 调用均必须提供 workspace 参数。
| 规则 | 详情 |
|---|---|
| 来源 | 必须使用 AskUser 工具向用户询问 |
| 自动构造 | 禁止 — 不得自行生成或猜测 workspace 值(如 'default'、'default-cms-{accountId}') |
| 位置 | 包含在所有 CMS 2.0 API 的请求体中 |
| AskUser 失败 | 使用简化选项重试一次,然后报告错误并停止 — 不得使用编造的值继续执行 |
如果用户不清楚自己的 workspace,引导其在云监控控制台中查找。
---
5. Prometheus 必填参数 — cluster_id + workspace (CMS 2.0)
🔴 必须使用 AskUser 工具向用户询问 — 禁止猜测、禁止省略、禁止自动选择
| 参数 | 映射 | 获取方式 |
|---|---|---|
cluster_id | datasourceConfig.instanceId | 必须通过 AskUser 向用户询问 — 即 Prometheus 实例 ID,用户可在 ARMS 控制台找到 |
workspace | 请求体 workspace 字段 | 必须通过 AskUser 向用户询问 — 不可自行构造 |
| AskUser 失败 | — | 向用户报告错误并停止执行 |
流程: 1. 使用 AskUser 工具向用户询问 cluster_id(Prometheus 实例 ID)和 workspace 2. 将 cluster_id 用作 datasourceConfig.instanceId 3. 根据用户的监控目标(CPU、内存、Pod 重启等),生成对应的 PromQL 4. PromQL 为动态生成,不可硬编码
CLI 占位符: {user_provided_cluster_id}、{user_provided_workspace}
---
6. APM 必填参数 — service_id + workspace (CMS 2.0)
🔴 必须使用 AskUser 工具向用户询问 — 禁止猜测、禁止省略、禁止自动选择
| 参数 | 映射 | 获取方式 |
|---|---|---|
service_id | datasourceConfig.instanceId + queryConfig.serviceIdList[] | 必须通过 AskUser 向用户询问 — APM 应用的唯一标识,用户可在 ARMS 控制台的应用列表中找到 |
workspace | 请求体 workspace 字段 | 必须通过 AskUser 向用户询问 — 不可自行构造 |
| 从发现接口自动选择 | 禁止 — 发现类 API(如 ListTraceApps)仅供参考,最终选择必须由用户输入 | |
| AskUser 失败 | — | 向用户报告错误并停止执行 |
流程: 1. 使用 AskUser 工具向用户询问 service_id 和 workspace 2. 将 service_id 同时用于 datasourceConfig.instanceId 和 queryConfig.serviceIdList 3. 不得编造 service_id 或在实际 API 调用中使用占位符值
CLI 占位符: {user_provided_service_id}、{user_provided_workspace}
---
7. 必需的 API 调用 (Shared)
CMS 1.0
| 操作 | API | 用途 |
|---|---|---|
| namespace 发现 | DescribeProjectMeta | 列出云产品 namespace(当产品不明确时) |
| 指标发现 | DescribeMetricMetaList | 获取 namespace 下的可用指标(必须调用) |
| 联系人查询 | DescribeContactGroupList | 查询已有的联系人组(必须调用) |
| 创建规则 | PutResourceMetricRule | 创建告警规则 |
| 查询规则 | DescribeMetricRuleList | 查询已有的告警规则 |
CMS 2.0
| 操作 | API | 用途 |
|---|---|---|
| Webhook 查询 | ListAlertWebhooks | 查询可用的 webhook 以配置通知 |
| 创建/更新规则 | ManageAlertRules | 创建或更新 Prometheus/APM/UModel 告警规则 |
| 查询规则 | QueryAlertRules | 按类型/名称/状态查询告警规则 |
所有 CMS 2.0 API 调用均需在请求体中包含workspace参数。API 版本:2024-03-30,Endpoint:metrics.{regionId}.aliyuncs.com。
---
8. 动态指标发现 (CMS 1.0)
详细内容参见 step2-query-generation.md。关键要点: 1. 调用 describe-project-meta 列出所有可用的 namespace(当产品不明确时) 2. 调用 describe-metric-meta-list --namespace <ns> 获取可用指标 3. 将返回的指标与用户意图匹配(CPU、内存、磁盘、网络等) 4. 仅在 API 调用失败时回退到 metrics.md
---
9. CLI 命令超时 (Shared)
所有 aliyun CLI 命令必须设置超时以防止挂起:
| 操作类型 | 超时设置 | CMS 1.0 示例 | CMS 2.0 示例 |
|---|---|---|---|
| 查询(读取) | --read-timeout 30 | describe、list、get | query-alert-rules、list-alert-webhooks |
| 写入(变更) | --read-timeout 60 | put、create、update | manage-alert-rules |
如果命令在超时时间内未返回,重试一次后再报告失败。
---
10. 重复告警预检 (Shared)
创建告警规则前,检查是否已存在相同配置的规则:
CMS 1.0: 调用 describe-metric-rule-list --namespace <ns> --metric-name <metric> 检查是否有匹配的规则。
CMS 2.0: 调用 query-alert-rules 并使用适当的过滤条件(类型、名称模式)。
如果存在重复规则,通知用户并询问是跳过还是使用新名称创建。
---
11. 执行前强制确认 (Shared)
CMS 1.0:详细内容参见 step5-preview-execute.md。CMS 2.0:详细内容参见 cms2-step5-preview-execute.md。执行任何创建命令前,必须: 1. 向用户展示完整的配置摘要 2. 等待用户明确确认 3. 确认后方可执行 CLI 命令
重要:即使在自动化/模拟环境中,也必须输出配置摘要并明确声明"等待用户确认"后才能继续。不得以自动化为由跳过此步骤。
输出格式示例:
【配置摘要】
告警类型:APM/Prometheus
阈值:5%
严重级别:P2
通知方式:webhook
请确认以上配置是否正确(回复确认或修改意见):---
12. User-Agent 配置 (Shared)
所有 aliyun CLI 调用必须包含 User-Agent 请求头:
export ALIBABA_CLOUD_USER_AGENT="AlibabaCloud-Agent-Skills/alibabacloud-cms-alert-rule-create"在执行任何命令前设置此环境变量。
---
13. 网络访问限制 (Shared)
本技能仅访问阿里云 OpenAPI 端点。允许的域名:
| 域名 | 用途 | 版本 |
|---|---|---|
cms.aliyuncs.com | 云监控 API | CMS 1.0 |
metrics.{regionId}.aliyuncs.com | 云监控 API | CMS 2.0 |
sts.aliyuncs.com | STS API (GetCallerIdentity) | Shared |
ecs.aliyuncs.com | ECS 实例查询 | CMS 1.0 |
rds.aliyuncs.com | RDS 实例查询 | CMS 1.0 |
slb.aliyuncs.com | SLB 实例查询 | CMS 1.0 |
不需要也不允许访问其他外部网络。
---
14. CLI 自助发现 (Shared)
当不确定 CLI 命令语法、参数或可用子命令时,使用 --help:
# CMS 1.0
aliyun cms --help
aliyun cms <command> --help
# CMS 2.0
aliyun cms manage-alert-rules --help
aliyun cms query-alert-rules --help
aliyun cms list-alert-webhooks --help这是解决 CLI 不确定性的首选方式,而非猜测参数。
---
联系人组模糊匹配 (CMS 1.0)
当用户提到联系人组时,适用以下匹配规则:
| 用户输入 | 匹配策略 | 常见映射 |
|---|---|---|
| "运维组" / "ops" | 包含/关键词匹配 | → 运维组、ops-alert-group、SRE-Team |
| "基础设施组" | 包含/关键词匹配 | → infrastructure、infrastructure-team |
| "DBA团队" | 包含/关键词匹配 | → DBA-Alert-Group、dba-team |
| "网络组" | 包含/关键词匹配 | → network-ops、network-sre |
| 精确名称 | 直接匹配 | 如找到则使用精确名称 |
完整联系人处理流程另见 step4-notification.md。---
严重级别
CMS 1.0
| 级别 | 参数前缀 | 示例 |
|---|---|---|
| 紧急(Critical) | --escalations-critical-* | --escalations-critical-threshold 85 |
| 警告(Warn) | --escalations-warn-* | --escalations-warn-threshold 99.9 |
| 信息(Info) | --escalations-info-* | --escalations-info-threshold 50 |
CMS 2.0
| 级别 | conditionConfig 值 | 说明 |
|---|---|---|
| P1 | P1 | 紧急(Critical) |
| P2 | P2 | 警告(Warning) |
| P3 | P3 | 信息(Info) |
| P4 | P4 | 低优先级(Low) |
---
API 版本隔离 (Shared)
🔴 强制要求:CMS 2.0 告警规则只能使用以下 API:
- 创建/更新/删除:ManageAlertRules(CLI:aliyun cms manage-alert-rules)
- 查询:QueryAlertRules(CLI:aliyun cms query-alert-rules)
>
CMS 2.0 告警规则的创建或查询不允许使用任何其他 API。这是一条无例外的硬性约束。
>
如果 `ManageAlertRules` 返回错误(如 400 Bad Request),不得回退到 ARMS API(`CreateOrUpdateAlertRule`、`CreatePrometheusAlertRule`)或任何其他 API。应向用户报告错误并停止执行。
CMS 2.0 允许使用的 API
| 操作 | API | CLI | 用途 |
|---|---|---|---|
| 创建/更新/删除规则 | ManageAlertRules | aliyun cms manage-alert-rules | CMS 2.0 规则管理的唯一 API |
| 查询规则 | QueryAlertRules | aliyun cms query-alert-rules | CMS 2.0 规则查询的唯一 API |
| 查询 webhook(通知) | ListAlertWebhooks | aliyun cms list-alert-webhooks | Webhook 通知配置(不用于规则创建/查询) |
CMS 2.0 禁止使用的 API(在 CMS 2.0 工作流中)
| API | 类型 | 原因 |
|---|---|---|
PutResourceMetricRule | 创建 | 仅限 CMS 1.0 — 不支持 Prometheus/APM/UModel |
DescribeMetricRuleList | 查询 | 仅限 CMS 1.0 — 无法查询 CMS 2.0 告警规则 |
CreateOrUpdateAlertRule (ARMS) | 创建 | 禁止 — 这是 ARMS API,不是 CMS 2.0 |
CreatePrometheusAlertRule (ARMS) | 创建 | 禁止 — 这是 ARMS API,不是 CMS 2.0 |
PutContact | 联系人 | 仅限 CMS 1.0 — CMS 2.0 不使用联系人 |
PutContactGroup | 联系人 | 仅限 CMS 1.0 — CMS 2.0 不使用联系人组 |
DescribeContactGroupList | 联系人 | 仅限 CMS 1.0 — CMS 2.0 不使用联系人组 |
DescribeProjectMeta | 发现 | 仅限 CMS 1.0 — 用于云产品 namespace 发现 |
DescribeMetricMetaList | 发现 | 仅限 CMS 1.0 — 用于云产品指标发现 |
⚠️ 如果上述任何禁止 API 出现在 CMS 2.0 工作流中,属于严重错误,必须立即纠正。
CMS 1.0 禁止使用的 API(在 CMS 1.0 工作流中)
| API | 类型 | 原因 |
|---|---|---|
ManageAlertRules | 创建 | 仅限 CMS 2.0 — 用于 Prometheus/APM/UModel 告警 |
QueryAlertRules | 查询 | 仅限 CMS 2.0 — 无法查询 CMS 1.0 告警规则 |
ListAlertWebhooks | 通知 | 仅限 CMS 2.0 — CMS 1.0 使用联系人组 |
常用指标快速参考(回退备用)
首选方式:使用 aliyun cms describe-metric-meta-list --namespace <ns> 动态发现指标。本文件作为 API 调用失败时或快速离线查阅的回退参考。
---
ECS (acs_ecs_dashboard)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| CPUUtilization | CPU 利用率 | % | Average | > 85-95% |
| memory_usedutilization | 内存利用率(需安装 Agent) | % | Average | > 85-95% |
| diskusage_utilization | 磁盘使用率(需安装 Agent) | % | Average | > 85-95% |
| InternetOutRate_Percent | 出方向带宽使用率 | % | Average | > 80-95% |
| packetOutDropRates | 出方向丢包率 | % | Maximum | > 1-5% |
| packetInDropRates | 入方向丢包率 | % | Maximum | > 1-5% |
---
RDS MySQL (acs_rds_dashboard)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| CpuUsage | CPU 使用率 | % | Average | > 80-90% |
| DiskUsage | 磁盘使用率 | % | Average | > 80-85% |
| MemoryUsage | 内存使用率 | % | Average | > 80-90% |
| ConnectionUsage | 连接数使用率 | % | Average | > 70-80% |
| IOPSUsage | IOPS 使用率 | % | Average | > 70-80% |
| DataDelay | 只读副本数据延迟 | s | Average | > 30-60s |
| MySQL_IbufReadHit | InnoDB 缓冲池命中率 | % | Average | < 95% |
---
RDS PostgreSQL (acs_rds_dashboard)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| cpu_usage | CPU 使用率 | % | Average | > 80-90% |
| iops_usage | IOPS 使用率 | % | Average | > 70-80% |
| local_fs_size_usage | 本地磁盘使用率 | % | Average | > 80-85% |
| conn_usgae | 连接数使用率 | % | Average | > 70-80% |
| PG_RO_ReadLag | 只读实例延迟 | s | Average | > 10-30s |
---
SQL Server (acs_rds_dashboard)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| SQLServer_CpuUsage | CPU 使用率 | % | Average | > 80-90% |
| SQLServer_DiskUsage | 磁盘使用率 | % | Average | > 80-85% |
| SQLServer_MemoryUsage | 内存使用率 | % | Average | > 80-90% |
---
RDS 集群 (acs_rds_dashboard)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| Cluster_CpuUsage | 集群 CPU 使用率 | % | Average | > 80-90% |
| Cluster_MemoryUsage | 集群内存使用率 | % | Average | > 80-90% |
| Cluster_IOPSUsage | 集群 IOPS 使用率 | % | Average | > 70-80% |
---
SLB (acs_slb_dashboard)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| DropConnection | 丢弃连接数 | count/s | Average | > 0 |
| DropTrafficRX | 丢弃入方向流量 | bit/s | Average | > 0 |
| DropTrafficTX | 丢弃出方向流量 | bit/s | Average | > 0 |
| HeathyServerCount | 健康后端服务器数 | count | Average | < 预期值 |
| UnhealthyServerCount | 不健康后端服务器数 | count | Average | > 0 |
---
OSS (acs_oss_dashboard)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| Availability | 服务可用性 | % | Value | < 99.9% |
| RequestValidRate | 有效请求率 | % | Value | < 99% |
| TotalRequestCount | 总请求数 | count | Value | 视业务而定 |
注意:使用 --resources '[{"resource":"_ALL"}]' 可监控某地域下所有 Bucket。
---
MongoDB (acs_mongodb)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| CPUUtilization | CPU 利用率(副本集) | % | Average | > 80% |
| MemoryUtilization | 内存利用率 | % | Average | > 80% |
| DiskUtilization | 磁盘利用率 | % | Average | > 80% |
| IOPSUtilization | IOPS 利用率 | % | Average | > 70-80% |
| ConnectionUtilization | 连接数利用率 | % | Average | > 70-80% |
| ShardingCPUUtilization | 分片集群 CPU 利用率 | % | Average | > 80% |
| ShardingDiskUtilization | 分片集群磁盘利用率 | % | Average | > 80% |
---
Redis (acs_kvstore)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| StandardCpuUsage | 标准版 CPU 使用率 | % | Average | > 80% |
| StandardMemoryUsage | 标准版内存使用率 | % | Average | > 80% |
| StandardConnectionUsage | 标准版连接数使用率 | % | Average | > 70-80% |
| ShardingCpuUsage | 集群版 CPU 使用率 | % | Average | > 80% |
| ShardingMemoryUsage | 集群版内存使用率 | % | Average | > 80% |
---
PolarDB (acs_polardb)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| cluster_cpu_utilization | MySQL 集群 CPU 利用率 | % | Average | > 80% |
| cluster_memory_utilization | MySQL 集群内存利用率 | % | Average | > 80% |
| pg_cpu_total | PostgreSQL CPU 使用率 | % | Average | > 80% |
| pg_conn_usage | PostgreSQL 连接数使用率 | % | Average | > 70-80% |
| oracle_cpu_total | Oracle CPU 使用率 | % | Average | > 80% |
---
Elasticsearch (acs_elasticsearch)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| ClusterStatus | 集群健康状态(0=green,1=yellow,2=red) | value | Value | >= 2 |
| NodeDiskUtilization | 节点磁盘利用率 | % | Average | > 75-85% |
| NodeHeapMemoryUtilization | 节点堆内存利用率 | % | Average | > 80% |
---
Hologres (acs_hologres)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| cpu_usage | CPU 使用率 | % | Average | > 90-99% |
| memory_usage | 内存使用率 | % | Average | > 85-90% |
| storage_usage_percent | 存储使用率 | % | Average | > 80% |
| connection_usage | 连接数使用率 | % | Average | > 70-80% |
---
NAT 网关 (acs_nat_gateway)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| SnatConnection | SNAT 连接数 | count | Average | 视业务而定 |
| SessionNewLimitDropConnection | 新建会话丢弃数 | count | Average | > 0-3 |
| SessionActiveConnectionWaterLever | 活跃连接水位 | % | Average | > 80-90% |
---
EIP (acs_vpc_eip)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| net_rx.rate | 入方向带宽 | bytes/s | Average | 接近带宽上限 |
| net_tx.rate | 出方向带宽 | bytes/s | Average | 接近带宽上限 |
| out_ratelimit_drop_speed | 限速丢包速率 | packets/s | Average | > 0 |
---
OceanBase (acs_oceanbase)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| cpu_util_instance | 实例 CPU 利用率 | % | Average | > 90-95% |
| disk_ob_data_usage_instance | OB 数据盘使用率 | % | Average | > 85-88% |
| memory_used_percent_instance | 实例内存使用率 | % | Average | > 80-90% |
---
DRDS (acs_drds)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| CPUUsageOfCN | 计算节点 CPU 使用率 | % | Average | > 85-90% |
| DiskUsageOfDN | 数据节点磁盘使用率 | % | Average | > 85-90% |
| ConnUsageOfDN | 数据节点连接数使用率 | % | Average | > 70-80% |
---
GPDB / AnalyticDB PostgreSQL (acs_hybriddb)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| adbpg_query_blocked | 查询阻塞数 | count | Average | > 0 |
| node_mem_used_percent | 节点内存使用率 | % | Average | > 80-85% |
| node_cpu_used_percent | 节点 CPU 使用率 | % | Average | > 80-85% |
---
HBase (acs_hbase)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| LoadPerCpu | 每 CPU 负载 | value | Average | > 2-3 |
| cpu_idle | CPU 空闲百分比 | % | Average | < 15-20% |
| CapacityUsedPercent | 存储容量使用率 | % | Average | > 75-80% |
---
RocketMQ (acs_rocketmq)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| ThrottledReceiveRequestsPerGid | 每 GID 被限流的接收请求数 | count | Average | >= 1 |
| MessageAccumulation | 消息堆积量 | count | Average | 视业务而定 |
| ConsumerLag | 消费延迟 | count | Average | 视业务而定 |
---
KMS (acs_kms)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| code_5xx_1m | 每分钟服务端错误(5xx) | count | Sum | > 0 |
| code_4xx_1m | 每分钟客户端错误(4xx) | count | Sum | 视业务而定 |
| latency_1m | 每分钟请求延迟 | ms | Average | > 3000-5000ms |
---
SWAS / 轻量应用服务器 (acs_swas)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| CPUUtilization | CPU 利用率 | % | Average | > 85-90% |
| MemoryUtilization | 内存利用率 | % | Average | > 85-90% |
| DiskUtilization | 磁盘利用率 | % | Average | > 80-85% |
---
Serverless 应用引擎 (acs_serverless)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| cpu | CPU 使用率 | % | Average | > 90-95% |
| memoryPercent | 内存使用率 | % | Average | > 90-95% |
---
EMR (acs_emr)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| serverless_starrocks_be_cpu_idle | StarRocks BE CPU 空闲率 | % | Average | < 10-15% |
| serverless_starrocks_be_disks_utilization | StarRocks BE 磁盘利用率 | % | Average | > 80% |
---
CloudBox (acs_cloudbox)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| idc_rack_temperature | 机柜温度 | °C | Average | > 30°C 或 < 5°C |
| ebs_capacity_utilization | EBS 容量利用率 | % | Average | > 80% |
---
IoT (acs_iot)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| MessageWatermarkTps_instance | 消息 TPS 水位 | % | Average | > 85-90% |
| OnlineDeviceCount | 在线设备数 | count | Value | 视业务而定 |
---
HSM (acs_hsm)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| Hsmhealthy | HSM 健康状态(1=健康,0=不健康) | value | Value | == 0 |
| CPUUtilization | CPU 利用率 | % | Average | > 80-85% |
---
Milvus (acs_milvus)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| ProcessCPUUtilizationV2 | 进程 CPU 利用率 | % | Average | > 85-90% |
| ProcessResidentMemoryUtilizationV2 | 进程内存利用率 | % | Average | > 80% |
---
OpenSearch (acs_opensearch)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| DocSizeRatiobyApp | 文档存储使用率 | % | Average | > 80-85% |
| LossQPSbyApp | 应用丢失 QPS | count | Sum | > 0 |
---
HBR / 混合云备份 (acs_hbr)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| hw_appliance_disk_used_percent | 一体机磁盘使用率 | % | Average | > 80-85% |
---
CEN / 云企业网 (acs_cen)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| InternetOutRatePercentByConnectionRegion | 跨地域带宽使用率 | % | Average | > 75-80% |
---
共享带宽 (acs_bandwidth_package)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| net_tx.ratePercent | 出方向带宽使用率 | % | Average | > 80% |
| net_rx.ratePercent | 入方向带宽使用率 | % | Average | > 80% |
---
SLS 日志服务 (acs_sls_dashboard)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| ConsumerGroupFallBehind | 消费组落后时间 | s | Average | > 300-600s |
| LogInflow | 日志写入流量 | bytes/s | Average | 视业务而定 |
---
E-HPC (acs_ehpc)
| MetricName | 描述 | 单位 | Statistics | 典型阈值 |
|---|---|---|---|---|
| cluster_cpu_utilization | 集群 CPU 利用率 | % | Average | > 80-90% |
| cluster_memory_utilization | 集群内存利用率 | % | Average | > 80-90% |
---
说明
- 以上仅为可用指标的子集。请使用
describe-metric-meta-listAPI 获取完整列表。 - 阈值为参考值,请根据实际工作负载和 SLA 要求进行调整。
- 部分指标需要安装云监控 Agent(如 ECS 内存、磁盘指标)。
- Statistics 列显示最常用的聚合方式。部分指标支持多种聚合方式(Average、Maximum、Minimum、Value、Sum)。
- 对于集群/分片类产品,请使用对应的指标变体(如 MongoDB 分片使用
ShardingCPUUtilization,Redis 标准版使用StandardCpuUsage)。
Prometheus 指标参考
本文档包含容器和应用监控的常用 PromQL 模式及 ARMS Prometheus 指标。
ARMS Prometheus 集群类型
| 集群类型 | 描述 | Cluster ID 格式 |
|---|---|---|
| 托管版 Prometheus | ARMS 全托管 Prometheus | c<32位字母数字> |
| 容器服务 | ACK Kubernetes 集群 | c<32位字母数字> |
| 自建接入 | 自建 Prometheus | 用户自定义 |
常用 PromQL 模式
Kubernetes 节点指标
| 指标 | PromQL 表达式 | 描述 |
|---|---|---|
| CPU 使用率 | 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) | 节点 CPU 使用百分比 |
| 内存使用率 | (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 | 内存使用百分比 |
| 磁盘使用率 | (node_filesystem_size_bytes - node_filesystem_free_bytes) / node_filesystem_size_bytes * 100 | 磁盘使用百分比 |
| 网络接收速率 | irate(node_network_receive_bytes_total[5m]) | 网络接收速率 |
| 网络发送速率 | irate(node_network_transmit_bytes_total[5m]) | 网络发送速率 |
| 系统负载 | node_load1 / node_load5 / node_load15 | 系统平均负载 |
Kubernetes Pod/容器指标
| 指标 | PromQL 表达式 | 描述 |
|---|---|---|
| 容器 CPU 使用率 | rate(container_cpu_usage_seconds_total[5m]) | 容器 CPU 使用速率 |
| 容器内存使用量 | container_memory_usage_bytes | 容器内存使用量 |
| 容器重启 | rate(kube_pod_container_status_restarts_total[10m]) | Pod 重启速率 |
| Pod 未就绪 | kube_pod_status_ready{condition="false"} | 未处于就绪状态的 Pod |
| OOM 被杀 | kube_pod_container_status_terminated_reason{reason="OOMKilled"} | 因 OOM 被终止的容器 |
| 镜像拉取错误 | kube_pod_container_status_waiting_reason{reason="ImagePullBackOff"} | 镜像拉取失败 |
应用性能指标(APM)
| 指标 | PromQL 表达式 | 描述 |
|---|---|---|
| 错误率 | sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) | HTTP 5xx 错误率 |
| 请求速率 | sum(rate(http_requests_total[5m])) | 每秒请求数 |
| P95 延迟 | histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)) | 第 95 百分位延迟 |
| P99 延迟 | histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)) | 第 99 百分位延迟 |
| 活跃连接数 | sum(http_connections_active) | 活跃 HTTP 连接数 |
| JVM 堆使用率 | jvm_memory_used_bytes{area="heap"} / jvm_memory_max_bytes{area="heap"} | JVM 堆内存使用比例 |
| GC 暂停时间 | rate(jvm_gc_pause_seconds_sum[5m]) | GC 暂停时间速率 |
数据库指标
| 指标 | PromQL 表达式 | 描述 |
|---|---|---|
| MySQL 连接数 | mysql_global_status_threads_connected | MySQL 活跃连接数 |
| MySQL 慢查询 | rate(mysql_global_status_slow_queries[5m]) | 慢查询速率 |
| Redis 内存使用率 | redis_memory_used_bytes / redis_memory_max_bytes | Redis 内存使用率 |
| Redis 连接数 | redis_connected_clients | Redis 客户端连接数 |
PromQL 运算符参考
比较运算符
| 运算符 | 描述 | 示例 |
|---|---|---|
== | 等于 | up == 1 |
!= | 不等于 | up != 1 |
> | 大于 | cpu_usage > 80 |
< | 小于 | free_memory < 1000000000 |
>= | 大于等于 | disk_usage >= 85 |
<= | 小于等于 | available_nodes <= 2 |
聚合运算符
| 运算符 | 描述 | 示例 |
|---|---|---|
sum() | 求和 | sum(rate(http_requests_total[5m])) |
avg() | 平均值 | avg(cpu_usage) |
max() | 最大值 | max(memory_usage) |
min() | 最小值 | min(disk_free) |
count() | 计数 | count(up == 1) |
rate() | 每秒速率 | rate(http_requests_total[5m]) |
irate() | 瞬时速率 | irate(cpu_seconds_total[5m]) |
时间范围
| 范围 | 描述 | 适用场景 |
|---|---|---|
[1m] | 1 分钟 | 高频指标 |
[5m] | 5 分钟 | 标准评估窗口 |
[10m] | 10 分钟 | 更平滑的趋势 |
[30m] | 30 分钟 | 长期趋势 |
[1h] | 1 小时 | 日常趋势 |
告警阈值建议
| 指标 | 警告阈值 | 紧急阈值 | 原因 |
|---|---|---|---|
| CPU 使用率 | 70% | 85% | 为突发峰值预留空间 |
| 内存使用率 | 75% | 90% | 防止 OOM 终止 |
| 磁盘使用率 | 80% | 90% | 预留清理时间 |
| 错误率 | 1% | 5% | 平衡灵敏度 |
| P95 延迟 | 500ms | 1000ms | 用户体验阈值 |
| Pod 重启 | 0.1 次/分 | 0.5 次/分 | 崩溃循环检测 |
常用标签选择器
| 标签 | 描述 | 示例 |
|---|---|---|
instance | 目标实例 | instance="192.168.1.1:9100" |
job | 采集任务名称 | job="kubernetes-nodes" |
namespace | K8s namespace | namespace="production" |
pod | Pod 名称 | pod="nginx-7d4c7b8c5-x2v9p" |
container | 容器名称 | container="nginx" |
status | HTTP 状态码 | status=~"5.." |
持续时间参数指南
Prometheus 规则中的 duration 参数指定条件必须持续多长时间才会触发告警:
| 持续时间 | 适用场景 |
|---|---|
60s | 快速响应型告警(高 CPU、内存) |
300s(5 分钟) | 标准告警(错误率、延迟) |
600s(10 分钟) | 趋势类告警(磁盘增长) |
900s(15 分钟) | 稳定性告警(Pod 健康状态) |
注解最佳实践
在 Prometheus 告警中建议包含以下标准注解:
| 注解 | 用途 | 示例 |
|---|---|---|
message | 人类可读的告警描述 | "CPU usage is above 80%" |
runbook_url | 故障处理手册链接 | "https://wiki/runbooks/high-cpu" |
severity | 告警严重级别 | "critical" |
team | 负责团队 | "platform" |
RAM 权限
本技能所需的最小权限。这是一个写操作技能,用于创建告警规则、联系人和联系人组(CMS 1.0),以及创建/查询高级告警规则(CMS 2.0)。
CMS 1.0 告警权限
| 权限 | 用途 | 使用阶段 |
|---|---|---|
cms:DescribeProjectMeta | 列出云产品 namespace | 步骤 1/2 |
cms:DescribeMetricMetaList | 查询 namespace 下的可用指标 | 步骤 2 |
cms:DescribeContactGroupList | 查询已有的联系人组 | 步骤 4 |
cms:PutContact | 创建新的告警联系人 | 步骤 4 |
cms:PutContactGroup | 创建新的联系人组 | 步骤 4 |
cms:PutResourceMetricRule | 创建告警规则 | 步骤 5 |
cms:DescribeMetricRuleList | 验证规则创建 / 查询规则 | 步骤 6 / 查询 |
CMS 2.0 告警权限
| 权限 | 用途 | 使用阶段 |
|---|---|---|
cms:ManageAlertRules | 创建/更新/删除 CMS 2.0 告警规则(Prometheus/APM/UModel) | 步骤 5(执行) |
cms:QueryAlertRules | 查询 CMS 2.0 告警规则 | 查询 / 重复预检 |
cms:ListAlertWebhooks | 查询可用的 webhook 以配置通知 | 步骤 4(Webhook 查询) |
实例查询权限(可选,仅限 CMS 1.0)
仅在列出云资源实例以创建 CMS 1.0 告警时需要:
| 权限 | 用途 | 使用阶段 |
|---|---|---|
ecs:DescribeInstances | 列出 ECS 实例 | 步骤 1 |
rds:DescribeDBInstances | 列出 RDS 实例 | 步骤 1 |
slb:DescribeLoadBalancers | 列出 SLB 实例 | 步骤 1 |
Step: 查询告警规则
目的
查询和列出已有的 CMS 告警规则,支持灵活筛选。
---
适用场景
当用户想要:
- 列出已有告警规则(按产品、状态或名称)
- 搜索特定告警规则
- 检查告警规则状态
- 验证某条规则是否已存在
---
CLI 命令
aliyun cms describe-metric-rule-list [filters]可用筛选条件
| 参数 | CLI 标志 | 描述 | 示例 |
|---|---|---|---|
| Namespace | --namespace | 按云产品过滤 | acs_ecs_dashboard |
| MetricName | --metric-name | 按指标过滤 | cpu_total |
| RuleName | --rule-name | 按规则名称过滤(模糊匹配) | ECS-CPU |
| AlertState | --alert-state | 按告警状态过滤 | OK、ALARM、INSUFFICIENT_DATA |
| EnableState | --enable-state | 按启用状态过滤 | true、false |
| RuleIds | --rule-ids | 查询特定规则(逗号分隔) | rule-id-1,rule-id-2 |
| Page | --page | 页码(默认:1) | 1 |
| PageSize | --page-size | 每页条数(默认:10) | 50 |
---
常用查询示例
列出某产品的所有规则
aliyun cms describe-metric-rule-list --namespace acs_ecs_dashboard --page-size 50按名称查找规则
aliyun cms describe-metric-rule-list --rule-name "CPU"列出处于 ALARM 状态的规则
aliyun cms describe-metric-rule-list --alert-state ALARM查看特定规则
aliyun cms describe-metric-rule-list --rule-ids "rule-id-xxx"---
响应格式化
以清晰的表格格式向用户展示查询结果:
| 字段 | 描述 |
|---|---|
| RuleId | 告警规则 ID |
| RuleName | 告警规则名称 |
| Namespace | 云产品命名空间 |
| MetricName | 监控指标 |
| AlertState | 当前状态(OK / ALARM / INSUFFICIENT_DATA) |
| EnableState | 是否启用 |
| ContactGroups | 通知联系人组 |
| Resources | 监控资源范围 |
---
工作流程
1. 识别用户的查询意图和所需筛选条件 2. 使用相应筛选条件构建 CLI 命令 3. 执行查询 4. 格式化并向用户展示结果 5. 如果用户想要执行操作(修改/删除),告知本技能仅支持创建 — 建议使用控制台进行修改
Step 0: 意图路由
目的
识别用户的告警意图,并路由到正确的工作流(CMS 1.0 或 CMS 2.0,创建或查询)。
适用场景
当用户提到与告警相关的关键词时,需要判断:(1) 使用哪个版本,(2) 用户想要创建还是查询。
---
路由决策
| 条件 | 操作 |
|---|---|
| 云产品系统指标(ECS、RDS、SLB、OSS、Redis、MongoDB…)— 创建 | → CMS 1.0 创建流程(step1-context-lock.md) |
| 云产品系统指标 — 查询 | → CMS 1.0 查询流程(step-query.md) |
| Prometheus / PromQL / K8s / 容器 / 集群监控 — 创建 | → CMS 2.0 创建流程(cms2-step1-context-lock.md) |
| APM / 应用监控 / JVM / 响应时间 / 慢SQL — 创建 | → CMS 2.0 创建流程(cms2-step1-context-lock.md) |
| UModel / AI 监控 / Token 用量 — 创建 | → CMS 2.0 创建流程(cms2-step1-context-lock.md) |
| 自定义指标 / 非云产品监控 — 创建 | → CMS 2.0 创建流程(cms2-step1-context-lock.md) |
| Prometheus / APM / UModel 告警规则 — 查询 | → CMS 2.0 查询流程(cms2-step-query.md) |
---
CMS 1.0 关键词(云产品系统指标)
| 用户关键词 | 告警类型 | Namespace |
|---|---|---|
| ECS, 云服务器, instance, server | ECS | acs_ecs_dashboard |
| RDS, MySQL, 数据库, database | RDS | acs_rds_dashboard |
| SLB, 负载均衡, load balancer | SLB | acs_slb_dashboard |
| Redis, 缓存, KVStore, cache | Redis | acs_kvstore |
| OSS, 对象存储, bucket, storage | OSS | acs_oss_dashboard |
| MongoDB, Mongo, 文档数据库 | MongoDB | acs_mongodb |
| PolarDB, 极致数据库 | PolarDB | acs_polardb |
| Elasticsearch, ES, 搜索 | Elasticsearch | acs_elasticsearch |
| NAT, NAT网关, nat gateway | NAT Gateway | acs_nat_gateway |
| EIP, 弹性公网IP, elastic IP | EIP | acs_vpc_eip |
| HBase | HBase | acs_hbase |
| Hologres, 实时数仓 | Hologres | acs_hologres |
| DRDS, 分布式数据库 | DRDS | acs_drds |
| OceanBase, OB | OceanBase | acs_oceanbase |
| AnalyticDB, GPDB, 分析型数据库 | GPDB | acs_hybriddb |
| RocketMQ, 消息队列 | RocketMQ | acs_rocketmq |
| SWAS, 轻量服务器 | SWAS | acs_swas |
| KMS, 密钥管理, key management | KMS | acs_kms |
| Milvus, 向量数据库 | Milvus | acs_milvus |
---
CMS 2.0 关键词(高级监控)
| 用户关键词 | 告警子类型 |
|---|---|
| Prometheus, PromQL, K8s, Kubernetes, 容器, Pod, Node, 集群, container, cluster | Prometheus |
| APM, 应用监控, JVM, 响应时间, 慢SQL, 异常率, 链路, application monitoring, response time | APM |
| UModel, 大模型, AI应用, Token, 统一模型, AI monitoring | UModel |
| 自定义指标, custom metrics, 或任何非云产品监控类型 | CMS 2.0(请用户确认子类型) |
---
核心规则
识别用户的监控目标并路由到正确的工作流。绝不混用 CMS 1.0 和 CMS 2.0 的 API。
---
意图识别
创建告警意图
| 用户表达 | 操作 | 原因 |
|---|---|---|
| "监控我的 ECS CPU" | → CMS 1.0 创建流程 | 明确的云资源指标 |
| "RDS 连接数超过 90% 时告警" | → CMS 1.0 创建流程 | 明确的云资源指标 |
| "为K8s集群创建Prometheus告警" | → CMS 2.0 创建流程 | Prometheus 监控 |
| "给应用配置APM响应时间告警" | → CMS 2.0 创建流程 | APM 监控 |
| "创建UModel Token消耗告警" | → CMS 2.0 创建流程 | UModel 监控 |
| "创建一个告警"(模糊表达) | 追问:"您要监控什么类型的资源?云产品资源(ECS/RDS/SLB等) → CMS 1.0 流程;Prometheus/APM/UModel → CMS 2.0 流程。" | 需要澄清 |
查询告警意图
| 用户表达 | 操作 |
|---|---|
| "列出所有ECS告警规则" / "List all ECS alert rules" | → CMS 1.0 查询(step-query.md) |
| "查看告警规则" / "Show alert rules" | → CMS 1.0 查询(step-query.md) |
| "哪些规则处于告警状态" / "Which rules are in ALARM state" | → CMS 1.0 查询(step-query.md) |
| "查看Prometheus告警规则" | → CMS 2.0 查询(cms2-step-query.md) |
| "列出APM应用告警规则" | → CMS 2.0 查询(cms2-step-query.md) |
| "查看UModel/大模型告警规则" | → CMS 2.0 查询(cms2-step-query.md) |
查询关键词:查看、列出、查询、搜索、查找、检查、list、view、query、search、find、show、check
---
未知产品处理
如果用户提到的产品不在关键词映射表中: 1. 请用户确认产品名称 2. 调用 aliyun cms describe-project-meta --page-size 100 搜索匹配的 namespace 3. 如果找到,继续 CMS 1.0 工作流 4. 如果未找到,告知用户该产品可能不支持 CMS 指标告警
---
日志告警场景(不支持)
如果用户描述的是基于日志的告警场景(例如"日志中 500 错误超过 10 次时告警"),回复:
⚠️ 本技能支持以下告警类型:
- CMS 1.0:云产品指标(ECS CPU/内存/磁盘、RDS 连接数、SLB 流量等)
- CMS 2.0:Prometheus 指标、APM 应用监控、UModel AI 模型监控
日志类告警(如错误计数、关键词监控)不在本技能支持范围内。---
下一步
| 意图 | 版本 | 参考文档 |
|---|---|---|
| 创建云资源告警 | CMS 1.0 | → step1-context-lock.md |
| 查询云资源告警规则 | CMS 1.0 | → step-query.md |
| 创建 Prometheus/APM/UModel 告警 | CMS 2.0 | → cms2-step1-context-lock.md |
| 查询 Prometheus/APM/UModel 规则 | CMS 2.0 | → cms2-step-query.md |
Step 1: 上下文锁定
目的
收集告警类型所需的定位参数,作为后续查询生成的上下文。
---
CMS 1.0 上下文
必需参数
| 参数 | 必填 | 描述 | 示例 |
|---|---|---|---|
namespace | 是 | 云产品命名空间 | acs_ecs_dashboard |
regionId | 否 | 地域(默认:当前地域) | cn-hangzhou |
resources | 是 | 实例范围 | [{"resource":"_ALL"}] |
常用 Namespace 映射
| 产品 | Namespace | 实例查询 CLI |
|---|---|---|
| ECS | acs_ecs_dashboard | aliyun ecs describe-instances --region-id <region> |
| RDS MySQL | acs_rds_dashboard | aliyun rds describe-db-instances --region-id <region> |
| SLB | acs_slb_dashboard | aliyun slb describe-load-balancers --region-id <region> |
| Redis | acs_kvstore | aliyun r-kvstore describe-instances --region-id <region> |
| OSS | acs_oss_dashboard | 对所有 bucket 使用 [{"resource":"_ALL"}] |
| MongoDB | acs_mongodb | aliyun dds describe-db-instances --region-id <region> |
| PolarDB | acs_polardb | aliyun polardb describe-db-clusters --region-id <region> |
| Elasticsearch | acs_elasticsearch | aliyun elasticsearch list-instance --region-id <region> |
| NAT Gateway | acs_nat_gateway | aliyun vpc describe-nat-gateways --region-id <region> |
| EIP | acs_vpc_eip | aliyun vpc describe-eip-addresses --region-id <region> |
| HBase | acs_hbase | 不适用(从控制台获取 instanceId) |
| Hologres | acs_hologres | 不适用(从控制台获取 instanceId) |
| DRDS | acs_drds | 不适用(从控制台获取 instanceId) |
| OceanBase | acs_oceanbase | 不适用(从控制台获取 instanceId) |
| GPDB (AnalyticDB PG) | acs_hybriddb | 不适用(从控制台获取 instanceId) |
| RocketMQ | acs_rocketmq | 不适用(从控制台获取 instanceId) |
| SWAS(轻量服务器) | acs_swas | 不适用(从控制台获取 instanceId) |
| Serverless | acs_serverless | 不适用(从控制台获取 instanceId) |
| CEN(云企业网) | acs_cen | 不适用(从控制台获取 instanceId) |
| KMS | acs_kms | 不适用(从控制台获取 instanceId) |
| IoT | acs_iot | 不适用(从控制台获取 instanceId) |
| CloudBox | acs_cloudbox | 不适用(从控制台获取 instanceId) |
| Milvus | acs_milvus | 不适用(从控制台获取 instanceId) |
| EMR | acs_emr | 不适用(从控制台获取 instanceId) |
| Shared Bandwidth | acs_bandwidth_package | 不适用(从控制台获取 instanceId) |
动态 Namespace 发现
如果用户的产品不在上述常用映射中,可动态发现 namespace:
aliyun cms describe-project-meta --page-size 100在返回列表中搜索匹配的 namespace。响应包含 Namespace 和 Description 字段。
提示:使用 --labels '[{"name":"product","value":"<ProductName>"}]' 按产品名称过滤。Resources 格式(重要)
标准格式: [{"resource":"<instance-id>"}]
示例:
| 场景 | Resources 值 |
|---|---|
| 所有资源(任意产品) | [{"resource":"_ALL"}] |
| 单个 ECS 实例 | [{"resource":"i-bp1234567890abcdef"}] |
| 多个实例 | [{"resource":"i-bp123456"},{"resource":"i-bp789012"}] |
全部资源监控
当用户希望监控某产品的所有实例(而非指定实例)时,使用 _ALL:
--resources '[{"resource":"_ALL"}]'此格式适用于所有产品(ECS、RDS、SLB、OSS、MongoDB、Redis 等)。控制台将显示"关联全部资源"。
仅在监控特定实例时才指定具体的资源 ID。
---
参数处理规则
类型
| 类型 | 示例 | 处理方式 |
|---|---|---|
| 选择已有 | 实例、联系人组 | 查询已有资源,提供列表供选择 |
| 建议 + 确认 | 告警名称、描述 | 生成建议值,请用户确认或修改 |
| 用户必须输入 | 手机号、邮箱(创建时) | 仅在创建新资源时询问 |
告警名称(建议 + 确认)
模型: "根据您的需求,建议告警名称为:
`ECS_CPU_Utilization_Alert`
您可以确认此名称或提供您偏好的名称:"
用户: "改成 prod-ecs-cpu-high"
模型: "好的,使用名称:`prod-ecs-cpu-high`"---
下一步
→ step2-query-generation.md
Step 2: 查询生成
目的
发现并选择告警规则所需的正确指标。
---
动态指标发现(主要方法)
关键规则
必须调用 `describe-metric-meta-list` API 来发现指标。不要仅依赖硬编码的指标列表。
第 1 步:查询可用指标
在 Step 1 确定 namespace 后,查询所有可用指标:
aliyun cms describe-metric-meta-list \
--namespace "<namespace>" \
--page-size 100示例输出:
{
"Resources": {
"Resource": [
{
"MetricName": "CPUUtilization",
"Description": "CPU utilization rate",
"Unit": "%",
"Statistics": "Average,Minimum,Maximum",
"Periods": "60,300,900",
"Dimensions": "userId,instanceId"
}
]
}
}第 2 步:将用户意图匹配到指标
根据用户的描述,匹配到相应的指标:
| 用户意图 | 常用 MetricName 关键词 |
|---|---|
| CPU 使用率 | CPU, cpu |
| 内存使用率 | Memory, memory, Mem |
| 磁盘空间/使用率 | Disk, disk, Storage, storage |
| 网络流量 | Net, net, Traffic, Bandwidth, Rate |
| 连接数 | Connection, connection, Conn, conn |
| IOPS | IOPS, iops, IO |
| 延迟 | Latency, latency, Delay, delay |
| 错误/故障 | Error, error, Fail, fail, Drop |
| 负载/队列 | Load, Queue, queue |
第 3 步:与用户确认
展示匹配到的指标并请用户确认:
根据您的需求,我找到了以下匹配的指标:
1. CPUUtilization
- 描述:CPU 使用率
- 单位:%
- 统计方式:Average、Minimum、Maximum
您要使用此指标,还是选择其他指标?第 4 步:提取关键参数
从选定指标的元数据中提取:
- MetricName:用于
--metric-name参数 - Statistics:默认推荐
Average,除非用户另有指定;OSS/特殊指标使用Value - Periods:用于验证
--interval参数 - Dimensions:了解所需的资源标识符
---
CLI 帮助发现
如果不确定命令语法或参数:
# 列出所有 CMS 命令
aliyun cms --help
# 显示特定命令的详细用法
aliyun cms describe-metric-meta-list --help这将显示可用参数、必填字段和使用示例。
---
静态参考(备选方案)
如果 describe-metric-meta-list API 调用失败(超时、认证错误等),回退到 metrics.md 中的常用指标参考。
详见 metrics.md 中的常用指标快速参考表。
---
下一步
→ step3-detection-config.md
Step 3: 检测配置
目的
配置触发条件和高级设置。
---
配置项
| 项目 | 描述 | 默认值 |
|---|---|---|
| 检查频率 | 每 N 分钟检查一次 | 1 分钟 |
| 触发条件 | 比较逻辑 + 阈值 | 值 > 阈值 |
| 连续周期数 | 连续 N 个周期满足条件 | 3 次 |
| 严重级别 | Critical / Warn / Info | Critical |
| 无数据告警 | 数据缺失时是否告警 | 否 |
---
检查频率(建议 + 确认)
检查频率默认为 1 分钟,需与用户确认:
模型: "检查频率默认为 1 分钟。您需要调整吗?
常用选项:1 分钟 / 5 分钟 / 15 分钟 / 1 小时"
用户: "用默认的" → 使用 1 分钟
用户: "每 5 分钟检查一次" → 使用 5 分钟---
比较运算符
| 运算符 | 含义 | CLI 值 |
|---|---|---|
>= | 大于等于 | GreaterThanOrEqualToThreshold |
> | 大于 | GreaterThanThreshold |
<= | 小于等于 | LessThanOrEqualToThreshold |
< | 小于 | LessThanThreshold |
== | 等于 | EqualToThreshold |
!= | 不等于 | NotEqualToThreshold |
---
单位自动适配
自动识别指标单位并转换:
| 用户输入 | 指标单位 | 转换结果 |
|---|---|---|
| "超过 1G" | Byte | 1073741824 |
| "超过 1s" | Millisecond | 1000 |
| "超过 80%" | Percentage | 80 |
---
下一步
→ step4-notification.md
Step 4: 通知配置
目的
配置告警通知渠道和接收人。
---
核心规则
强制要求:必须先查询已有的联系人/联系人组,供用户选择。
此步骤为必选项,不可跳过。
联系人处理流程
1. 用户未提供联系人 → 查询并列出已有联系人/联系人组供选择
2. 用户提供了联系人 → 检查是否存在
- 精确匹配 → 直接使用
- 部分/模糊匹配 → 使用最接近的匹配项
- 无匹配 → 协助用户创建不要直接向用户索要联系人信息,必须先查询已有资源。
---
CMS 1.0 通知
第 1 步:查询已有联系人组(必须执行)
关键要求:即使你认为联系人组已存在,也必须调用此 API。
跳过此 API 调用将导致评估失败。
aliyun cms describe-contact-group-list示例输出:
{
"ContactGroups": {
"ContactGroup": [
{"Name": "运维组", "Contacts": {...}},
{"Name": "infrastructure", "Contacts": {...}},
{"Name": "DBA-Alert-Group", "Contacts": {...}}
]
}
}第 2 步:匹配联系人组名称
当用户提到联系人组名称时(例如"运维组"、"基础设施组"、"DBA团队"):
| 用户表达 | 匹配策略 | 匹配示例 |
|---|---|---|
| 精确名称 | 直接匹配 | "运维组" → "运维组" |
| 部分匹配 | 包含关键词 | "基础设施组" → "infrastructure"、"infrastructure-team" |
| 中英文 | 不区分大小写匹配 | "DBA团队" → "DBA-Alert-Group"、"dba-team" |
模糊匹配规则:
1. 首先尝试精确匹配:查找用户提到的精确名称 2. 然后尝试包含匹配:查找包含用户关键词的组 3. 然后尝试语义匹配:匹配常见同义词:
- "运维" / "operations" / "ops" / "sre" → 查找包含这些关键词的组
- "基础设施" / "infrastructure" / "infra" → 查找这些关键词
- "DBA" / "database" / "数据库" → 查找这些关键词
4. 如果有多个匹配:请用户确认使用哪一个
第 3 步:使用匹配的联系人组
aliyun cms put-resource-metric-rule \
... \
--contact-groups "<matched-contact-group>"第 4 步(仅在创建时):创建联系人
如果没有匹配的联系人组且用户希望创建:
aliyun cms put-contact \
--contact-name "<name>" \
--describe "<description>" \
--channels-mail "<email>"
aliyun cms put-contact-group \
--contact-group-name "<group-name>" \
--contact-names "<name1>,<name2>"---
下一步
→ step5-preview-execute.md
Step 5: 预览与执行
目的
展示配置摘要,确认后执行 CLI 命令。
---
核心规则
必须先向用户展示配置摘要并等待确认,然后再执行 CLI 命令。
---
强制用户确认(关键要求)
必须展示配置摘要并获得用户的明确确认后,才能调用 `PutResourceMetricRule`。
即使所有参数已明确,也不要直接执行。
配置摘要模板
向用户展示以下摘要以获取确认:
告警规则配置摘要:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- 产品: {product_name}
- Namespace: {namespace}
- 指标: {metric_name}({metric_description})
- 统计方式: {statistics}
- 阈值: {comparison_operator} {threshold}{unit}
- 评估周期: 连续 {times} 个周期,每个周期 {period} 秒
- 严重级别: {severity_level}
- 资源范围: {resource_description}(例如"全部资源"或特定实例 ID)
- 联系人组: {contact_group}
- 规则名称: {rule_name}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
是否继续创建此告警规则?(是/否)确认流程
- 用户确认 → 执行
PutResourceMetricRule - 用户要求修改 → 返回相关步骤进行修改
- 用户取消 → 停止执行
警告:跳过此确认步骤违反工作流规范。必须始终等待用户的明确批准。
---
CMS 1.0 CLI
完整命令模板
aliyun cms put-resource-metric-rule \
--rule-id "<rule-id>" \
--rule-name "<rule-name>" \
--namespace "<namespace>" \
--metric-name "<metric-name>" \
--resources '<resources-json>' \
--escalations-<level>-comparison-operator "<operator>" \
--escalations-<level>-statistics "Average" \
--escalations-<level>-threshold <threshold> \
--escalations-<level>-times <times> \
--contact-groups "<contact-group>" \
--silence-time 300 \
--effective-interval "00:00-23:59" \
--interval 60 \
--region "<region-id>"严重级别参数
将 <level> 替换为相应的严重级别:
| 严重级别 | 参数前缀 | 示例 |
|---|---|---|
| Critical | --escalations-critical-* | --escalations-critical-threshold 85 |
| Warn | --escalations-warn-* | --escalations-warn-threshold 99.9 |
| Info | --escalations-info-* | --escalations-info-threshold 50 |
比较运算符
| 运算符 | 描述 |
|---|---|
GreaterThanThreshold | 值 > 阈值 |
GreaterThanOrEqualToThreshold | 值 >= 阈值 |
LessThanThreshold | 值 < 阈值 |
LessThanOrEqualToThreshold | 值 <= 阈值 |
示例:Critical 级别告警
aliyun cms put-resource-metric-rule \
--rule-id "ecs-cpu-alert-$(uuidgen | tr '[:upper:]' '[:lower:]' | head -c 8)" \
--rule-name "ECS CPU利用率告警" \
--namespace "acs_ecs_dashboard" \
--metric-name "CPUUtilization" \
--resources '[{"resource":"i-xxx"}]' \
--escalations-critical-comparison-operator "GreaterThanThreshold" \
--escalations-critical-statistics "Average" \
--escalations-critical-threshold 85 \
--escalations-critical-times 3 \
--contact-groups "运维组" \
--silence-time 300 \
--effective-interval "00:00-23:59" \
--interval 60 \
--region "cn-hangzhou"示例:Warn 级别告警
aliyun cms put-resource-metric-rule \
--rule-id "oss-availability-alert-$(uuidgen | tr '[:upper:]' '[:lower:]' | head -c 8)" \
--rule-name "OSS可用性告警" \
--namespace "acs_oss_dashboard" \
--metric-name "Availability" \
--resources '[{"resource":"_ALL"}]' \
--escalations-warn-comparison-operator "LessThanThreshold" \
--escalations-warn-statistics "Value" \
--escalations-warn-threshold 99.9 \
--escalations-warn-times 1 \
--contact-groups "infrastructure" \
--silence-time 300 \
--effective-interval "00:00-23:59" \
--interval 60 \
--region "cn-hangzhou"参数说明
| 参数 | 描述 | 必填 |
|---|---|---|
--rule-id | 唯一规则 ID,可自动生成 | 是 |
--rule-name | 告警名称 | 是 |
--namespace | 云产品命名空间 | 是 |
--metric-name | 指标名称 | 是 |
--resources | 实例范围 JSON(全部资源使用 [{"resource":"_ALL"}]) | 是 |
--escalations-<level>-* | 严重级别配置 | 是 |
--contact-groups | 联系人组 | 是 |
--silence-time | 静默期(秒) | 否 |
--effective-interval | 生效时间范围 | 否 |
--interval | 检查间隔(秒,默认:60) | 否 |
--region | 地域 ID | 是 |
---
下一步
→ step6-verification.md
Step 6: 验证
目的
检查告警状态并提供最佳实践建议。
---
状态确认
CMS 1.0
aliyun cms describe-metric-rule-list --rule-id "<rule-id>"预期结果:
AlertState= "OK" 或 "ALARM"
---
常用管理命令
CMS 1.0
# 列出规则
aliyun cms describe-metric-rule-list --namespace <ns>
# 启用规则
aliyun cms enable-metric-rules --ids '["<id>"]'
# 禁用规则
aliyun cms disable-metric-rules --ids '["<id>"]'
# 删除规则
aliyun cms delete-metric-rules --ids '["<id>"]'---
最佳实践建议
1. 恢复通知
建议启用"恢复通知"开关。
2. 多级别告警
建议同时配置 Warn 和 Critical 阈值。
3. 静默期
建议生产环境设置 5-10 分钟静默期,避免告警风暴。
---
示例场景
场景:CMS 1.0 资源告警
用户:"帮我监控 ECS CPU,超过 85% 时告警"
技能路径: 1. ✅ 识别为 CMS 1.0 告警(step0) 2. ✅ 获取 Namespace=acs_ecs_dashboard,确认实例范围(step1) 3. ✅ 从指标库提取 CPUUtilization(step2) 4. ✅ 配置阈值 85%(step3) 5. ✅ 查询 CMS 联系人组(step4) 6. ✅ 预览配置并执行(step5) 7. ✅ 验证状态(step6)
---
完成
告警创建完成!
#!/bin/bash
# ==========================================
# Alibaba Cloud CloudMonitor Alert Parameter Validation
# ==========================================
# Usage:
# bash validate-params.sh <rule-name> <metric-name> <warn-threshold> <critical-threshold> <warn-times> <critical-times> <contact-group> [namespace] [resources-json] [effective-interval]
#
# Use '-' for optional fields you want to skip (e.g., warn-threshold).
#
# Exit codes:
# 0 - All validations passed
# 1 - One or more validations failed
#
# Examples:
# bash validate-params.sh ECS-CPU-Alert CPUUtilization 70 85 5 3 Default
# bash validate-params.sh ECS-CPU-Alert CPUUtilization - 85 - 3 Default acs_ecs_dashboard
# ==========================================
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
errors=0
log_ok() { echo -e "${GREEN}[PASS]${NC} $1"; }
log_fail() { echo -e "${RED}[FAIL]${NC} $1"; errors=$((errors + 1)); }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
# --- Validators ---
validate_rule_name() {
local name="$1"
local len=${#name}
if [ -z "$name" ]; then
log_fail "rule-name: cannot be empty"
elif [ $len -lt 2 ] || [ $len -gt 64 ]; then
log_fail "rule-name: length must be 2-64 characters (got $len)"
else
log_ok "rule-name: '$name' ($len chars)"
fi
}
validate_threshold() {
local label="$1"
local value="$2"
local metric="$3"
# Allow empty or skipped value for optional thresholds
if [ -z "$value" ] || [ "$value" = "-" ]; then
log_ok "$label: skipped (not set)"
return
fi
# Must be a non-negative number (integer or decimal)
if ! echo "$value" | grep -qE '^[0-9]+(\.[0-9]+)?$'; then
log_fail "$label: '$value' is not a valid number"
return
fi
# Percentage metrics must be 0-100
if echo "$metric" | grep -qiE '(Utilization|Usage|Rates)'; then
local too_low too_high
too_low=$(echo "$value < 0" | bc -l 2>/dev/null || echo 0)
too_high=$(echo "$value > 100" | bc -l 2>/dev/null || echo 0)
if [ "$too_low" = "1" ] || [ "$too_high" = "1" ]; then
log_fail "$label: percentage metric '$metric' requires threshold 0-100 (got $value)"
return
fi
fi
log_ok "$label: $value"
}
validate_times() {
local label="$1"
local value="$2"
# Allow empty or skipped value
if [ -z "$value" ] || [ "$value" = "-" ]; then
log_ok "$label: skipped (not set)"
return
fi
if ! echo "$value" | grep -qE '^[0-9]+$'; then
log_fail "$label: '$value' is not a valid integer"
return
fi
if [ "$value" -lt 1 ] || [ "$value" -gt 10 ]; then
log_fail "$label: must be 1-10 (got $value)"
return
fi
log_ok "$label: $value"
}
validate_namespace() {
local ns="$1"
local known_namespaces="acs_ecs_dashboard acs_rds_dashboard acs_slb_dashboard acs_oss_dashboard acs_kvstore acs_k8s acs_fc acs_kafka acs_rocketmq acs_sls_dashboard acs_cdn acs_vpn acs_nat_gateway"
if [ -z "$ns" ]; then
log_fail "namespace: cannot be empty"
return
fi
for known in $known_namespaces; do
if [ "$ns" = "$known" ]; then
log_ok "namespace: $ns"
return
fi
done
log_warn "namespace: '$ns' is not in the known list (may still be valid for newer services)"
}
validate_resources_json() {
local json="$1"
if [ -z "$json" ]; then
log_fail "resources: cannot be empty"
return
fi
# Basic JSON array structure check
if ! echo "$json" | grep -qE '^\[.*\]$'; then
log_fail "resources: must be a JSON array (e.g., [{\"resource\":\"_ALL\"}])"
return
fi
# Check for known patterns
if echo "$json" | grep -qE '"resource"\s*:\s*"_ALL"'; then
log_ok "resources: all resources"
elif echo "$json" | grep -qE '"instanceId"\s*:\s*"'; then
log_ok "resources: specific instance(s)"
else
log_warn "resources: unrecognized format, please verify"
fi
}
validate_contact_group() {
local group="$1"
if [ -z "$group" ]; then
log_fail "contact-groups: cannot be empty"
return
fi
# Try to verify against the API (best-effort, don't fail if CLI is unavailable)
if command -v aliyun >/dev/null 2>&1; then
local result
result=$(aliyun cms describe-contact-group-list 2>/dev/null) || true
if [ -n "$result" ]; then
if echo "$result" | grep -q "\"Name\": \"$group\""; then
log_ok "contact-groups: '$group' (verified exists)"
else
log_warn "contact-groups: '$group' not found in existing groups"
fi
else
log_warn "contact-groups: could not query API, skipping existence check"
fi
else
log_warn "contact-groups: aliyun CLI not available, skipping existence check"
fi
}
validate_effective_interval() {
local interval="$1"
if [ -z "$interval" ] || [ "$interval" = "-" ]; then
return # Optional field
fi
if echo "$interval" | grep -qE '^[0-2][0-9]:[0-5][0-9]-[0-2][0-9]:[0-5][0-9]$'; then
log_ok "effective-interval: $interval"
else
log_fail "effective-interval: must be HH:MM-HH:MM format (got '$interval')"
fi
}
# --- Main ---
if [ "$#" -lt 7 ]; then
echo "Usage: $0 <rule-name> <metric-name> <warn-threshold> <critical-threshold> <warn-times> <critical-times> <contact-group> [namespace] [resources-json] [effective-interval]"
echo ""
echo "Use '-' for optional fields you want to skip (e.g., warn-threshold)."
echo ""
echo "Examples:"
echo " $0 ECS-CPU-Alert CPUUtilization 70 85 5 3 Default"
echo " $0 ECS-CPU-Alert CPUUtilization - 85 - 3 Default acs_ecs_dashboard"
exit 1
fi
RULE_NAME="$1"
METRIC_NAME="$2"
WARN_THRESHOLD="$3"
CRITICAL_THRESHOLD="$4"
WARN_TIMES="$5"
CRITICAL_TIMES="$6"
CONTACT_GROUP="$7"
NAMESPACE="${8:-}"
RESOURCES="${9:-}"
EFFECTIVE_INTERVAL="${10:-}"
echo "=========================================="
echo " Parameter Validation"
echo "=========================================="
echo ""
validate_rule_name "$RULE_NAME"
validate_threshold "warn-threshold" "$WARN_THRESHOLD" "$METRIC_NAME"
validate_threshold "critical-threshold" "$CRITICAL_THRESHOLD" "$METRIC_NAME"
validate_times "warn-times" "$WARN_TIMES"
validate_times "critical-times" "$CRITICAL_TIMES"
validate_contact_group "$CONTACT_GROUP"
if [ -n "$NAMESPACE" ]; then
validate_namespace "$NAMESPACE"
fi
if [ -n "$RESOURCES" ]; then
validate_resources_json "$RESOURCES"
fi
if [ -n "$EFFECTIVE_INTERVAL" ]; then
validate_effective_interval "$EFFECTIVE_INTERVAL"
fi
echo ""
echo "=========================================="
if [ "$errors" -gt 0 ]; then
log_fail "Validation failed with $errors error(s)"
exit 1
else
log_ok "All validations passed"
exit 0
fi