Prometheus 监控阿里云与腾讯云全栈实战:从 ECS 到 CDN 的混合云可观测性
在混合云架构下,阿里云和腾讯云承载着大量 ECS、RDS、Redis、SLB、CDN、CVM、CLB 等资源。它们的健康指标(CPU、内存、网络、磁盘、连接数、QPS)被封闭在各自的云监控平台中,与自建 Prometheus 割裂。aliyun-exporter与tencentcloud-exporter正是打通这两大云平台的桥梁——它们通过云厂商的监控 API 周期性拉取指标,转化为 Prometheus 标准格式,让你在统一的可观测平台上洞察所有云资源的脉搏。本文将带你从零配置 RAM/CAM 权限、部署导出器、编写采集规则,到构建 Grafana 大屏与告警规则,实现异构云基础设施的完全透明化。
1. 为什么需要云监控导出器?
| 原生云监控 | 云监控导出器带来的增强 |
|---|---|
| 指标散落在各云控制台,无法关联 | 所有云资源指标汇集于 Prometheus,可统一查询与聚合 |
| 告警渠道独立(云监控告警) | 使用 Alertmanager 统一路由告警,避免多套通知 |
| 仪表盘局限于云厂商内置 | 结合 Grafana 强大定制能力,创建跨云、跨区域动态看板 |
| 无法与自建服务指标关联 | 通过 PromQL 将云资源指标与应用指标关联,快速定位瓶颈 |
社区提供了成熟的aliyun-exporter(aylei/aliyun-exporter)和tencentcloud-exporter(tencentcloud/tencentcloud-exporter),均支持数十种云产品,配置灵活,性能可靠。
2. 阿里云监控:aliyun-exporter 全流程
2.1 配置 RAM 权限
在阿里云 RAM 控制台创建只读权限的子账号,生成 AccessKey ID 和 Secret。最小权限策略示例:
{"Version":"1","Statement":[{"Action":["cms:DescribeMetricList","cms:DescribeMetricData","cms:DescribeMetricLast","cms:QueryMetricList"],"Resource":"*","Effect":"Allow"}]}将 AccessKey ID、Secret 以及需要监控的区域 ID(如cn-hangzhou)准备好。
2.2 部署 aliyun-exporter
Docker 部署:
dockerrun-d\--namealiyun-exporter\-p9525:9525\-eALIYUN_ACCESS_ID=your_access_key\-eALIYUN_ACCESS_SECRET=your_secret_key\-eALIYUN_REGION=cn-hangzhou\-v/path/to/aliyun-exporter.yml:/etc/aliyun-exporter/aliyun-exporter.yml\aylei/aliyun-exporter:latestExporter 默认监听9525端口,/metrics端点提供 Prometheus 指标。
2.3 编写采集配置文件 (aliyun-exporter.yml)
# aliyun-exporter.ymlperiod:60s# 拉取间隔regions:-cn-hangzhoumetrics:# ECS 实例-name:acs_ecs_dashboardnamespace:acs_ecs_dashboardperiod:60smeasures:-CPUUtilization-memory_usedutilization-DiskReadBPS-DiskWriteBPS-InternetIn-InternetOut# RDS 实例-name:acs_rds_dashboardnamespace:acs_rds_dashboardperiod:60smeasures:-CpuUsage-MemoryUsage-ConnectionUsage-DiskUsage-IOPSUsage# SLB 负载均衡-name:acs_slb_dashboardnamespace:acs_slb_dashboardperiod:60smeasures:-ActiveConnection-MaxConnection-PacketRX-PacketTX-TrafficRXNew-TrafficTXNew# Redis (Kvstore)-name:acs_kvstorenamespace:acs_kvstoreperiod:60smeasures:-CpuUsage-MemoryUsage-ConnectionUsage-IntranetIn-IntranetOut# CDN-name:acs_cdnnamespace:acs_cdnperiod:300smeasures:-QPS-BPS-hit_rate2.4 配置 Prometheus 抓取
scrape_configs:-job_name:'aliyun'scrape_interval:60sstatic_configs:-targets:['aliyun-exporter:9525']labels:cloud:'aliyun'account:'prod'3. 腾讯云监控:tencentcloud-exporter 全流程
3.1 配置 CAM 权限
在腾讯云 CAM 控制台创建子账号,生成 SecretId 和 SecretKey。为其关联预设策略QcloudMonitorReadOnlyAccess即可读取所有监控数据。
3.2 部署 tencentcloud-exporter
Docker 部署:
dockerrun-d\--nametencentcloud-exporter\-p9526:9526\-eTENCENTCLOUD_SECRET_ID=your_secret_id\-eTENCENTCLOUD_SECRET_KEY=your_secret_key\-eTENCENTCLOUD_REGION=ap-guangzhou\-v/path/to/tencentcloud-exporter.yml:/etc/tencentcloud-exporter/tencentcloud-exporter.yml\tencentcloud/tencentcloud-exporter:latestExporter 默认监听9526端口。
3.3 编写采集配置文件 (tencentcloud-exporter.yml)
# tencentcloud-exporter.ymlcredential:secret_id:${TENCENTCLOUD_SECRET_ID}secret_key:${TENCENTCLOUD_SECRET_KEY}metrics:# 云服务器 CVM-tc_namespace:QCE/CVMtc_metric_name:CpuUsagetc_statistics:-Averageperiod:60range:300delay:120dimensions:-InstanceId-tc_namespace:QCE/CVMtc_metric_name:MemUsagetc_statistics:-Averageperiod:60range:300delay:120-tc_namespace:QCE/CVMtc_metric_name:WanIntraffictc_statistics:-Sumperiod:60-tc_namespace:QCE/CVMtc_metric_name:WanOuttraffictc_statistics:-Sumperiod:60# 云数据库 TencentDB for MySQL-tc_namespace:QCE/CDBtc_metric_name:CpuUseRatetc_statistics:-Averageperiod:60-tc_namespace:QCE/CDBtc_metric_name:MemoryUseRatetc_statistics:-Averageperiod:60-tc_namespace:QCE/CDBtc_metric_name:ConnectionUseRatetc_statistics:-Averageperiod:60-tc_namespace:QCE/CDBtc_metric_name:VolumeRatetc_statistics:-Averageperiod:60# 云数据库 Redis (TencentDB for Redis)-tc_namespace:QCE/REDIStc_metric_name:CpuUsMintc_statistics:-Averageperiod:60-tc_namespace:QCE/REDIStc_metric_name:MemUsedtc_statistics:-Averageperiod:60-tc_namespace:QCE/REDIStc_metric_name:Connectionstc_statistics:-Averageperiod:60# 负载均衡 CLB-tc_namespace:QCE/LBtc_metric_name:ConNumtc_statistics:-Averageperiod:60-tc_namespace:QCE/LBtc_metric_name:InPkgtc_statistics:-Sumperiod:60-tc_namespace:QCE/LBtc_metric_name:OutPkgtc_statistics:-Sumperiod:60# CDN-tc_namespace:QCE/CDNtc_metric_name:Cdn_bandwidthtc_statistics:-Sumperiod:300-tc_namespace:QCE/CDNtc_metric_name:Cdn_requeststc_statistics:-Sumperiod:3003.4 配置 Prometheus 抓取
scrape_configs:-job_name:'tencentcloud'scrape_interval:60sstatic_configs:-targets:['tencentcloud-exporter:9526']labels:cloud:'tencent'account:'prod'4. 核心监控指标与 PromQL
阿里云指标示例
| 产品 | Prometheus 指标名 | 含义 |
|---|---|---|
| ECS | aliyun_acs_ecs_dashboard_CPUUtilization_avg{instanceId="i-xxx"} | CPU 使用率 (%) |
| ECS | aliyun_acs_ecs_dashboard_memory_usedutilization_avg | 内存使用率 (%) |
| RDS | aliyun_acs_rds_dashboard_CpuUsage_avg | CPU 使用率 |
| SLB | aliyun_acs_slb_dashboard_ActiveConnection_avg | 活跃连接数 |
| Redis | aliyun_acs_kvstore_MemoryUsage_avg | 内存使用率 |
PromQL 示例:
- ECS CPU > 85%:
aliyun_acs_ecs_dashboard_CPUUtilization_avg > 85 - RDS 连接使用率 > 80%:
aliyun_acs_rds_dashboard_ConnectionUsage_avg > 80 - SLB 入带宽 (Mbps):
rate(aliyun_acs_slb_dashboard_TrafficRXNew_sum[5m]) * 8 / 1024 / 1024
腾讯云指标示例
| 产品 | Prometheus 指标名 | 含义 |
|---|---|---|
| CVM | qce_cvm_CpuUsage_avg{instance_id="ins-xxx"} | CPU 使用率 |
| CVM | qce_cvm_MemUsage_avg | 内存使用率 |
| TencentDB MySQL | qce_cdb_CpuUseRate_avg | CPU 使用率 |
| TencentDB MySQL | qce_cdb_VolumeRate_avg | 磁盘使用率 |
| CLB | qce_lb_ConNum_avg | 并发连接数 |
| Redis | qce_redis_MemUsed_avg | 内存使用量 |
PromQL 示例:
- CVM CPU > 80%:
qce_cvm_CpuUsage_avg > 80 - CDB 磁盘使用率 > 85%:
qce_cdb_VolumeRate_avg > 85 - CLB 入包速率 (pps):
rate(qce_lb_InPkg_sum[5m])
5. Grafana 仪表盘推荐
- 阿里云资源总览:Dashboard ID13905(社区贡献,涵盖 ECS、RDS、SLB、Redis)
- 腾讯云 CVM 监控:ID14431(CVM 专用)
- 腾讯云 CDB 监控:ID14567
- 混合云综览大屏:自建面板,使用变量
cloud、region、instance切换,将阿里云和腾讯云核心资源放在同一行,展示 CPU Top10、带宽趋势、错误率等。
导入后选择数据源,分别关联aliyun和tencentcloudjob。
6. 告警规则实战
阿里云告警
groups:-name:aliyun_alertsrules:-alert:AliyunEcsHighCPUexpr:aliyun_acs_ecs_dashboard_CPUUtilization_avg>85for:10mlabels:severity:warningannotations:summary:"阿里云 ECS {{ $labels.instanceId }} CPU 使用率超过 85%"-alert:AliyunRdsHighDiskUsageexpr:aliyun_acs_rds_dashboard_DiskUsage_avg>85for:10mlabels:severity:criticalannotations:summary:"阿里云 RDS {{ $labels.instanceId }} 磁盘使用率超过 85%"-alert:AliyunRedisHighMemoryexpr:aliyun_acs_kvstore_MemoryUsage_avg>80for:5mlabels:severity:warningannotations:summary:"阿里云 Redis {{ $labels.instanceId }} 内存使用率超过 80%"腾讯云告警
groups:-name:tencentcloud_alertsrules:-alert:TencentCvmHighCPUexpr:qce_cvm_CpuUsage_avg>80for:10mlabels:severity:warningannotations:summary:"腾讯云 CVM {{ $labels.instance_id }} CPU 使用率超过 80%"-alert:TencentCdbDiskFullexpr:qce_cdb_VolumeRate_avg>85for:10mlabels:severity:criticalannotations:summary:"腾讯云 CDB {{ $labels.instance_id }} 磁盘使用率超过 85%"-alert:TencentClbConnsHighexpr:qce_lb_ConNum_avg>10000for:5mlabels:severity:warningannotations:summary:"腾讯云 CLB {{ $labels.instance_id }} 并发连接数超过 10000"7. 进阶:多账户、成本控制与混合云统一
7.1 多账户/多区域监控
为每个云账户、每个区域部署独立的 Exporter 实例(容器),在 Prometheus 中通过account、region标签区分。使用 Ansible 或 Helm 批量管理。
7.2 降低 API 调用成本
云监控 API 通常按请求次数或时间序列数计费。优化建议:
- 适当增加
period(如 120s 或 300s),减少拉取频率。 - 使用资源组或标签过滤,避免拉取全部实例。
- 对于非实时告警指标(如 CDN 带宽),可进一步放宽间隔。
7.3 标签注入与 CMDB 关联
Exporter 支持通过配置将云资源的标签(如业务部门、项目)转化为 Prometheus 标签。在 Grafana 中即可按业务维度聚合告警。
7.4 与 Node Exporter / cAdvisor 互补
云监控提供的是虚拟化层面的“主机级”指标,而 Node Exporter 给出 OS 内部视角。两者结合可校验“云平台 CPU 使用率 70%,但操作系统空闲 90%”等异常,快速定位是云平台底层抖动还是自身业务导致。
8. 总结
通过 aliyun-exporter 和 tencentcloud-exporter,阿里云与腾讯云的资源监控数据真正融入了 Prometheus 开放生态。无论是 ECS 的 CPU 负载、RDS 的连接余量,还是 CDN 的带宽峰值,现在都能在同一套 Grafana 面板和 Alertmanager 告警中洞察。混合云不再是监控的鸿沟,而是可观测性拼图中浑然一体的一部分。部署这套方案,让每一朵云都透明如私有机房,让云上运维拥有前所未有的全局掌控力。