返回技能市场
开发运维 安全

网络产品巡检

@aliyun/alibabacloud-network-health-inspection

阿里云网络产品全面巡检工具。根据用户提供的阿里云账号、地域和时间范围,自动巡检该账号下所有网络产品的使用情况和水位,包括:EIP、共享带宽包、NAT网关、CEN、TR、物理专线、VBR、GA、CLB、ALB、NLB

云Skills门户 热度 83v0.0.1

前置条件

  • 阿里云 CLI:必须安装并配置访问凭据(aliyun configure)。如果尚未安装,请在 macOS 上使用 brew install aliyun-cli,或从 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,原因如下:

  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 小时" / "过去一天" → --days 1
  • "最近 3 天" / "过去 3 天" → --days 3
  • 数据聚合周期(必填,无默认值):用户必须明确指定监控数据的聚合粒度(单位:秒)。数据查询和图表生成统一使用此粒度。常用值:
  • 60——1 分钟粒度,数据分辨率最高,适合短期故障排查
  • 300——5 分钟粒度,在分辨率与数据量之间取得平衡
  • 900——15 分钟粒度,数据量较少,适合长周期概览
  • 巡检产品范围(可选):默认巡检全部 11 类网络产品。用户可以指定仅巡检某些产品;从用户的自然语言中识别产品名称,并参照下方映射表确定待巡检产品列表。

产品名称识别映射

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

| 产品 ID | 可能的用户表述 | |-----------|--------------------------| | EIP | EIP、弹性 IP、弹性公网 IP、公网 IP | | CBWP | CBWP、共享带宽、共享带宽、带宽包 | | NAT | NAT、NAT 网关、NAT 网关 | | CEN | CEN、云企业网 | | TR | TR、转发路由器 | | PhysConn | 物理专线、高速通道、专线 | | VBR | VBR、虚拟边界路由器、边界路由器 | | GA | GA、全球加速 | | CLB | CLB、传统型负载均衡、SLB(注意:当用户说“SLB”时,通常指 CLB) | | ALB | ALB、应用型负载均衡 | | NLB | NLB、网络型负载均衡 |

特殊情况处理:

  • 用户说“负载均衡”但未指定类型 → 巡检 CLB + ALB + NLB(全部三种类型)
  • 用户说“专线”但未作区分 → 巡检物理专线 + VBR(VBR 是专线的流量监控入口)
  • 用户说“SLB” → 映射到 CLB(传统型负载均衡)

产品范围处理逻辑

  1. 用户未指定产品:巡检全部 11 类网络产品(默认行为)
  2. 用户指定了产品:仅巡检用户提到的产品;跳过未提到的产品
  3. 用户提到不支持的产品:明确告知用户,此 Skill 当前不支持巡检该产品。例如:
  4. > 此 Skill 当前不支持巡检“VPN 网关”。支持巡检的 11 类网络产品包括:EIP、共享带宽、NAT 网关、云企业网、转发路由器、物理专线、VBR、全球加速、CLB、ALB、NLB。

告知用户后,继续巡检用户提到的其他受支持产品(如有)。

必填参数确认逻辑

开始巡检前,必须确认用户已同时提供时间范围数据聚合周期参数。如果用户未指定这些参数,必须询问:

  1. 未指定时间范围时,询问:
  2. > 您希望巡检多长时间范围的数据?例如:最近 1 天、最近 3 天、最近 7 天等。

  1. 未指定数据聚合周期时,询问并说明其含义:
  2. > 您希望监控数据使用什么聚合周期?聚合周期决定监控数据点之间的时间间隔: > - 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)查询要点

  1. CMS 是全局服务:始终将 cn-hangzhou 用作 CMS 端点地域;监控数据归属由维度中的 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 调用声明

此 Skill 中的所有 API 调用均为只读查询,不涉及任何资源的创建、修改或删除。

所使用的只读 APIs 列表:

  • 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 - 查询全球加速实例列表
  • slb:DescribeLoadBalancers - 查询 CLB 列表
  • alb:ListLoadBalancers - 查询 ALB 列表
  • nlb:ListLoadBalancers - 查询 NLB 列表

阿里云 CLI AI-Mode 配置

此 Skill 中的所有阿里云 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 后,阿里云 CLI 会在请求中包含 User-Agent 请求头,使阿里云平台能够识别由 AI Agents 发起的只读查询。Skill 执行完成后,必须运行 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"
如需输出到 DingTalk 文档,请先生成本地版报告以供展示;DingTalk 版报告将在步骤 7 中单独生成(使用 --image-url-map 参数将本地路径替换为云端 URL)。

步骤 6:呈现结果

  1. 读取完整报告文件:使用 Read 工具读取 $INSPECT_DIR/report.md 的全部内容
  2. 完整呈现报告:向用户呈现 Markdown 报告的全部内容,包括但不限于:
  • 执行摘要和健康评分
  • 巡检概览表
  • 地域级统计数据
  • 需要关注的实例(含警告/严重原因)
  • 流量洞察
  • 各产品的详细巡检结果(展示全部 11 类产品)
  • 各产品的深入分析(带宽分析、流量模式、丢包分析、成本优化等)
  • 各产品的监控图表引用和分析(图表已嵌入 Markdown 报告;无需单独显示图像文件)
  • 扩容建议和优化方向
  • 容量规划建议
  • 附录(风险等级说明、规格上限参考、方法论说明)
  1. 如果不存在实例:报告将明确说明“在此账号的巡检范围内未找到 XXX 实例”
重要:不得以任何方式缩写、截断或总结报告内容。报告的每个字、每张表格和每个深入分析章节都必须完整展示。
注意:监控图表只需在最终报告(本地报告或 DingTalk 文档)中展示;不得读取单个 PNG 文件并在对话中向用户展示。
# Disable AI-Mode after inspection completes, restore default state
aliyun configure ai-mode disable

步骤 7:输出到 DingTalk 文档(可选)

如果用户要求将报告输出到 DingTalk 文档,请使用 DingTalk 文档 MCP 服务。

核心原则:必须将完整报告写入 DingTalk 文档;不得对任何内容进行缩写、遗漏或截断。深入分析、图表引用、所有表格和全部文本都必须无一例外地包含在内。如果内容较长,必须分段写入;严禁为了缩短篇幅而删减内容。

前提条件:检查是否已安装 DingTalk 文档 MCP

检查当前环境中是否有可用的 DingTalk 文档 MCP 工具(工具名称包含 dingtalk,且具备 create_documentupdate_documentget_doc_attachment_upload_info 等文档操作能力)。 如果未安装 DingTalk 文档 MCP,请引导用户完成以下安装步骤:

  1. 打开 DingTalk MCP 服务安装页面:https://aihub.dingtalk.com/#/detail?instanceId=474175&detailType=instanceMcpDetail&mcpId=9629
  2. 按照页面说明完成 MCP 服务安装和授权配置
  3. 确保已正确配置 MCP 环境变量 DINGTALK_MCP_DOCS_URL
  4. 安装完成后,重新运行此 Skill

使用 DingTalk 文档 MCP 发布报告的完整工作流程:

7.1 创建 DingTalk 文档

使用 DingTalk 文档 MCP 的 create_document 在目标文件夹中创建文档,文档名为“阿里云网络产品巡检报告 YYYY-MM-DD”。记录返回的文档 dentryUuid(用于后续所有操作)。

7.2 将图表批量并行上传到 DingTalk 文档(获取图像 URL)

高效并行地$CHARTS_DIR 下的所有 PNG 图表文件上传到 DingTalk 文档:

阶段 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 调用(不得逐个调用,即等待一个调用返回后才发起下一个)。DingTalk 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 生成 DingTalk 版本报告(使用云端图像 URL)

使用 --image-url-map 参数重新生成报告,将图像引用替换为 DingTalk OSS resourceUrls:

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](...) 图像路径均已替换为 DingTalk OSS resourceUrls,确保在 DingTalk 文档中正确渲染。

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

报告内容通常很长(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 必须连续写入;两者之间不得插入其他产品的内容
  1. 尽可能合并小分段(减少 API 调用是速度优化的关键):相邻的小节(例如无实例的产品或内容很少的产品分段)必须尽可能合并。只要合并结果不超过 10000 个字符,就合并为一个分块。典型场景:多个无实例的产品 + 1-2 个实例较少的产品,可以合并为一个分块写入。
  2. 写入顺序
  • 第 1st 个分块 → update_documentmode: overwrite(覆盖)
  • 第 2nd 个至第 N 个分块 → update_documentmode: append(追加)
  • 尽量减少 update_document 调用次数;目标是调用 8-12 次(而非 20+ 次),因为每次调用都有网络开销
  1. 逐段写入,直至报告结束:包括附录在内的所有章节都必须完整写入
注意:单次 update_document 调用不应过大,否则可能触发 DingTalk HSFTimeOutException(3000ms 超时)。建议单个分块不超过 10000 个字符。经测试:10000 个字符或更少不会触发超时。

写入示例(典型报告,注意合并后调用总次数显著减少):

| 写入批次 | 内容 | 模式 | 预计字符数 | |------------|---------|------|---------------------| | 批次 1 | 报告标题 + 执行摘要 + 巡检概览 + 需关注的实例 + 流量洞察 | 覆盖 | ~5000-8000 | | 批次 2 | 产品 1(EIP)详情 + 深度分析(若加入图表后超过 10000 个字符,则将图表拆分出来) | 追加 | ~6000-9000 | | 批次 3 | 产品 1(EIP)监控图表(仅当前一步已拆分时) | 追加 | ~5000-8000 | | 批次 4 | 产品 2(CBWP)+ 产品 3(NAT)的完整内容(包括图表引用,合并写入) | 追加 | ~6000-9000 | | 批次 5 | 产品 4(CEN)+ 产品 5(TR)+ 产品 6(物理专线)+ 产品 7(VBR)(合并写入) | 追加 | ~5000-8000 | | 批次 6 | 产品 8(GA)+ 产品 9(CLB)的完整内容(合并写入) | 追加 | ~5000-8000 | | 批次 7 | 产品 10(ALB)+ 产品 11(NLB)的完整内容(合并写入) | 追加 | ~5000-8000 | | 批次 8 | 扩缩容建议 + 容量规划 + 附录(风险说明 + 规格参考 + 方法说明 + 免责声明) | 追加 | ~4000-6000 |

关键规则(必须严格遵循):
- 每个产品的图表引用必须紧接在该产品的文本内容之后写入;严禁将所有产品的图表集中放在报告末尾
- 报告格式参考:每个产品的 #### Monitoring Charts 下按实例列出图表(Instance ID (Name) — Metric: + ![](url));没有监控数据的实例会显示文字说明
- 所有内容都必须完整写入;不得遗漏任何章节、表格、深度分析或图片引用
- 无实例的产品("未找到 XXX 实例")可以与相邻的无实例产品合并写入
- 速度优化的核心:通过尽可能合并,将 update_document 调用次数从 20+ 次降至 8-12 次

7.5 返回文档链接

向用户返回 DingTalk 文档链接,并确认报告已完整写入(包括所有文本内容和图表)。

风险等级定义

| 等级 | 标记 | 判定标准 | |-------|------|----------| | 严重 | [!!!] | 利用率 >= 90%,出现丢包,VBR 延迟 > 100ms 或丢包率 > 5%,状态异常 | | 警告 | [!] | 利用率 >= 70%,VBR 延迟 > 50ms 或丢包率 > 1%,ALB 5XX 错误率 > 1% | | OK | [OK] | 利用率 < 70%,所有指标正常 | | 错误 | [ERR] | 巡检期间发生 API 错误 |

错误处理

  • 未安装阿里云 CLI:用 Prompt 引导用户运行 brew install aliyun-cli,或从 GitHub 下载
  • 身份验证失败:用 Prompt 引导用户运行 aliyun configure 以配置访问凭证
  • 未找到实例:明确输出“在此账号的巡检范围内未找到 XXX 实例”;不得静默跳过
  • API 权限不足:跳过该产品,并在报告中标记为错误;请参见 references/ram-policies.md
  • 无监控数据:可能的原因包括实例刚刚创建、无流量或指标名称不匹配
  • matplotlib 未安装:通过 Prompt 提示用户运行 pip3 install matplotlib
qianwen skills install @aliyun/alibabacloud-network-health-inspection