python - 过去 2 周 EBS 卷的最大 IOPS
问题描述
我想检索 EBS 卷在过去 2 周内使用的最大 IOPS。我正在使用 cloudwatch get_metric_data 函数来获取有关度量 VolumeReadOps 和 VolumeWriteOps 的数据。我正在使用以下代码获取 VolumeReadOps 和 VolumeWriteOps,然后尝试计算 MaxIOPS:
这是获取度量值的函数:
def cloudwatch_metric_value(CWsession,NameSpace,ResourceIdentifier,vStat,vUnit,vMetricName,vPeriod):
"""
Function that returns metric value of cloudwatch for a given resource and metric Name
"""
if NameSpace=='EBS':
responseCW = CWsession.get_metric_data(
MetricDataQueries=[
{
'Id': 'string',
'MetricStat': {
'Metric': {
'Namespace': 'AWS/EBS',
'MetricName': vMetricName,
'Dimensions': [
{
'Name': 'VolumeId',
'Value': ResourceIdentifier
},
]
},
'Period': vPeriod,
'Stat': vStat,
'Unit': vUnit
},
'ReturnData': True
},
],
StartTime=vStartTime,
EndTime=vEndTime,
)
vValue=responseCW['MetricDataResults'][0]['Values']
vTimeStamps=responseCW['MetricDataResults'][0]['Timestamps']
index, value = max(enumerate(vValue), key=operator.itemgetter(1))
metric_value=value
metric_time=vTimeStamps[index]
return metric_time,metric_value
从 main 中,它被称为如下:
metric_time,metric_value = cloudwatch_metric_value(cloudwatch,'EBS',v['VolumeId'],'Sum','Count','VolumeReadOps',300)
vReadIOPS=metric_value
metric_time,metric_value = cloudwatch_metric_value(cloudwatch,'EBS',v['VolumeId'],'Sum','Count','VolumeWriteOps',300)
vWriteIOPS=metric_value
vTotalIOPS=round((vReadIOPS+vWriteIOPS)/300)
我了解 IOPS 是通过将 ReadOps/Write 与持续时间进行潜水来计算的。我从这段代码中为给定卷获得的 MaxIOPS 值与我在 cloudwatch 控制台中看到的值不匹配。请告知我是否以正确的方式这样做?
谢谢。
解决方案
好的,我能够修复,这是工作功能:
def cloudwatch_metric_value(CWsession,NameSpace,ResourceIdentifier,vStat,vUnit,vPeriod):
"""
Function that returns metric value of cloudwatch for a given resource and metric Name
"""
if NameSpace=='EBS':
responseCW = CWsession.get_metric_data(
MetricDataQueries=[
{
'Id': 'string1',
'MetricStat': {
'Metric': {
'Namespace': 'AWS/EBS',
'MetricName': 'VolumeReadOps',
'Dimensions': [
{
'Name': 'VolumeId',
'Value': ResourceIdentifier
},
]
},
'Period': vPeriod,
'Stat': vStat,
'Unit': vUnit
},
'ReturnData': True
},
{
'Id': 'string2',
'MetricStat': {
'Metric': {
'Namespace': 'AWS/EBS',
'MetricName': 'VolumeWriteOps',
'Dimensions': [
{
'Name': 'VolumeId',
'Value': ResourceIdentifier
},
]
},
'Period': vPeriod,
'Stat': vStat,
'Unit': vUnit
},
'ReturnData': True
},
],
StartTime=vStartTime,
EndTime=vEndTime,
)
vReadValue=responseCW['MetricDataResults'][0]['Values']
vReadTimeStamps=responseCW['MetricDataResults'][0]['Timestamps']
vWriteValue=responseCW['MetricDataResults'][1]['Values']
vWriteTimeStamps=responseCW['MetricDataResults'][1]['Timestamps']
vReadWriteValue = [vReadValue[i]+vWriteValue[i] for i in range(len(vWriteValue))]
if vReadWriteValue:
metric_value = max(vReadWriteValue)
metric_time = vReadTimeStamps[vReadWriteValue.index(metric_value)]
metric_value = metric_value / 300
else:
metric_value=1
metric_time=date_t
return metric_time,metric_value
推荐阅读
- php - PHP - 创建多维数组的最佳实践
- oracle - Aspen SQLPlus:按名称分隔列
- git - git 2.32 git push -u origin master 没有任何反应
- c++ - Gradescope 显示我的代码不正确,问题和代码如下
- b-tree - 为什么一个磁盘块不能存储多个索引树节点
- reactjs - 未处理的拒绝(TypeError):state.push 在使用 redux thunk 时不是函数
- ios - 在主线程中推送视图控制器,`animated: false` 的行为与 `animated: true` 相同。在 viewDidLoad 中工作正常
- c# - FirebaseAuth -SmsRetrieverHelper -SMS 验证码请求失败:未知状态码:17042 格式无效
- css - 使用情感/样式组件的打字稿问题
- listview - 将数据发送到下一个活动