首页 > 解决方案 > python boto脚本中EC2实例的DiskSpaceUtilization指标显示空响应

问题描述

我想获取 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

提前致谢。

标签: python-2.7amazon-web-servicesamazon-ec2boto3amazon-cloudwatch

解决方案


那是因为除了 InstanceId 之外,您还需要指定两个额外的维度:FilesystemMountPath

AWS 开发人员论坛中报告了一个类似的问题。如果您不想硬编码这两个维度,请检查注释:

避免使用特定于实例的文件系统维度的一种方法是修改 mon-put-instance-data.pl 脚本并仅注释掉添加 Filesystem 和 MountPath 维度的部分,只为报告的磁盘指标留下 InstanceId 维度。进行这些修改时,请尝试使用 --verify --verbose 选项从命令行运行 mon-put-instance-data.pl 脚本,以查看哪些数据将实际发送到 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


推荐阅读