Python 最近2周EBS容量的最大IOPS
我想检索EBS卷在过去两周内使用的最大IOPS。我正在使用cloudwatch get_metric_data函数来获取有关度量卷应用程序和卷写入程序的数据。我正在使用以下代码获取VolumeReadOps和VolumeWriteOps,然后尝试计算MaxIOPS: 这是获取度量值的函数:Python 最近2周EBS容量的最大IOPS,python,amazon-web-services,boto3,Python,Amazon Web Services,Boto3,我想检索EBS卷在过去两周内使用的最大IOPS。我正在使用cloudwatch get_metric_data函数来获取有关度量卷应用程序和卷写入程序的数据。我正在使用以下代码获取VolumeReadOps和VolumeWriteOps,然后尝试计算MaxIOPS: 这是获取度量值的函数: def cloudwatch_metric_值(CWsession、命名空间、ResourceIdentifier、vStat、vUnit、vMetricName、vPeriod): """ 函数,该函数返回
def cloudwatch_metric_值(CWsession、命名空间、ResourceIdentifier、vStat、vUnit、vMetricName、vPeriod):
"""
函数,该函数返回给定资源的cloudwatch度量值和度量名称
"""
如果名称空间==“EBS”:
responseCW=CWsession.get\u metric\u数据(
MetricDataQueries=[
{
'Id':'string',
“MetricStat”:{
“公制”:{
“名称空间”:“AWS/EBS”,
“MetricName”:vMetricName,
“维度”:[
{
“名称”:“卷ID”,
“值”:ResourceIdentifier
},
]
},
“期间”:vPeriod,
“Stat”:vStat,
“单位”:vUnit
},
“ReturnData”:True
},
],
StartTime=vStartTime,
EndTime=vEndTime,
)
vValue=responseCW['MetricDataResults'][0]['Values']
vTimeStamps=responseCW['MetricDataResults'][0]['Timestamps']
索引,value=max(枚举(vValue),key=operator.itemgetter(1))
度量值=值
公制时间=vTimeStamps[索引]
返回度量值时间,度量值
在main中,它的名称如下所示:
metric\u time,metric\u value=cloudwatch\u metric\u value(cloudwatch,'EBS',v['VolumeId','Sum','Count','volumeradops',300)
vReadIOPS=度量值
度量单位时间,度量单位值=cloudwatch度量单位值(cloudwatch,'EBS',v['VolumeId','Sum','Count','VolumeWriteOps',300)
vWriteIOPS=度量值
vTotalIOPS=圆形((vReadIOPS+vWriteIOPS)/300)
我知道IOPS是通过将读操作/写操作与持续时间分开来计算的。我从给定卷的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
您的代码似乎正在请求度量的
和
。最好使用Max
。