Python 2.7 python boto脚本中显示空响应的EC2实例的DiskSpaceUtilization度量

Python 2.7 python boto脚本中显示空响应的EC2实例的DiskSpaceUtilization度量,python-2.7,amazon-web-services,amazon-ec2,boto3,amazon-cloudwatch,Python 2.7,Amazon Web Services,Amazon Ec2,Boto3,Amazon Cloudwatch,我想获取DiskSpaceUtilization metrics的数据点,但get\u metrics\u Statistics的响应为空 get_metrics_Statistics函数可完美地用于其他度量,即CPUUutilization、MemoryUtilization。但同样的代码不适用于DiskSpaceUtilization 我尝试了以下代码: import sys from datetime import datetime as dt, timedelta import boto

我想获取DiskSpaceUtilization metrics的数据点,但get\u metrics\u Statistics的响应为空

get_metrics_Statistics函数可完美地用于其他度量,即CPUUutilization、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

提前感谢。

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

报告中也有类似的问题。如果您不想硬编码这两个维度,请检查注释:

避免使用特定于实例的文件系统维度的一种方法是 修改mon-put-instance-data.pl脚本,只需注释掉 添加文件系统和装入路径维度的部分,只留下 报告的磁盘度量的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

参考资料:

我修改了get\u metric\u statistics函数,它工作得非常好。对于磁盘空间利用率,我们需要添加额外的二维空间,即文件系统和挂载路径

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')

我不想在python中使用boto3来读取磁盘空间利用率数据点,但我不知道instance有多少文件系统,所以我如何获取文件系统,以便修改get_metrics_Statistics函数来读取磁盘空间数据点。任何想法有两种方法:(1)从mon-put-instance-data.pl注释掉文件系统和挂载路径,正如我在帖子里说的。(2) 从当前实例获取所有安装点。这篇文章讲述了几种实现方法(例如findmnt或/proc/mounts):您分享的文章展示了如何在linux中安装文件系统,但我的问题是如何在python中使用boto安装文件系统。boto API似乎没有提供这些信息。。。我查看了一些StackOverflow线程(和)。但这是一个可以在Python中执行的简单命令。我将用代码更新线程。我在一台EC2服务器上运行此命令,并读取生产中所有其他EC2服务器的clouwatch数据,因此应该在每个实例上运行命令“mount-l”,以便通过实例id在其上装载文件系统。是否有办法通过实例id在远程服务器上运行该命令。