mcpField
A
alibabacloud-rds-mysql-inspection

alibabacloud-rds-mysql-inspection

github.com/aliyun数据与数据库28139 次安装1 天前更新
代码仓库

关于 alibabacloud-rds-mysql-inspection

用于巡检 Alibaba Cloud RDS MySQL 实例的 Agent Skill,可检查单个、指定多个或跨区域的全部实例。它汇集监控、告警、慢日志和空间数据,生成实例及汇总 HTML 报告,并提供健康评分与优化建议。

主要功能

  1. 01单实例、多实例及全局巡检
  2. 02按 1 至 30 天设定时间范围
  3. 03跨区域并发扫描实例
  4. 04采集监控、告警、慢日志和空间数据
  5. 05生成 HTML 报告及健康评分

适用场景

  1. 01查看指定实例近期健康状况
  2. 02批量排查多个实例问题
  3. 03按地域巡检全部 RDS MySQL 实例

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/aliyun/alibabacloud-aiops-skills --skill alibabacloud-rds-mysql-inspection

安装后在 Claude Code 中输入/alibabacloud-rds-mysql-inspection确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
ram-policies.md
scripts/
check-write-operation.sh
inspect.py

详细介绍

阿里云 RDS MySQL 实例巡检技能

此技能可对阿里云 RDS MySQL 实例进行批量健康巡检。它支持三种模式——单实例、多实例和全局批量巡检——并可配置时间范围(默认 7 天,最长 30 天),最终生成标准化的 HTML 巡检报告。

用法

无需手动运行任何命令。 只需用自然语言描述需求即可。

示例提示词

示例 1:单实例

  • EN:Inspect RDS instance rm-bp1xxxxxx
  • ZH:帮我巡检下 RDS 实例 rm-bp1xxxxxx

示例 2:多个实例并指定时间范围

  • EN:Inspect rm-bp1xxx and rm-bp1yyy for the past 14 days
  • ZH:巡检 rm-bp1xxx 和 rm-bp1yyy 这两个实例,看最近 14 天的情况

示例 3:全局巡检

  • EN:Run a health inspection on all RDS MySQL instances and produce a summary report
  • ZH:帮我对所有 RDS MySQL 实例做一次健康巡检,输出汇总报告

示例 4:按地域限定

  • EN:Inspect all RDS MySQL instances in cn-hangzhou and cn-shanghai
  • ZH:巡检 cn-hangzhou 和 cn-shanghai 两个地域的所有 RDS MySQL 实例
AI 会自动执行的操作
  1. 识别用户意图(单实例 / 多实例 / 全局),并提取时间范围参数。
  2. 调用 rds describe-regions 获取可用地域列表(过滤掉 ClosedDown)。
  3. 并发扫描每个地域中的 RDS MySQL 实例(自动传入地域 ID,用户无需指定)。
  4. 并发获取每个目标实例的属性、监控数据、告警、慢日志和空间数据。
  5. 自动检测集群实例并收集各节点的数据。
  6. 为每个实例生成一份 HTML 报告,并生成一份汇总 HTML 报告,其中包含健康评分排名和优化建议。

前置条件

运行环境
  • Python:3.7+(仅使用标准库)
  • 操作系统:Linux / macOS / Windows
  • Aliyun CLI:>= 3.3.3,且已配置有效凭据
安装检查

预检查:需要 Aliyun CLI >= 3.3.3

运行 aliyun version 验证版本是否 >= 3.3.3。如果缺少 CLI 或版本过旧, 运行 curl -fsSL https://aliyuncli.alicdn.com/setup.sh | bash 进行安装或升级, 或参阅 https://help.aliyun.com/zh/cli/ 查看安装说明。

预检查:需要更新 Aliyun CLI 插件

[MUST] 运行 aliyun configure set --auto-plugin-install true 以启用自动安装插件。 [MUST] 运行 aliyun plugin update 以确保所有本地安装的插件均为最新版本。

aliyun version
aliyun configure set --auto-plugin-install true
aliyun plugin update
Python 依赖项

仅使用 Python 标准库模块(subprocess、json、argparse、concurrent.futures、datetime);无需运行 pip install。


[MUST] CLI User-Agent 与 AI-Mode 强制规则

[MUST] CLI User-Agent — 此技能执行的每次 aliyun CLI 调用都必须包含: --user-agent AlibabaCloud-Agent-Skills/alibabacloud-rds-mysql-inspection

scripts/inspect.py 中的 call_cli() 封装会自动注入此 UA,因此无需在每条命令中重复指定。

[MUST] 启用 AI-Mode — 在执行任何 Agent Skill 之前,必须启用 AI-mode。 调用任何 CLI 命令之前运行以下命令:

aliyun configure ai-mode enable
aliyun configure ai-mode set-user-agent --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-rds-mysql-inspection"

[MUST] 在每个退出点禁用 AI-Mode — 在发送最终回复之前(无论成功、失败、发生异常、用户取消还是会话结束),都必须禁用 AI-mode。AI-mode 仅用于正在执行的 Agent Skill,技能停止运行后不得继续保持启用状态。

aliyun configure ai-mode disable

必需的 RAM 权限

此技能使用只读 RDS / CMS / DAS API。完整的自定义策略 JSON、按操作划分的用途表以及系统策略替代方案均在 references/ram-policies.md 中声明。运行此技能前,请将该策略附加到执行操作的 RAM 身份。


身份验证

预检查:需要 Alibaba Cloud 凭据

安全规则:

  • 绝不读取、回显或打印 AK/SK 值
  • 绝不要求用户在对话或命令行中直接输入 AK/SK
  • 仅使用 aliyun configure list 检查凭据状态
aliyun configure list

检查输出并确认存在有效配置文件。如果未配置凭据,请引导用户在对话之外进行配置:

aliyun configure

CLI 参数参考

python3 scripts/inspect.py [options]
参数简写类型描述默认值
--instance-ids-i字符串实例 ID(可重复指定,或在单个值中以逗号分隔)无
--all—标志全局检查所有 RDS MySQL 实例关闭
--days-d整数时间窗口长度,单位为天(1-30)7
--start-time—YYYY-MM-DD开始日期(与 --days 互斥)无
--end-time—YYYY-MM-DD结束日期(必须与 --start-time 同时提供)无
--output-o路径输出目录./rds-inspection-reports/<ts>/
--profile-p字符串Aliyun CLI 配置文件名称默认配置文件
--regions—字符串将扫描范围限制为指定区域(以逗号分隔)全部
--concurrency-c整数单实例检查并发数3
--region-concurrency—整数区域扫描并发数3
--skip-space—标志跳过 DAS 空间分析(每个实例可节省 30-150 秒)关闭

验证规则(由脚本自动强制执行):

  • 必须且只能指定 -i 或 --all 其中一项。
  • --days 必须介于 1 和 30 之间;超出此范围的值会引发错误。
  • 必须同时提供 --start-time 和 --end-time,且时间跨度不得超过 30 天。

核心工作流

阶段 1:获取可用区域列表
aliyun rds describe-regions --region cn-hangzhou --user-agent AlibabaCloud-Agent-Skills/alibabacloud-rds-mysql-inspection

从返回结果的 Regions.RDSRegion[] 中提取 RegionId,并剔除 Status 包含 closed 的区域。

阶段 2:并发扫描各区域中的 RDS MySQL 实例

对每个区域调用:

aliyun rds describe-db-instances --region <RegionId> \
  --engine MySQL --page-size 100 --page-number <N> \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-rds-mysql-inspection

根据 TotalRecordCount 进行分页,直至获取所有记录。合并为完整的 [{instanceId, regionId, ...}] 列表。

阶段 3:筛选目标实例
  • --all:所有实例。
  • -i id1,id2:从完整列表中筛选(每个实例对应的区域 ID 会自动携带,无需用户指定)。

未匹配的实例 ID 会产生警告,但不会中止整个工作流。

阶段 4:查询实例属性(默认并发数为 3)
aliyun rds describe-db-instance-attribute --region <RegionId> \
  --db-instance-id <InstanceId> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-rds-mysql-inspection

提取关键字段:Category(用于判断实例是否为集群)、DBClusterNodes(集群节点列表)、MaxConnections、MaxIOPS、MaxIOMBPS、CurrentKernelVersion、LatestKernelVersion、ExpireTime 等。

阶段 5:逐实例检查(默认并发数为 3)

每个实例内的以下采集步骤按顺序运行。

5.1 CMS 指标采集(cms describe-metric-list)

五项核心指标。MetricName 和 Dimensions 取决于实例是否为集群。

集群实例(Category=cluster,按节点查询):

MetricName含义
Cluster_CpuUsageCPU 利用率
Cluster_MemoryUsage内存利用率
Cluster_DiskUsage磁盘利用率
Cluster_IOPSUsageIOPS 利用率
Cluster_ConnectionUsage连接利用率

Dimensions:[{"instanceId":"<DBInstanceId>","nodeId":"<NodeId>"}]

非集群实例:

MetricName含义
CpuUsage / MemoryUsage / DiskUsage / IOPSUsage / ConnectionUsage同上

Dimensions:[{"instanceId":"<DBInstanceId>"}]

调用模板:

aliyun cms describe-metric-list \
  --namespace acs_rds_dashboard \
  --metric-name <MetricName> \
  --period 60 \
  --start-time <StartMillis> --end-time <EndMillis> \
  --dimensions '<JSON>' \
  --length 2000 \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-rds-mysql-inspection

通过 NextToken 翻页,直到检索到所有数据点。

5.2 CMS 告警历史(cms describe-alert-log-list)
aliyun cms describe-alert-log-list \
  --namespace acs_rds_dashboard --product rds \
  --search-key <DBInstanceId> \
  --start-time <ms> --end-time <ms> \
  --page-size 100 --page-number <N>

翻页获取所有结果。按告警严重性降序排序:CRITICAL / P0 / P1 > WARN / P2 > INFO / P3 / P4。

5.3 DAS 慢日志统计(das describe-slow-log-statistic)
aliyun das describe-slow-log-statistic \
  --instance-id <DBInstanceId> \
  --start <ms> --end <ms> \
  --order-by <Count|QueryTime> \
  [--node-id <NodeId>] \
  --endpoint das.cn-shanghai.aliyuncs.com

注意:

  • DAS 终端节点固定为 das.cn-shanghai.aliyuncs.com(DAS 为集中式部署)。
  • 集群实例必须传入 --node-id(使用 Master 节点)。
  • 查询运行两次——一次按 Count 排序,一次按 QueryTime 排序。
5.4 DAS 空间分析 — 前 20 名
# Trigger the task
aliyun das create-storage-analysis-task \
  --instance-id <DBInstanceId> \
  --endpoint das.cn-shanghai.aliyuncs.com

# Poll for results
aliyun das get-storage-analysis-result \
  --instance-id <DBInstanceId> --task-id <TaskId> \
  --endpoint das.cn-shanghai.aliyuncs.com

每 5 秒轮询一次,最长等待 180 秒。从 StorageAnalysisResult.TableStats 中取出占用空间最多的 20 张表。

阶段 6:健康评分计算

每个实例的评分为 0-100。扣分规则:

  • CPU / 内存 / IOPS / 连接峰值 > 80%:-10;> 60%:-5
  • 磁盘 > 85%:-15;> 70%:-5
  • 慢日志条目总数 > 1000:-8;> 100:-3
  • 严重 / 重度告警:-10
  • 内核版本不是最新版本:-3
  • 30 天内到期:-5
  • 实例处于 Lock 状态:-8
阶段 7:单实例 HTML 渲染(5 个部分)

每个实例生成 instances/<DBInstanceId>.html,其中包含以下部分:

  1. 实例基本信息 — DBInstanceId / Engine + Version / Category(带有 (cluster) 标签)/ Class / Storage / MaxConnections / MaxIOPS / MaxIOMBPS / 主可用区和备可用区 / VPC + VSwitch / 状态 / 付费类型 / Lock / 维护窗口 / 创建时间 + 到期时间 / 当前内核 + 最新内核 / 集群节点列表(仅限集群)。
  2. 资源利用率(过去 N 天) — 表格列出每项指标的平均值 / 峰值 / 状态颜色,并配有五张 ECharts 折线图(通过 dataZoom 联动);集群实例按节点各绘制一条线。
  3. 空间占用最多的 20 张表 — 根据 DAS 的 TableStats 排序。列:数据库 / 表 / 总空间 / 数据 / 索引 / 碎片率 / 行数。
  4. 慢日志统计(过去 N 天) — 两张表:按 Count 排名前列和按 QueryTime 排名前列。
  5. 告警历史(过去 N 天) — 按严重性排序的表格,最多显示 200 行。
阶段 8:摘要 HTML 渲染(8 个部分)

生成 summary.html,包含锚点导航和以下 8 个部分:

  1. 巡检概览 — KPI 卡片(总数 / 地域数量 / 集群数量 / 全局健康评分 / 健康状况分布 / 告警实例数量)以及 4 个饼图 / 柱状图(类别 / 状态 / 健康状况 / 各地域)。
  2. 健康评分排名 — 健康状况最差的前 20 个实例,每行链接到对应的单实例报告。
  3. 告警实例统计 — KPI 卡片 + 严重程度分布柱状图 + 按告警数排名的前 20 个实例。
  4. 资源利用率排名 — 5 个前 20 名表格(CPU / 内存 / 磁盘 / IOPS / 连接数),按峰值排序。
  5. 慢日志排名 — 按慢日志数量、总执行时间和单条语句最长执行时间排名的实例(跨实例汇总)。
  6. 空间分析 — 按已用空间排名的实例、前 20 张单表(跨实例汇总)以及碎片率最高的表。
  7. 版本和到期时间 — 可升级内核的实例、将在 30 天内到期的实例以及将在 90 天内到期的实例。
  8. 巡检结论 — KPI 卡片(全局健康评分 + 健康 / 需关注 / 严重类别的实例数量)以及汇总问题列表(按问题类型分组:CPU 使用率高 / 内存使用率高 / 空间紧张 / 慢日志多 / 告警多 / 内核过旧 / 即将到期 — 每行列出受影响的实例 ID)。

报告输出结构

./rds-inspection-reports/<timestamp>/
├── summary.html                  # Aggregated inspection report (8 sections)
└── instances/
    ├── rm-bp1xxx.html            # Per-instance report (5 sections)
    ├── rm-bp1yyy.html
    └── ...

在摘要报告中,每个实例 ID 都是超链接,点击后会在新标签页中打开对应的单实例报告。


状态阈值

指标正常警告严重
CPU 利用率< 60%60-80%> 80%
内存利用率< 60%60-80%> 80%
磁盘利用率< 70%70-85%> 85%
IOPS 利用率< 60%60-80%> 80%
连接数利用率< 60%60-80%> 80%
总体健康评分>= 8060-79< 60

集群与非集群处理方式

维度非集群实例集群实例(Category=cluster)
CMS MetricName无前缀(CpuUsage 等)带有 Cluster_ 前缀
CMS Dimensions{"instanceId":"<id>"}{"instanceId":"<id>","nodeId":"<nid>"},按节点查询
DAS 慢日志仅需 --instance-id还必须传入 --node-id(使用 Master 节点)
HTML 指标图表单条线每个节点一条线
集群级汇总不适用CPU / 内存峰值 = 所有节点峰值中的最大值

集群节点列表从 rds describe-db-instance-attribute 返回的 DBClusterNodes 字段中获取。


性能估算

场景预计耗时
单个实例(含空间分析)60-200 秒
单个实例(--skip-space)10-30 秒
并发数为 3 时检查 10 个实例5-15 分钟
使用 --all 检查 50 个实例30-90 分钟

加速运行的提示:

  • 批量检查大量实例时,使用 --skip-space;DAS 空间分析每个实例耗时 30-150 秒。
  • 如果已知目标实例所在的地域,使用 --regions cn-hangzhou,... 跳过其他地域。
  • 提高 -c 的值以增加并发量(请注意,CMS API 默认 QPS 限制为 20;建议不超过 5)。

安全规则

这是一项只读巡检技能。

  • 严禁执行变更操作(DDL / DML、实例配置变更)。
  • 仅生成巡检结果和优化建议。
  • 此技能使用的唯一一条非只读 CLI 命令是 das create-storage-analysis-task,它会安排一个侧向分析任务,不会修改任何实例数据;其他所有调用均为纯只读操作。
  • 任何变更操作都必须由用户在对话之外确认并手动执行。

参考资料

评论

支持 Markdown