python-2.7 - 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
提前致谢。
解决方案
那是因为除了 InstanceId 之外,您还需要指定两个额外的维度:Filesystem和MountPath。
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
推荐阅读
- haskell - Haskell - 这个平均函数是如何工作的?
- javascript - 从云功能更新 Firestore 文档
- html - 使用 mix-blend-mode 设置的元素会破坏具有 mix-blend-mode 属性的其他元素(Chrome)
- rust - 从迭代器返回的对象中的可变引用
- bash - Infile 更改项目的填充
- mysql - Sequelize top 5 关系多对多
- arrays - 我做了一个函数来将用户对象转换为用户数组并根据他们的分数对用户进行排序,算法中是否有问题
- node.js - 有没有办法可以使用 module.exports 文件中索引中的变量?
- python - 命令出错,退出状态 1 在 mac 上的 python3.8 中安装 nltk
- ruby-on-rails - Railties 在 Heroku 上崩溃,在本地运行良好