You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何单次调用API批量获取多台EC2的CloudWatch监控指标

报错原因

GetMetricData接口强制要求MetricDataQueries参数内的所有查询条目Id值全局唯一,你给两台EC2的CPU利用率查询配置了完全相同的Id: 'cpuUtilization',因此触发参数校验错误。

单次调用获取多EC2指标的实现方法

不需要拆分多次调用,只要给每个实例对应的查询配置分配唯一的Id,即可在单次API请求中拉取任意数量(不超过接口配额)的EC2实例监控指标,返回结果会按Id维度拆分,直接对应到不同实例。

建议直接将实例ID拼接进查询Id中,后续解析结果时不需要额外维护映射关系,就能直接把数据和EC2实例对应上。

可运行代码示例
import boto3
from datetime import datetime
from dateutil.tz import tzutc

session = boto3.Session(profile_name="XXXXXXXXXX")
client = session.client('cloudwatch', 'ap-northeast-2')

# 替换为你需要查询的EC2实例ID列表
target_instances = ["i-0abc123def456", "i-0def789ghi012", "i-0jkl345mno678"]
query_list = []

for ins_id in target_instances:
    # 生成唯一查询ID,拼接实例ID方便后续匹配结果
    # 注意:Id字段仅支持字母、数字、下划线,首字符必须为字母
    query_id = f"cpu_avg_{ins_id.replace('-', '_')}"
    query_list.append({
        'Id': query_id,
        'MetricStat': {
            'Metric': {
                'Namespace': 'AWS/EC2',
                'MetricName': 'CPUUtilization',
                'Dimensions': [
                    {'Name': 'InstanceId', 'Value': ins_id}
                ]
            },
            'Period': 60,
            'Stat': 'Average'
        }
    })

resp = client.get_metric_data(
    MetricDataQueries=query_list,
    StartTime=datetime(2022, 7, 7, 0, 0, 0, tzinfo=tzutc()),
    EndTime=datetime(2022, 7, 7, 23, 59, 59, tzinfo=tzutc())
)

# 按实例维度解析结果
for metric_result in resp['MetricDataResults']:
    # 从查询ID中还原实例ID
    current_ins = metric_result['Id'].split("_")[-1].replace('_', '-')
    print(f"===== 实例 {current_ins} 平均CPU利用率数据 =====")
    print(metric_result['Values'])
相关注意事项
  • 单次GetMetricData请求最多支持传入500个查询条目,只要不超过该配额,不管是跨多实例、跨多指标的查询都可以在单次请求中完成
  • 如果需要同时查询网络、磁盘等其他指标,只需要在循环中追加对应指标的查询配置,同样保证每个查询的Id唯一即可
  • 如果返回结果中存在NextToken字段,说明结果被分页截断,将该字段作为参数传入下一次get_metric_data调用即可拉取剩余数据,不需要拆分实例单独请求
  • 不要在Id字段中使用横杠、空格、特殊符号,否则会触发参数格式错误

内容的提问来源于stack exchange,提问作者JT Kon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 03:27:32