簡體   English   中英

過去 2 周 EBS 卷的最大 IOPS

[英]Max IOPS of EBS Volume from Last 2 Weeks

我想檢索 EBS 卷在過去 2 周內使用的最大 IOPS。 我正在使用 cloudwatch get_metric_data function 來獲取有關度量 VolumeReadOps 和 VolumeWriteOps 的數據。 我正在使用以下代碼獲取 VolumeReadOps 和 VolumeWriteOps,然后嘗試計算 MaxIOPS:

這是獲取度量值的 function:

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 控制台中看到的值不匹配。 請告知我是否以正確的方式這樣做?

謝謝。

好的,我能夠修復,這是工作 function:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM