Я хочу получить максимальное количество операций ввода-вывода в секунду, использованное объемом EBS за последние 2 недели. Я использую функцию get_metric_data cloudwatch для получения данных о метрике 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. Посоветуйте, пожалуйста, правильно ли я это делаю?
Спасибо.