EC2/RDS/EKS资源使用指标获取及每日S3存储技术咨询
问题解答
一、EC2指标数据获取方案
针对你需要的三类指标,具体获取方式如下:
- 总CPU与已用CPU
- 总CPU:通过EC2的
DescribeInstancesAPI(或boto3的ec2.describe_instances())获取实例的InstanceType,匹配对应实例规格的vCPU数量;也可直接从实例属性的VCpuInfo.DefaultVCpus字段读取。 - 已用CPU:CloudWatch默认提供
CPUUtilization指标(百分比),若需绝对核心数,用总CPU数 × CPUUtilization%计算即可。
- 总CPU:通过EC2的
- 总内存与已用内存
- 总内存:通过
DescribeInstancesAPI获取实例类型对应的内存大小,或从MemoryInfo.SizeInMiB字段读取。 - 已用内存:CloudWatch默认不采集内存数据,需在EC2实例上安装CloudWatch Agent,配置
memory指标集后,即可在CloudWatch中获取MemoryUtilization(百分比)或MemoryUsed(绝对数值)指标。
- 总内存:通过
- 总EBS卷容量与已用EBS容量
- 总EBS容量:通过EC2的
DescribeVolumesAPI(或boto3的ec2.describe_volumes())获取卷的Size字段(单位:GB)。 - 已用EBS容量:需通过CloudWatch Agent采集实例挂载磁盘的文件系统使用数据,配置
disk指标集后,可获取disk_used(绝对数值)或disk_used_percent(百分比)指标。
- 总EBS容量:通过EC2的
二、指标数据每日同步至S3的实现方式
推荐三种可行方案:
- 方案1:CloudWatch Metric Streams
- 在CloudWatch中创建指标流,选择需要同步的EC2、内存、磁盘指标,配置目标S3存储桶,设置按日分区,系统会自动将指标数据以Parquet/JSON格式每日同步到S3,无需编写代码。
- 方案2:Lambda+EventBridge定时触发
- 创建EventBridge规则,设置每日固定时间触发Lambda函数。
- 在Lambda函数中用boto3调用:
cloudwatch.get_metric_data()获取已用CPU、内存、磁盘的时序数据;ec2.describe_instances()/ec2.describe_volumes()获取总CPU、总内存、总EBS容量;- 整理数据为JSON/CSV格式,通过
boto3.client('s3').put_object()上传到S3指定路径(如s3://your-bucket/ec2-metrics/YYYY-MM-DD/data.json)。
- 方案3:AWS Glue调度ETL
- 创建Glue爬虫,抓取CloudWatch指标和EC2实例属性数据;
- 编写Glue ETL脚本,将指标数据关联总容量计算后,写入S3的分区存储路径;
- 设置Glue作业每日调度,自动完成同步。
三、RDS与EKS的类似指标支持
- AWS RDS
- 总CPU/内存/存储:通过
DescribeDBInstancesAPI获取实例规格对应的vCPU数、内存大小、已分配存储(AllocatedStorage); - 已用CPU/内存/存储:CloudWatch默认提供
CPUUtilization、FreeableMemory(已用内存=总内存-空闲内存)、FreeStorageSpace(已用存储=总存储-空闲存储)指标,无需额外安装代理。
- 总CPU/内存/存储:通过
- AWS EKS
- 节点层面:和EC2实例逻辑一致,通过CloudWatch Agent采集节点的CPU、内存、磁盘使用指标,总容量通过EC2
DescribeInstances获取节点规格数据; - Pod层面:启用CloudWatch Container Insights后,可获取Pod级别的
pod_cpu_utilization、pod_memory_utilization等指标,总资源可从Kubernetes API获取节点的可分配资源。
- 节点层面:和EC2实例逻辑一致,通过CloudWatch Agent采集节点的CPU、内存、磁盘使用指标,总容量通过EC2
内容的提问来源于stack exchange,提问作者Santosh Kumar Sahoo
相关产品推荐
相关产品推荐

