| name | cloud-resource-optimizer |
| description | 多云资源使用率和成本优化分析技能。用于结合 hcloud/KooCLI、aliyun CLI、Prometheus 和账单数据生成华为云与阿里云资源使用情况报告,拉取华为云 ECS/EVS/RDS/DCS/OBS 配置、阿里云 ResourceCenter 全账号资源配置,整合云资源规格、监控使用率和费用,识别闲置、低利用、高风险和可降配资源。适用于:云资源盘点、华为云/阿里云跨云报告、ECS/磁盘/RDS/Redis/SLB/ALB/NLB/PolarDB/Flink/SelectDB/Kafka/OSS/NAT/EIP/NAS 配置清单、成本优化建议、账单费用归因、云 CLI 采集数据整理。
|
Cloud Resource Optimizer
生成多云资源使用率和配置报告。优先使用确定性脚本,不要手写 PromQL、临时解析账单或手工调用零散云 API,除非脚本缺失。
推荐工作流
- 确认 Python 依赖:
python3 - <<'PY'
import importlib.util
for m in ["openpyxl", "requests"]:
print(m, bool(importlib.util.find_spec(m)))
PY
如果缺依赖且系统 Python 受 PEP 668 管理,用本地目录安装:
python3 -m pip install --target .pydeps -r requirements.txt
export PYTHONPATH="$PWD/.pydeps${PYTHONPATH:+:$PYTHONPATH}"
- 生成完整报告。默认会先用
hcloud 刷新华为云配置、用 aliyun 刷新阿里云 ResourceCenter 配置,再生成华为云 + 阿里云使用率报告,并把两朵云的配置 sheet 追加到同一个 Excel:
PYTHONPATH="$PWD/.pydeps${PYTHONPATH:+:$PYTHONPATH}" \
python3 scripts/generate_full_resource_report.py --days 30 \
--output cloud_resource_usage_all_latest.xlsx
指定华为云多地域时传:
PYTHONPATH="$PWD/.pydeps${PYTHONPATH:+:$PYTHONPATH}" \
python3 scripts/generate_full_resource_report.py --days 30 \
--huaweicloud-regions cn-south-1,cn-north-4 \
--output cloud_resource_usage_all_latest.xlsx
- 如果只需要刷新华为云配置清单,单独运行:
PYTHONPATH="$PWD/.pydeps${PYTHONPATH:+:$PYTHONPATH}" \
python3 scripts/fetch_huaweicloud_configs.py --regions cn-south-1
输出:
references/huaweicloud_configs.json:hcloud 原始配置快照
huaweicloud_resource_configs_latest.xlsx:华为云 ECS/EVS/RDS/DCS/OBS 配置清单
references/hw-ecs.xlsx、references/hw-evs.xlsx、references/obs.xlsx:回写给使用率报告脚本读取的兼容文件
- 如果只需要刷新阿里云全账号配置清单,单独运行:
PYTHONPATH="$PWD/.pydeps${PYTHONPATH:+:$PYTHONPATH}" \
python3 scripts/fetch_aliyun_resourcecenter_configs.py
输出:
references/aliyun_resourcecenter_configs.json:ResourceCenter 原始配置
aliyun_resource_configs_latest.xlsx:阿里云配置清单
references/ecs-*.json、references/redis-*.json:回写给使用率报告脚本读取的规格文件
- 准备华为云基础数据。优先用
fetch_huaweicloud_configs.py 自动生成;缺失时报告仍可跑,但规格、部门或费用会不完整。
references/hw-ecs.xlsx:ECS 实例 ID、名称、规格、标签、计费方式
references/hw-evs.xlsx:云硬盘 ID、名称、容量、挂载主机、标签
references/obs.xlsx:OBS bucket 清单
references/hw-rds.csv:可选,RDS 配置补充
- 准备账单数据。费用优化报告需要账单;只有使用率报告时可缺省。
references/hw.csv:统一费用文件,字段需包含 cloud/sub_res_type/instance_id/instance_name/instance_type/project/region/cost_money
references/instance_bill_detail_*.csv:华为云费用中心流水和明细账单
references/*consumedetailbillv2*.csv:阿里云费用中心账单明细
- 如果不需要追加云资源配置 sheet,也可以直接生成使用率报告:
PYTHONPATH="$PWD/.pydeps${PYTHONPATH:+:$PYTHONPATH}" \
python3 scripts/generate_cloud_report.py --cloud all --days 30 \
--output cloud_resource_usage_all_latest.xlsx
- 验证输出:
PYTHONPATH="$PWD/.pydeps${PYTHONPATH:+:$PYTHONPATH}" python3 - <<'PY'
from openpyxl import load_workbook
p = "cloud_resource_usage_all_latest.xlsx"
wb = load_workbook(p, read_only=True)
print(len(wb.sheetnames))
print(wb.sheetnames)
for ws in wb.worksheets:
print(ws.title, ws.max_row, ws.max_column)
wb.close()
PY
华为云配置采集
使用 scripts/fetch_huaweicloud_configs.py 通过 KooCLI 采集配置:
hcloud ECS ListServersDetails --cli-region cn-south-1 --enterprise_project_id=all_granted_eps --cli-output=json
hcloud EVS ListVolumes --cli-region cn-south-1 --enterprise_project_id=all_granted_eps --cli-output=json
hcloud RDS ListInstances --cli-region cn-south-1 --cli-output=json
hcloud DCS ListInstances --cli-region cn-south-1 --cli-output=json
hcloud obs ls
脚本默认读取 hcloud configure list 的当前 profile 地域;跨地域采集时显式传 --regions cn-south-1,cn-north-4。ECS/EVS/RDS/DCS 按分页拉取;OBS 用 hcloud obs ls 尽力采集,如果 OBS CLI 未配置或失败,不阻断其他资源。
兼容回写规则:
hw-ecs.xlsx:供报告脚本补齐 ECS ID、规格、CPU、内存、标签、计费方式。
hw-evs.xlsx:供报告脚本按磁盘 ID 和挂载主机匹配磁盘容量、标签和费用。
obs.xlsx:供报告脚本生成华为云 OBS sheet;如果 OBS 采集返回空,脚本保留已有文件。
阿里云配置采集
使用 scripts/fetch_aliyun_resourcecenter_configs.py 采集配置。它通过:
aliyun resourcecenter SearchResources --endpoint resourcecenter.aliyuncs.com ...
aliyun resourcecenter GetResourceConfiguration --endpoint resourcecenter.aliyuncs.com ...
覆盖的 ResourceCenter 类型:
| 类别 | ResourceType |
|---|
| ECS | ACS::ECS::Instance, ACS::ECS::Disk |
| 数据库/缓存 | ACS::RDS::DBInstance, ACS::Redis::DBInstance, ACS::PolarDB::DBCluster, ACS::MongoDB::DBInstance, ACS::ADB::DBCluster, ACS::ClickHouse::DBCluster, ACS::GPDB::DBInstance |
| 负载均衡 | ACS::SLB::LoadBalancer, ACS::ALB::LoadBalancer, ACS::NLB::LoadBalancer |
| 数据/中间件 | ACS::AliKafka::Instance, ACS::RealtimeCompute::VvpInstance, ACS::SelectDB::DBInstance, ACS::StarRocks::Instance |
| 存储/网络 | ACS::OSS::Bucket, ACS::NAS::FileSystem, ACS::NAT::NatGateway, ACS::EIP::EipAddress, ACS::CBWP::CommonBandwidthPackage |
如果逐产品 API 如 aliyun ecs DescribeInstances --RegionId us-west-1 返回 InvalidAccessKeyId.AccessPolicyDenied,不要直接判断账号无权限。先检查 aliyun configure list,然后使用 ResourceCenter endpoint 拉全账号配置。ResourceCenter 能跨地域返回 us-west-1 资源。
使用率数据
报告脚本从 Prometheus 查询近 N 天平均值和最大值:
| 云 | URL |
|---|
| 华为云 | 环境变量 HUAWEICLOUD_PROMETHEUS_URL |
| 阿里云 | 环境变量 ALIYUN_PROMETHEUS_URL |
不要把监控端点、账号 ID 或凭据写入技能文件。若端点未配置,停止指标采集并明确报告缺失项。
支持的使用率 sheet:
- 华为云:OBS、ECS、磁盘、RDS、DCS
- 阿里云:ECS、磁盘、RDS、SLB、PolarDB、Flink、SelectDB、Kafka、Redis
注意:配置存在不代表 Prometheus 有使用率指标。比如 ResourceCenter 可能有 Flink/SelectDB 实例,但 Prometheus 指标缺失时,使用率 sheet 会显示 0 或仅表头。此时应同时提供 aliyun_resource_configs_latest.xlsx 或把配置 sheet 追加到主报告。
状态判定
核心阈值:
| 资源 | 闲置/严重浪费 | 需优化 | 偏高/风险 |
|---|
| ECS CPU | <5% 闲置,<10% 严重浪费 | <30% | >70% 偏高,>85% 风险 |
| ECS 内存 | <10% 闲置,<20% 严重浪费 | <40% | >80% 偏高,>90% 风险 |
| 磁盘 | <20% 低利用 | <40% | >80% 偏高,>85% 告警 |
| RDS/PolarDB | CPU <40% 且内存 <50% 低利用 | 连接/磁盘低于基线 | CPU >70% 或内存 >80% |
| Redis/DCS | 内存 <10% 闲置 | <30% | >70% 偏高 |
| SLB | 连接和 QPS <10% 闲置 | <30% | >70% 偏高 |
更完整标准见 references/云资源使用规范.md。
常用脚本
| 脚本 | 用途 |
|---|
scripts/generate_full_resource_report.py | 一键生成完整报告:ResourceCenter 配置 + 多云使用率 + 配置 sheet |
scripts/fetch_huaweicloud_configs.py | 通过 hcloud/KooCLI 拉取华为云 ECS/EVS/RDS/DCS/OBS 配置,生成兼容 xlsx |
scripts/fetch_aliyun_resourcecenter_configs.py | 拉取阿里云全账号资源配置,生成配置 Excel 和 ECS/Redis JSON |
scripts/generate_cloud_report.py | 生成华为云 + 阿里云多云使用率报告 |
scripts/generate_aliyun_json_report.py | 仅使用 JSON 规格生成阿里云报告 |
scripts/generate_aliyun_report.py | 逐产品 CLI 方式,仅在 ResourceCenter 不适用时使用 |
scripts/generate_redis_report.py | 单独生成 Redis 报告 |
scripts/analyze_aliyun_disk_list.py | 整理阿里云控制台导出的磁盘 CSV |
scripts/analyze_cloud_resources.sh | Shell 版快速分析 |
故障处理
hcloud 只返回当前地域资源:检查 hcloud configure list 当前 profile 的 region,跨地域使用 --huaweicloud-regions 或 fetch_huaweicloud_configs.py --regions 显式指定。
hcloud ... project_id required 或地域鉴权失败:先确认 profile 中 AK/SK、domainId/projectId/region 是否匹配;脚本会优先让 KooCLI 根据地域推断 project_id。
- 华为云 OBS 缺失:确认
hcloud obs ls 可单独运行;OBS 失败不会阻断 ECS/EVS/RDS/DCS,必要时继续使用已有 references/obs.xlsx。
unknown endpoint for resourcecenter/<region>:ResourceCenter 必须显式传 --endpoint resourcecenter.aliyuncs.com。
InvalidAccessKeyId.AccessPolicyDenied:通常是逐产品 API、profile 或地域策略问题。优先改用 ResourceCenter;必要时用 aliyun configure list 查看当前 profile。
- 报告费用为 0:检查
references/hw.csv、华为云 instance_bill_detail_*.csv、阿里云 *consumedetailbillv2*.csv 是否存在。
- 阿里云 ECS/Redis 数量不对:先运行
fetch_aliyun_resourcecenter_configs.py,确认 references/ecs-*.json 和 references/redis-*.json 是最新 ResourceCenter 回写结果。
- 使用率资源少于配置资源:Prometheus 指标缺失或 label 无法匹配,配置清单仍以
aliyun_resource_configs_latest.xlsx 为准。