mcpField
A
alibabacloud-network-health-inspection

alibabacloud-network-health-inspection

github.com/aliyun云与 DevOps28196 次安装1 天前更新
代码仓库

关于 alibabacloud-network-health-inspection

用于检查 Alibaba Cloud 网络健康状况的只读 Agent Skill,通过 Cloud Monitor 指标和资源查询覆盖 11 类网络产品,并可生成监控图表。

主要功能

  1. 01检查 11 类网络产品指标
  2. 02查询资源清单和监控数据
  3. 03选择检查区域和产品
  4. 04生成监控图表
  5. 05按产品报告权限错误

适用场景

  1. 01查看指定时段的网络健康状况
  2. 02排查带宽或连接问题
  3. 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.md
scripts/
inspect_alb.py
inspect_cbwp.py
inspect_cen.py
inspect_charts.py
inspect_clb.py
inspect_common.py
inspect_eip.py
inspect_ga.py
inspect_nat.py
inspect_nlb.py
inspect_physconn.py
inspect_report.py
inspect_tr.py
inspect_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查询所有网络产品的监控指标数据(核心权限)
VPCvpc:DescribeEipAddresses查询 EIP 列表
VPCvpc:DescribeCommonBandwidthPackages查询共享带宽包列表
VPCvpc:DescribeNatGateways查询 NAT 网关列表
VPCvpc:DescribePhysicalConnections查询物理专线列表
VPCvpc: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查询全球加速实例列表
CLBslb:DescribeLoadBalancers查询 CLB 列表
ALBalb:ListLoadBalancers查询 ALB 列表
NLBnlb:ListLoadBalancers查询 NLB 列表

推荐的 RAM 策略 JSON 和详细安全说明,请参阅 references/ram-policies.md。

如果某个产品缺少足够的 API 权限,Skill 会跳过该产品,并在报告中将其标记为错误,不影响对其他产品的检查。

操作安全声明(PreToolUse Hook)

此 Skill 不会配置 PreToolUse Hook,原因如下:

  1. 纯只读操作:所有 API 调用都是 Describe* / List* 只读查询,不会创建、修改或删除任何资源
  2. 工具范围受限:allowed-tools 仅声明了 Bash Read;Skill 无法调用 Write、Edit 或其他文件写入工具
  3. Bash 用途受限:Bash 工具仅用于执行 aliyun CLI 只读查询命令和 python3 检查脚本,不会用于写入操作
  4. 不涉及高风险操作:不存在需要人工确认(HITL)的删除、批量写入或权限变更操作

因此,此 Skill 不包含需要拦截或二次确认的操作,无需配置 PreToolUse Hook。如果未来版本增加写入操作能力,则必须相应地添加 PreToolUse Hook 拦截机制。

输入参数

用户需要提供以下信息(从用户的自然语言中提取):

  • 区域(可选):默认值为 cn-hangzhou;支持以逗号分隔的多个区域,例如 cn-hangzhou,cn-shanghai
  • 时间范围(必填,无默认值):用户必须明确指定检查时间范围。转换为天数:
    • “上周” / “过去 7 天” → --days 7
    • “过去 24 小时” / “过去 1 天” → --days 1
    • “过去 3 天” → --days 3
  • 数据聚合周期(必填,无默认值):用户必须明确指定监控数据的聚合粒度(单位:秒)。数据查询和图表生成统一使用此粒度。常见值:
    • 60 — 1 分钟粒度,数据分辨率最高,适合短期故障排查
    • 300 — 5 分钟粒度,在分辨率和数据量之间取得平衡
    • 900 — 15 分钟粒度,数据量较少,适合长周期概览
  • 检查产品范围(可选):默认检查全部 11 类网络产品。用户可以指定只检查某些产品;根据用户的自然语言识别产品名称,并参照下表确定要检查的产品列表。
产品名称识别映射

从用户输入中提取产品关键词,并映射到对应的检查产品。同一产品可能有多种表达方式;必须识别所有表达方式:

产品 ID用户可能使用的表达方式
EIPEIP、Elastic IP、Elastic Public IP、Public IP
CBWPCBWP、Common Bandwidth Package、Shared Bandwidth、Bandwidth Package
NATNAT、NAT Gateway、NAT Gateway
CENCEN、Cloud Enterprise Network
TRTR、Transit Router
PhysConnPhysical Connection、Express Connect、Dedicated Line
VBRVBR、Virtual Border Router、Border Router
GAGA、Global Accelerator
CLBCLB、Classic Load Balancer、SLB(注意:用户说“SLB”时,通常指 CLB)
ALBALB、Application Load Balancer
NLBNLB、Network Load Balancer

特殊情况处理:

  • 用户未指定类型而只说“负载均衡” → 检查 CLB + ALB + NLB(全部三种类型)
  • 用户未作区分而只说“专线” → 检查 Physical Connection + VBR(VBR 是专线的流量监控入口)
  • 用户说“SLB” → 映射为 CLB(Classic Load Balancer)
产品范围处理逻辑
  1. 用户未指定产品:检查全部 11 类网络产品(默认行为)

  2. 用户指定了产品:仅检查用户提及的产品;跳过未提及的产品

  3. 用户提及了不受支持的产品:明确告知用户,此 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. 未指定时间范围时,询问:

    您想检查多长时间的数据?例如:过去 1 天、过去 3 天、过去 7 天等。

  2. 未指定数据聚合周期时,询问并说明其含义:

    您希望监控数据采用什么聚合周期?聚合周期决定了监控数据点之间的时间间隔:

    • 60 秒(1 分钟):每分钟一个数据点,分辨率最高,适合排查短时间范围内的问题
    • 300 秒(5 分钟):每 5 分钟一个数据点,在分辨率和数据量之间取得良好平衡
    • 900 秒(15 分钟):每 15 分钟一个数据点,数据量较少,适合查看较长时间段的整体趋势

    注意:聚合周期越短,需要获取的数据点越多,检查时间也会显著增加。例如,以 60 秒粒度检查 7 天的数据,每个指标约需 10,080 个数据点;而以 900 秒粒度检查,则每个指标只需约 672 个数据点。

确认这两个参数后,再继续执行检查工作流。

支持的 11 类网络产品

#产品脚本云监控命名空间关键指标
1弹性公网 IP(EIP)inspect_eip.pyacs_vpc_eip出/入方向带宽、限速丢包
2共享带宽包(CBWP)inspect_cbwp.pyacs_bandwidth_package出/入方向带宽、利用率、限速丢包
3NAT 网关inspect_nat.pyacs_nat_gateway出/入方向带宽、SNAT 连接数、连接丢包
4云企业网(CEN)inspect_cen.pyacs_cen跨地域出/入方向带宽、带宽包容量
5转发路由器(TR)inspect_tr.py-TR 连接状态、VPC/VBR 挂载数量
6物理专线inspect_physconn.py-连接状态(流量请查看 VBR)
7VBRinspect_vbr.pyacs_physical_connection出/入方向带宽、健康检查时延/丢包
8全球加速(GA)inspect_ga.pyacs_global_acceleration出/入方向带宽、包速率
9传统型负载均衡(CLB)inspect_clb.pyacs_slb_dashboard流量、连接数、QPS、丢包
10应用型负载均衡(ALB)inspect_alb.pyacs_albQPS、HTTP 状态码、连接数
11网络型负载均衡(NLB)inspect_nlb.pyacs_nlb带宽、活跃连接数、新建连接数

重要技术说明

云监控(CMS)查询要点
  1. CMS 是一项全球服务:始终使用 cn-hangzhou 作为 CMS 终端节点地域;监控数据的归属由 Dimensions 中的 instanceId 决定,与终端节点地域无关
  2. VBR 的 CMS 命名空间是 acs_physical_connection,而不是 acs_express_connect
  3. CBWP 指标名称:bwp_tx_rate/bwp_rx_rate,而不是 net_tx.rate/net_rx.rate
  4. NAT 网关丢包指标:SessionLimitDropRate,而不是 SessionLimitDropConnection
  5. VBR 健康检查时延:VbrHealthyCheckLatency 的单位是微秒(us),需除以 1000 转换为毫秒(ms)
  6. VBR 丢包率:VbrHealthyCheckLossRate 的返回值已经是百分比,无需乘以 100
  7. ALB/NLB CMS 维度键:使用 loadBalancerId,而不是 instanceId
  8. 物理专线没有云监控指标:必须通过关联的 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 步:呈现结果
  1. 读取完整报告文件:使用 Read 工具读取 $INSPECT_DIR/report.md 的全部内容

  2. 完整呈现报告:向用户呈现 Markdown 报告的全部内容,包括但不限于:

    • 执行摘要和健康评分
    • 检查概览表
    • 区域级统计数据
    • 需要关注的实例(包括警告 / 严重原因)
    • 流量洞察
    • 每种产品的详细检查结果(展示全部 11 种产品)
    • 每种产品的深入分析(带宽分析、流量模式、丢包分析、成本优化等)
    • 每种产品的监控图表引用和分析(图表已嵌入报告 Markdown 中,无需单独展示图片文件)
    • 扩容建议和优化方向
    • 容量规划建议
    • 附录(风险等级说明、规格限制参考、方法说明)
  3. 如果不存在实例:报告将明确说明“此账户的检查范围内未找到 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,请引导用户完成以下安装步骤:

  1. 打开钉钉 MCP 服务安装页面:https://aihub.dingtalk.com/#/detail?instanceId=474175&detailType=instanceMcpDetail&mcpId=9629
  2. 按照页面说明完成 MCP 服务的安装和授权配置
  3. 确保已正确配置 MCP 环境变量 DINGTALK_MCP_DOCS_URL
  4. 安装完成后,重新运行此 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 步返回的文档 ID
  • fileName:图片文件名(例如 eip_eip-xxx_bandwidth.png)
  • fileSize:文件大小,单位为字节
  • mediaType:image/png

性能关键:在一条消息中发起所有 get_doc_attachment_upload_info MCP 调用(不要逐个调用并等待每次返回后再调用下一个)。钉钉 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 中所有 ![xxx](...) 图片路径都已替换为钉钉 OSS resourceUrl,确保在钉钉文档中正常呈现。

7.4 分段将完整报告写入钉钉文档

报告内容通常很长(包含 11 种产品的详细分析、深入分析和图表),因此必须分段写入。

最佳写入策略(已测试验证,请直接遵循,不要调整):

  1. 读取 $INSPECT_DIR/report_dingtalk.md 的全部内容
  2. 按 ## 二级标题拆分为多个片段:以 ## 开头的行作为分隔符,将报告拆分为多个块。第一个块包含报告标题(从 # Alibaba Cloud Network Product Comprehensive Inspection Report 到第一个 ## 之前)。特别注意:## Product Inspection Details 章节包含 11 种产品的完整内容,远大于其他章节,必须进一步按 ### 三级标题拆分,每种产品单独作为一个块。
  3. 每种产品作为一个完整块写入:每个产品的 ### 片段都包含“详情表格 + 深入分析 + 监控图表引用”,这些内容是不可分割的整体。![](url) 图片引用只是 Markdown 文本(每个约 100 个字符),不是二进制图片,不会导致超时。不要将图片引用与产品片段分开,单独写入。
  4. 拆分较大的产品:如果单个产品块超过 10000 个字符(例如,包含 18 个实例监控图表的 EIP),请在 #### Monitoring Charts 处分成两个块:
    • 块 A:产品标题 + 详情表格 + 深入分析
    • 块 B:#### Monitoring Charts 及其下方的所有图表引用
    • 如果块 B 仍超过 10000 个字符,则进一步按每批 8–10 个实例拆分
    • 块 A 和块 B 必须连续写入;中间不得插入其他产品的内容
  5. 尽可能合并较小的片段(减少 API 调用是优化速度的关键):相邻的较小章节(例如,没有实例的产品,或文字较少的产品片段)必须尽可能合并。只要合并后的内容不超过 10000 个字符,就应合并为一个块。典型情况:将多个没有实例的产品与 1–2 个实例较少的产品合并为一个块写入。
  6. 写入顺序:
    • 第 1 个块 → update_document,mode: overwrite(覆盖)
    • 第 2 至第 N 个块 → update_document,mode: append(追加)
    • 尽量减少 update_document 调用次数;目标为 8–12 次(而非 20 次以上),因为每次调用都有网络开销
  7. 按片段逐段写入,直到报告末尾:所有章节(包括附录)都必须完整写入

注意:单次 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:** + ![](url));没有监控数据的实例需附文字说明
  • 必须写入全部内容;不得省略任何章节、表格、深入分析或图片引用
  • 没有实例的产品(“未找到 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

评论

支持 Markdown