关于 alibabacloud-network-health-inspection
用于检查 Alibaba Cloud 网络健康状况的只读 Agent Skill,通过 Cloud Monitor 指标和资源查询覆盖 11 类网络产品,并可生成监控图表。
主要功能
- 01检查 11 类网络产品指标
- 02查询资源清单和监控数据
- 03选择检查区域和产品
- 04生成监控图表
- 05按产品报告权限错误
适用场景
- 01查看指定时段的网络健康状况
- 02排查带宽或连接问题
- 03检查指定的网络产品
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ aliyun/ alibabacloud-aiops-skills --skill alibabacloud-network-health-inspection安装后在 Claude Code 中输入/alibabacloud-network-health-inspection确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/ram-policies.mdscripts/inspect_alb.pyinspect_cbwp.pyinspect_cen.pyinspect_charts.pyinspect_clb.pyinspect_common.pyinspect_eip.pyinspect_ga.pyinspect_nat.pyinspect_nlb.pyinspect_physconn.pyinspect_report.pyinspect_tr.pyinspect_vbr.py详细介绍
前置条件
- aliyun CLI:必须已安装并配置访问凭据(
aliyun configure)。如果尚未安装,请使用brew install aliyun-cli(macOS)或从 GitHub Releases 下载 - Python 3.7+:用于运行检查脚本和生成监控图表
- matplotlib:用于生成监控图表的 Python 绘图库。如果尚未安装,请运行
pip3 install matplotlib
所需 RAM 权限
此 Skill 中的所有 API 调用都是只读查询,不会创建、修改或删除任何资源。所需权限如下:
| 云产品 | API 权限 | 用途 |
|---|---|---|
| 云监控(CMS) | cms:DescribeMetricList | 查询所有网络产品的监控指标数据(核心权限) |
| VPC | vpc:DescribeEipAddresses | 查询 EIP 列表 |
| VPC | vpc:DescribeCommonBandwidthPackages | 查询共享带宽包列表 |
| VPC | vpc:DescribeNatGateways | 查询 NAT 网关列表 |
| VPC | vpc:DescribePhysicalConnections | 查询物理专线列表 |
| VPC | vpc:DescribeVirtualBorderRouters | 查询 VBR 列表 |
| 云企业网(CEN) | cbn:DescribeCens | 查询 CEN 列表 |
| 云企业网(CEN) | cbn:DescribeCenBandwidthPackages | 查询 CEN 带宽包 |
| 云企业网(CEN) | cbn:ListTransitRouters | 查询转发路由器列表 |
| 云企业网(CEN) | cbn:ListTransitRouterVpcAttachments | 查询 TR VPC 连接 |
| 云企业网(CEN) | cbn:ListTransitRouterVbrAttachments | 查询 TR VBR 连接 |
| 云企业网(CEN) | cbn:ListTransitRouterRouteTables | 查询 TR 路由表 |
| 全球加速(GA) | ga:ListAccelerators | 查询全球加速实例列表 |
| CLB | slb:DescribeLoadBalancers | 查询 CLB 列表 |
| ALB | alb:ListLoadBalancers | 查询 ALB 列表 |
| NLB | nlb:ListLoadBalancers | 查询 NLB 列表 |
推荐的 RAM 策略 JSON 和详细安全说明,请参阅 references/ram-policies.md。
如果某个产品缺少足够的 API 权限,Skill 会跳过该产品,并在报告中将其标记为错误,不影响对其他产品的检查。
操作安全声明(PreToolUse Hook)
此 Skill 不会配置 PreToolUse Hook,原因如下:
- 纯只读操作:所有 API 调用都是
Describe*/List*只读查询,不会创建、修改或删除任何资源 - 工具范围受限:
allowed-tools仅声明了 Bash Read;Skill 无法调用 Write、Edit 或其他文件写入工具 - Bash 用途受限:Bash 工具仅用于执行
aliyunCLI 只读查询命令和python3检查脚本,不会用于写入操作 - 不涉及高风险操作:不存在需要人工确认(HITL)的删除、批量写入或权限变更操作
因此,此 Skill 不包含需要拦截或二次确认的操作,无需配置 PreToolUse Hook。如果未来版本增加写入操作能力,则必须相应地添加 PreToolUse Hook 拦截机制。
输入参数
用户需要提供以下信息(从用户的自然语言中提取):
- 区域(可选):默认值为
cn-hangzhou;支持以逗号分隔的多个区域,例如cn-hangzhou,cn-shanghai - 时间范围(必填,无默认值):用户必须明确指定检查时间范围。转换为天数:
- “上周” / “过去 7 天” →
--days 7 - “过去 24 小时” / “过去 1 天” →
--days 1 - “过去 3 天” →
--days 3
- “上周” / “过去 7 天” →
- 数据聚合周期(必填,无默认值):用户必须明确指定监控数据的聚合粒度(单位:秒)。数据查询和图表生成统一使用此粒度。常见值:
60— 1 分钟粒度,数据分辨率最高,适合短期故障排查300— 5 分钟粒度,在分辨率和数据量之间取得平衡900— 15 分钟粒度,数据量较少,适合长周期概览
- 检查产品范围(可选):默认检查全部 11 类网络产品。用户可以指定只检查某些产品;根据用户的自然语言识别产品名称,并参照下表确定要检查的产品列表。
产品名称识别映射
从用户输入中提取产品关键词,并映射到对应的检查产品。同一产品可能有多种表达方式;必须识别所有表达方式:
| 产品 ID | 用户可能使用的表达方式 |
|---|---|
| EIP | EIP、Elastic IP、Elastic Public IP、Public IP |
| CBWP | CBWP、Common Bandwidth Package、Shared Bandwidth、Bandwidth Package |
| NAT | NAT、NAT Gateway、NAT Gateway |
| CEN | CEN、Cloud Enterprise Network |
| TR | TR、Transit Router |
| PhysConn | Physical Connection、Express Connect、Dedicated Line |
| VBR | VBR、Virtual Border Router、Border Router |
| GA | GA、Global Accelerator |
| CLB | CLB、Classic Load Balancer、SLB(注意:用户说“SLB”时,通常指 CLB) |
| ALB | ALB、Application Load Balancer |
| NLB | NLB、Network Load Balancer |
特殊情况处理:
- 用户未指定类型而只说“负载均衡” → 检查 CLB + ALB + NLB(全部三种类型)
- 用户未作区分而只说“专线” → 检查 Physical Connection + VBR(VBR 是专线的流量监控入口)
- 用户说“SLB” → 映射为 CLB(Classic Load Balancer)
产品范围处理逻辑
-
用户未指定产品:检查全部 11 类网络产品(默认行为)
-
用户指定了产品:仅检查用户提及的产品;跳过未提及的产品
-
用户提及了不受支持的产品:明确告知用户,此 Skill 当前不支持检查该产品。例如:
此 Skill 当前不支持检查“VPN Gateway”。支持的 11 类网络产品为:EIP、Common Bandwidth Package、NAT Gateway、Cloud Enterprise Network、Transit Router、Physical Connection、VBR、Global Accelerator、CLB、ALB、NLB。
告知用户后,继续检查用户提及的其他受支持产品(如有)。
所需参数确认逻辑
开始检查前,必须确认用户已提供时间范围和数据聚合周期这两个参数。如果用户未指定,必须询问:
-
未指定时间范围时,询问:
您想检查多长时间的数据?例如:过去 1 天、过去 3 天、过去 7 天等。
-
未指定数据聚合周期时,询问并说明其含义:
您希望监控数据采用什么聚合周期?聚合周期决定了监控数据点之间的时间间隔:
- 60 秒(1 分钟):每分钟一个数据点,分辨率最高,适合排查短时间范围内的问题
- 300 秒(5 分钟):每 5 分钟一个数据点,在分辨率和数据量之间取得良好平衡
- 900 秒(15 分钟):每 15 分钟一个数据点,数据量较少,适合查看较长时间段的整体趋势
注意:聚合周期越短,需要获取的数据点越多,检查时间也会显著增加。例如,以 60 秒粒度检查 7 天的数据,每个指标约需 10,080 个数据点;而以 900 秒粒度检查,则每个指标只需约 672 个数据点。
确认这两个参数后,再继续执行检查工作流。
支持的 11 类网络产品
| # | 产品 | 脚本 | 云监控命名空间 | 关键指标 |
|---|---|---|---|---|
| 1 | 弹性公网 IP(EIP) | inspect_eip.py | acs_vpc_eip | 出/入方向带宽、限速丢包 |
| 2 | 共享带宽包(CBWP) | inspect_cbwp.py | acs_bandwidth_package | 出/入方向带宽、利用率、限速丢包 |
| 3 | NAT 网关 | inspect_nat.py | acs_nat_gateway | 出/入方向带宽、SNAT 连接数、连接丢包 |
| 4 | 云企业网(CEN) | inspect_cen.py | acs_cen | 跨地域出/入方向带宽、带宽包容量 |
| 5 | 转发路由器(TR) | inspect_tr.py | - | TR 连接状态、VPC/VBR 挂载数量 |
| 6 | 物理专线 | inspect_physconn.py | - | 连接状态(流量请查看 VBR) |
| 7 | VBR | inspect_vbr.py | acs_physical_connection | 出/入方向带宽、健康检查时延/丢包 |
| 8 | 全球加速(GA) | inspect_ga.py | acs_global_acceleration | 出/入方向带宽、包速率 |
| 9 | 传统型负载均衡(CLB) | inspect_clb.py | acs_slb_dashboard | 流量、连接数、QPS、丢包 |
| 10 | 应用型负载均衡(ALB) | inspect_alb.py | acs_alb | QPS、HTTP 状态码、连接数 |
| 11 | 网络型负载均衡(NLB) | inspect_nlb.py | acs_nlb | 带宽、活跃连接数、新建连接数 |
重要技术说明
云监控(CMS)查询要点
- CMS 是一项全球服务:始终使用
cn-hangzhou作为 CMS 终端节点地域;监控数据的归属由 Dimensions 中的 instanceId 决定,与终端节点地域无关 - VBR 的 CMS 命名空间是
acs_physical_connection,而不是acs_express_connect - CBWP 指标名称:
bwp_tx_rate/bwp_rx_rate,而不是net_tx.rate/net_rx.rate - NAT 网关丢包指标:
SessionLimitDropRate,而不是SessionLimitDropConnection - VBR 健康检查时延:
VbrHealthyCheckLatency的单位是微秒(us),需除以 1000 转换为毫秒(ms) - VBR 丢包率:
VbrHealthyCheckLossRate的返回值已经是百分比,无需乘以 100 - ALB/NLB CMS 维度键:使用
loadBalancerId,而不是instanceId - 物理专线没有云监控指标:必须通过关联的 VBR 查看物理专线流量监控
API 调用声明
此技能中的所有 API 调用均为只读查询,不涉及创建、修改或删除任何资源。
使用的只读 API 列表:
cms:DescribeMetricList- 查询云监控数据vpc:DescribeEipAddresses- 查询 EIP 列表vpc:DescribeCommonBandwidthPackages- 查询共享带宽包列表vpc:DescribeNatGateways- 查询 NAT 网关列表vpc:DescribePhysicalConnections- 查询物理专线列表vpc:DescribeVirtualBorderRouters- 查询 VBR 列表cbn:DescribeCens- 查询 CEN 列表cbn:DescribeCenBandwidthPackages- 查询 CEN 带宽包cbn:ListTransitRouters- 查询转发路由器列表cbn:ListTransitRouterVpcAttachments- 查询 TR VPC 挂载cbn:ListTransitRouterVbrAttachments- 查询 TR VBR 挂载cbn:ListTransitRouterRouteTables- 查询 TR 路由表ga:ListAccelerators- 查询 Global Accelerator 实例列表slb:DescribeLoadBalancers- 查询 CLB 列表alb:ListLoadBalancers- 查询 ALB 列表nlb:ListLoadBalancers- 查询 NLB 列表
aliyun CLI AI-Mode 配置
此技能中的所有 aliyun CLI 调用均通过 Python 检查脚本执行。执行任何脚本前,请全局配置 AI-Mode,确保每次 CLI 调用都带有正确的 User-Agent 请求头。
# Enable AI-Mode (run once before any aliyun CLI usage)
aliyun configure ai-mode enable
# Set User-Agent to identify this Skill
aliyun configure ai-mode set-user-agent --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-network-health-inspection"
# Update plugins to ensure latest versions
aliyun plugin update 2>/dev/null || true
# Disable AI-Mode after all CLI calls are complete
aliyun configure ai-mode disable
执行工作流
第 1 步:环境和依赖项检查
# Check aliyun CLI version
aliyun version 2>&1 | head -1
# Enable AI-Mode and set User-Agent (must run at the start of each Skill execution)
aliyun configure ai-mode enable
aliyun configure ai-mode set-user-agent --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-network-health-inspection"
# Update aliyun CLI plugins (ensure latest plugin versions)
aliyun plugin update 2>/dev/null || true
# Check Python and matplotlib
python3 -c "import matplotlib; print('matplotlib', matplotlib.__version__)" 2>&1
# If matplotlib is not installed, install it automatically
pip3 install matplotlib
AI-Mode 说明:启用 AI-Mode 后,aliyun CLI 会在请求中加入 User-Agent 请求头,使阿里云平台能够识别由 AI Agent 发起的只读查询。技能执行完成后,必须运行
aliyun configure ai-mode disable禁用 AI-Mode 并恢复默认状态。
第 2 步:创建检查工作目录
INSPECT_DIR=$(mktemp -d /tmp/network_inspect_XXXXXX)
CHARTS_DIR="$INSPECT_DIR/charts"
mkdir -p "$CHARTS_DIR"
echo "Inspection data directory: $INSPECT_DIR"
第 3 步:逐个运行产品检查脚本
仅运行与用户指定产品对应的检查脚本。 如果用户未指定产品范围,则运行全部 11 个脚本。按顺序逐个运行脚本,并将结果保存为 JSON 文件:
SCRIPTS_DIR="<skill_path>/scripts"
REGIONS="cn-hangzhou" # Based on user-specified region
DAYS=7 # Based on user-specified time range
PERIOD=300 # Based on user-specified aggregation period (seconds)
# The following scripts are executed based on the user's product selection; unselected products are skipped
# 1. EIP inspection (Product ID: EIP)
python3 "$SCRIPTS_DIR/inspect_eip.py" --regions "$REGIONS" --days $DAYS --period $PERIOD > "$INSPECT_DIR/eip.json"
# 2. CBWP inspection (Product ID: CBWP)
python3 "$SCRIPTS_DIR/inspect_cbwp.py" --regions "$REGIONS" --days $DAYS --period $PERIOD > "$INSPECT_DIR/cbwp.json"
# 3. NAT Gateway inspection (Product ID: NAT)
python3 "$SCRIPTS_DIR/inspect_nat.py" --regions "$REGIONS" --days $DAYS --period $PERIOD > "$INSPECT_DIR/nat.json"
# 4. CEN inspection (Product ID: CEN, global resource, no Region needed)
python3 "$SCRIPTS_DIR/inspect_cen.py" --days $DAYS --period $PERIOD > "$INSPECT_DIR/cen.json"
# 5. Transit Router inspection (Product ID: TR, no Cloud Monitor metrics, no --period needed)
python3 "$SCRIPTS_DIR/inspect_tr.py" --regions "$REGIONS" --days $DAYS > "$INSPECT_DIR/tr.json"
# 6. Physical Connection inspection (Product ID: PhysConn, no Cloud Monitor metrics, no --period needed)
python3 "$SCRIPTS_DIR/inspect_physconn.py" --regions "$REGIONS" --days $DAYS > "$INSPECT_DIR/physconn.json"
# 7. VBR inspection (Product ID: VBR)
python3 "$SCRIPTS_DIR/inspect_vbr.py" --regions "$REGIONS" --days $DAYS --period $PERIOD > "$INSPECT_DIR/vbr.json"
# 8. Global Accelerator inspection (Product ID: GA, global resource)
python3 "$SCRIPTS_DIR/inspect_ga.py" --days $DAYS --period $PERIOD > "$INSPECT_DIR/ga.json"
# 9. CLB inspection (Product ID: CLB)
python3 "$SCRIPTS_DIR/inspect_clb.py" --regions "$REGIONS" --days $DAYS --period $PERIOD > "$INSPECT_DIR/clb.json"
# 10. ALB inspection (Product ID: ALB)
python3 "$SCRIPTS_DIR/inspect_alb.py" --regions "$REGIONS" --days $DAYS --period $PERIOD > "$INSPECT_DIR/alb.json"
# 11. NLB inspection (Product ID: NLB)
python3 "$SCRIPTS_DIR/inspect_nlb.py" --regions "$REGIONS" --days $DAYS --period $PERIOD > "$INSPECT_DIR/nlb.json"
按需执行规则:仅运行用户所选产品的脚本。例如,如果用户只要求检查“EIP 和 NAT 网关”,则仅执行脚本 1 和 3;跳过其他 9 个脚本。未执行的产品不会生成 JSON 文件,后续的第 4 步(图表生成)和第 5 步(报告生成)将自动忽略不存在的产品数据。
第 4 步:生成监控图表
注意:请先生成图表,再生成报告;报告会自动嵌入图表引用。
# Generate charts for instances with monitoring data
python3 "$SCRIPTS_DIR/inspect_charts.py" \
--dir "$INSPECT_DIR" \
--days $DAYS \
--period $PERIOD \
--output-dir "$CHARTS_DIR"
第 5 步:生成检查报告(含图表引用)
# Generate Markdown inspection report; --charts-dir parameter embeds chart references in the report
python3 "$SCRIPTS_DIR/inspect_report.py" \
--dir "$INSPECT_DIR" \
--days $DAYS \
--charts-dir "$CHARTS_DIR" \
--output "$INSPECT_DIR/report.md"
如果需要输出到钉钉文档,请先生成本地版本报告以供查看;钉钉版本报告将在第 7 步单独生成(使用
--image-url-map参数,将本地路径替换为云端 URL)。
第 6 步:呈现结果
-
读取完整报告文件:使用 Read 工具读取
$INSPECT_DIR/report.md的全部内容 -
完整呈现报告:向用户呈现 Markdown 报告的全部内容,包括但不限于:
- 执行摘要和健康评分
- 检查概览表
- 区域级统计数据
- 需要关注的实例(包括警告 / 严重原因)
- 流量洞察
- 每种产品的详细检查结果(展示全部 11 种产品)
- 每种产品的深入分析(带宽分析、流量模式、丢包分析、成本优化等)
- 每种产品的监控图表引用和分析(图表已嵌入报告 Markdown 中,无需单独展示图片文件)
- 扩容建议和优化方向
- 容量规划建议
- 附录(风险等级说明、规格限制参考、方法说明)
-
如果不存在实例:报告将明确说明“此账户的检查范围内未找到 XXX 实例”
重要:不得以任何方式缩写、截断或总结报告内容。报告中的每个字、每张表格和每个深入分析部分都必须完整呈现。 注意:监控图表只需在最终报告(本地报告或钉钉文档)中展示;不要读取单独的 PNG 文件并在对话中展示给用户。
# Disable AI-Mode after inspection completes, restore default state
aliyun configure ai-mode disable
第 7 步:输出到钉钉文档(可选)
如果用户要求将报告输出到钉钉文档,请使用钉钉文档 MCP 服务。
核心原则:必须将完整报告写入钉钉文档;不得缩写、遗漏或截断任何内容。深入分析、图表引用、所有表格和全部文本都必须一并包含,不得例外。如果内容较长,必须分成多个部分写入;严禁通过精简内容来缩短篇幅。
前置条件:检查是否已安装钉钉文档 MCP
检查当前环境是否提供钉钉文档 MCP 工具(工具名称包含 dingtalk,并具有 create_document、update_document、get_doc_attachment_upload_info 等文档操作能力)。
如果未安装钉钉文档 MCP,请引导用户完成以下安装步骤:
- 打开钉钉 MCP 服务安装页面:https://aihub.dingtalk.com/#/detail?instanceId=474175&detailType=instanceMcpDetail&mcpId=9629
- 按照页面说明完成 MCP 服务的安装和授权配置
- 确保已正确配置 MCP 环境变量
DINGTALK_MCP_DOCS_URL - 安装完成后,重新运行此 Skill
使用钉钉文档 MCP 发布报告的完整工作流:
7.1 创建钉钉文档
使用钉钉文档 MCP 的 create_document 在目标文件夹中创建文档,文档名称为“Alibaba Cloud Network Product Inspection Report YYYY-MM-DD”。记录返回的文档 dentryUuid(后续所有操作都要用到)。
7.2 批量并行上传图表到钉钉文档(获取图片 URL)
高效并行地将 $CHARTS_DIR 下的所有 PNG 图表文件上传到钉钉文档:
阶段 1:批量获取上传凭证
对所有 PNG 文件同时调用 get_doc_attachment_upload_info,参数如下:
dentryUuid:第 7.1 步返回的文档 IDfileName:图片文件名(例如eip_eip-xxx_bandwidth.png)fileSize:文件大小,单位为字节mediaType:image/png
性能关键:在一条消息中发起所有
get_doc_attachment_upload_infoMCP 调用(不要逐个调用并等待每次返回后再调用下一个)。钉钉 MCP 支持并发调用,因此可以并行返回所有凭证。 阶段 2:并行 curl 上传
将所有 curl -X PUT 命令放入单个 Bash 调用中并行执行:
# All curls execute in parallel, wait at the end for all to complete
curl -s -X PUT "<uploadUrl_1>" -H "Content-Type: image/png" --data-binary @"$CHARTS_DIR/file1.png" &
curl -s -X PUT "<uploadUrl_2>" -H "Content-Type: image/png" --data-binary @"$CHARTS_DIR/file2.png" &
curl -s -X PUT "<uploadUrl_3>" -H "Content-Type: image/png" --data-binary @"$CHARTS_DIR/file3.png" &
# ... all images ...
wait
echo "All uploads done"
注意:如果图片超过 20 张,请拆分为 2–3 个并行批次(每批 10–15 张),每个批次内并行执行,各批次之间按顺序执行,以避免建立过多连接。
阶段 3:构建映射
收集 get_doc_attachment_upload_info 返回的所有 resourceUrl 值,构建 image_url_map({filename: resourceUrl} 映射),并将其写入 $INSPECT_DIR/image_url_map.json。
image_url_map.json 示例:
{
"eip_eip-xxx_bandwidth.png": "<resourceUrl>",
"nat_ngw-xxx_snat.png": "<resourceUrl>"
}
7.3 生成钉钉版本报告(使用云端图片 URL)
使用 --image-url-map 参数重新生成报告,将图片引用替换为钉钉 OSS resourceUrl:
python3 "$SCRIPTS_DIR/inspect_report.py" \
--dir "$INSPECT_DIR" \
--days $DAYS \
--charts-dir "$CHARTS_DIR" \
--image-url-map "$INSPECT_DIR/image_url_map.json" \
--output "$INSPECT_DIR/report_dingtalk.md"
生成的
report_dingtalk.md中所有图片路径都已替换为钉钉 OSS resourceUrl,确保在钉钉文档中正常呈现。
7.4 分段将完整报告写入钉钉文档
报告内容通常很长(包含 11 种产品的详细分析、深入分析和图表),因此必须分段写入。
最佳写入策略(已测试验证,请直接遵循,不要调整):
- 读取
$INSPECT_DIR/report_dingtalk.md的全部内容 - 按
##二级标题拆分为多个片段:以##开头的行作为分隔符,将报告拆分为多个块。第一个块包含报告标题(从# Alibaba Cloud Network Product Comprehensive Inspection Report到第一个##之前)。特别注意:## Product Inspection Details章节包含 11 种产品的完整内容,远大于其他章节,必须进一步按###三级标题拆分,每种产品单独作为一个块。 - 每种产品作为一个完整块写入:每个产品的
###片段都包含“详情表格 + 深入分析 + 监控图表引用”,这些内容是不可分割的整体。图片引用只是 Markdown 文本(每个约 100 个字符),不是二进制图片,不会导致超时。不要将图片引用与产品片段分开,单独写入。 - 拆分较大的产品:如果单个产品块超过 10000 个字符(例如,包含 18 个实例监控图表的 EIP),请在
#### Monitoring Charts处分成两个块:- 块 A:产品标题 + 详情表格 + 深入分析
- 块 B:
#### Monitoring Charts及其下方的所有图表引用 - 如果块 B 仍超过 10000 个字符,则进一步按每批 8–10 个实例拆分
- 块 A 和块 B 必须连续写入;中间不得插入其他产品的内容
- 尽可能合并较小的片段(减少 API 调用是优化速度的关键):相邻的较小章节(例如,没有实例的产品,或文字较少的产品片段)必须尽可能合并。只要合并后的内容不超过 10000 个字符,就应合并为一个块。典型情况:将多个没有实例的产品与 1–2 个实例较少的产品合并为一个块写入。
- 写入顺序:
- 第 1 个块 →
update_document,mode: overwrite(覆盖) - 第 2 至第 N 个块 →
update_document,mode: append(追加) - 尽量减少
update_document调用次数;目标为 8–12 次(而非 20 次以上),因为每次调用都有网络开销
- 第 1 个块 →
- 按片段逐段写入,直到报告末尾:所有章节(包括附录)都必须完整写入
注意:单次
update_document调用的内容不宜过大,否则可能触发钉钉 HSFTimeOutException(3000ms 超时)。建议单个块不超过 10000 个字符。经测试,10000 个字符或更少不会触发超时。 写入示例(典型报告,注意合并后总调用次数显著减少):
| 写入批次 | 内容 | 模式 | 预估字符数 |
|---|---|---|---|
| 批次 1 | 报告标题 + 执行摘要 + 检查概览 + 需要关注的实例 + 流量洞察 | overwrite | ~5000-8000 |
| 批次 2 | 产品 1(EIP)详情 + 深入分析(如果包含图表后超过 10000 个字符,则拆分) | append | ~6000-9000 |
| 批次 3 | 产品 1(EIP)监控图表(仅在上一步拆分时写入) | append | ~5000-8000 |
| 批次 4 | 产品 2(CBWP)+ 产品 3(NAT)完整内容(包括图表引用,合并写入) | append | ~6000-9000 |
| 批次 5 | 产品 4(CEN)+ 产品 5(TR)+ 产品 6(物理连接)+ 产品 7(VBR)(合并写入) | append | ~5000-8000 |
| 批次 6 | 产品 8(GA)+ 产品 9(CLB)完整内容(合并写入) | append | ~5000-8000 |
| 批次 7 | 产品 10(ALB)+ 产品 11(NLB)完整内容(合并写入) | append | ~5000-8000 |
| 批次 8 | 扩缩容建议 + 容量规划 + 附录(风险说明 + 规格参考 + 方法说明 + 免责声明) | append | ~4000-6000 |
关键规则(严格遵守):
- 每个产品的图表引用必须紧跟在该产品的文本内容之后写入;切勿将所有产品的图表集中放在报告末尾
- 报告格式参考:在每个产品的
#### Monitoring Charts下,按实例列出图表(**Instance ID (Name) — Metric:**+);没有监控数据的实例需附文字说明- 必须写入全部内容;不得省略任何章节、表格、深入分析或图片引用
- 没有实例的产品(“未找到 XXX 实例”)可以与相邻的空产品合并写入
- 核心提速方式:通过大幅合并,将
update_document调用次数从 20+ 次减少至 8-12 次
7.5 返回文档链接
向用户返回钉钉文档链接,并确认报告已完整写入(包括所有文本内容和图表)。
风险等级定义
| 等级 | 标记 | 标准 |
|---|---|---|
| 严重 | [!!!] | 利用率 >=90%、存在丢包、VBR 延迟 >100ms 或丢包 >5%、状态异常 |
| 警告 | [!] | 利用率 >=70%、VBR 延迟 >50ms 或丢包 >1%、ALB 5XX 错误率 >1% |
| 正常 | [OK] | 利用率 <70%、所有指标正常 |
| 错误 | [ERR] | 检查期间发生 API 错误 |
错误处理
- 未安装 aliyun CLI:提示运行
brew install aliyun-cli或从 GitHub 下载 - 身份验证失败:提示运行
aliyun configure配置访问凭证 - 未找到实例:明确输出“在此账户的检查范围内未找到 XXX 实例”;绝不静默跳过
- API 权限不足:跳过该产品并在报告中标记为错误;参见
references/ram-policies.md - 没有监控数据:可能原因:实例刚创建、没有流量或指标名称不匹配
- 未安装 matplotlib:提示运行
pip3 install matplotlib