python boto脚本中EC2实例的DiskSpaceUtilization指标显示空响应

时间:2018-08-22 07:26:44

标签: python-2.7 amazon-web-services amazon-ec2 boto3 amazon-cloudwatch

我想获取DiskSpaceUtilization指标的数据点,但是get_metrics_statitics的响应为空。

get_metrics_statitics函数可完美地用于其他指标,例如CPUUtilization,MemoryUtilization。但是相同的代码不适用于DiskSpaceUtilization。

我尝试了以下代码:

import sys
from datetime import datetime as dt, timedelta
import boto3

metricdictionary = {}
metricdictionary['DiskSpaceUtilization'] = 'System/Linux,Percent'

ec2_resource = boto3.resource("ec2")
cloudwatch = boto3.client("cloudwatch")

date = dt.today() - timedelta(days=1)
year = date.year
month = date.month
day = date.day

response = cloudwatch.get_metric_statistics(Namespace='System/Linux', 
                            MetricName='DiskSpaceUtilization', 
                            Dimensions=[{'Name': 'InstanceId', 
                            'Value': 'i-0a22a230c4dae4195', }],                                
                            StartTime=dt(year, month, day, 00, 00, 00),
                            EndTime=dt(year, month, day, 23, 59, 59),
                            Period=3600, 
                            Statistics=['Average', 'Minimum', 'Maximum'],
                            Unit='Percent')

print response

谢谢。

2 个答案:

答案 0 :(得分:1)

这是因为除了InstanceId之外,您还需要指定两个额外的维度:文件系统 MountPath

AWS Developer Forums中报告了类似的问题。如果您不想对这两个维度进行硬编码,请检查注释:

  

避免使用特定于实例的文件系统尺寸的一种方法是   修改mon-put-instance-data.pl脚本,然后注释掉   添加文件系统和MountPath尺寸的部分,仅保留   报告的磁盘指标的InstanceId维度。当做这些   修改后,请尝试从运行mon-put-instance-data.pl脚本   带有--verify --verbose选项的命令行以查看将要存储的数据   实际上已发送到Amazon CloudWatch服务。

编辑:如果要使用Python获取这两个维度,可以执行以下操作:

#!/usr/bin/env python

import subprocess

mounts = {}

for line in subprocess.check_output(['mount', '-l']).split('\n'):
    parts = line.split(' ')
    if len(parts) > 2:
        mounts[parts[2]] = parts[0]

print mounts

参考:https://askubuntu.com/questions/189987/get-device-with-mount-point

答案 1 :(得分:0)

我修改了get_metric_statistics函数,使其运行完美。为了利用磁盘空间,我们需要添加额外的二维空间,即FileSystem和Mountpath。

response = cloudwatch.get_metric_statistics(Namespace=namesp, MetricName='DiskSpaceUtilization',
                                                            Dimensions=[
                                                                {'Name': 'InstanceId', 'Value': instance['InstanceId'], },
                                                                {'Name': 'Filesystem', 'Value': name_of_file_system},
                                                                {'Name': 'MountPath', 'Value': MountPath_for_filesystem}
                                                            ],
                                                            StartTime=dt(year, month, day, 00, 00, 00),
                                                            EndTime=dt(year, month, day, 23, 59, 59),
                                                            Period=3600, Statistics=['Average', 'Minimum', 'Maximum'],
                                                            Unit='Percent')