最近2周EBS卷的最大IOPS

2024-09-29 21:54:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我要检索过去2周内EBS卷使用的最大IOPS。我正在使用cloudwatch get\u metric\u data函数获取有关metric VolumeReadOps和VolumeWriteOps的数据。我使用以下代码获取VolumeReadOps和VolumeWriteOps,然后尝试计算最大IOPS:

此函数用于获取度量值:

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中插入duration来计算的。我从给定卷的MaxIOPS代码中得到的值与我在cloudwatch控制台中看到的值不匹配。请告知我这样做是否正确

谢谢


Tags: 函数代码datagettimevaluemetriccloudwatch
1条回答
网友
1楼 · 发布于 2024-09-29 21:54:12

好的,我可以修复,下面是工作函数:

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

相关问题 更多 >

    热门问题