如何使用 CloudWatch 获取可用磁盘空间量?

如何使用 CloudWatch 获取可用磁盘空间量?

是否可以使用 CloudWatch 获取可用磁盘空间 (df) 量?如果可以,哪个指标代表可用磁盘空间?

答案1

更新

与此同时,AWS 也提供了自己的用于监控运行 Linux 的 Amazon EC2 实例上的内存和磁盘空间使用情况的示例脚本至少,看看新的 Amazon CloudWatch 监控脚本

您可以在实例上运行这些脚本,并配置它们以向 Amazon CloudWatch 报告内存和磁盘空间使用情况指标。将指标提交到 CloudWatch 后,您可以在 CloudWatch 控制台或通过CloudWatch API

[...]

要了解如何使用脚本,包括安装、设置和配置,请访问“适用于 Linux 的 Amazon CloudWatch 监控脚本“在 Amazon CloudWatch 开发人员指南中。

但请注意,许多流行的第三方监控解决方案已经提供了用于监控内存和磁盘空间使用情况的相应示例或完整解决方案,因此通常不需要重新发明轮子。不过,AWS 提供的脚本也相当不错且广泛,也就是说,它们比大多数自定义一次性脚本更全面地涵盖了用例。


初步答案

不,目前还不可能。请参阅 AWS 员工对相关问题的回答cloudwatch 内存使用情况,这也解释了这种情况的原因:

[...] 目前,您无需在 AMI 中部署任何东西来监控您的实例。内存利用率和磁盘空间等指标要求我们查看实例中运行的操作系统,这就是我们没有这些宝贵指标的原因。

我们正在寻找方法为您提供有关您的操作系统和应用程序的更多见解,并将在确定计划时提供更多详细信息。

不过,我怀疑此功能是否会很快出现,因为所需的跨平台代理功能已从其他几个提供专用监控解决方案的供应商处轻松获得,而且这项任务非常简单 - 当然,如果能直接在 AWS 中内置对此功能的支持,那绝对是一个巨大的胜利。

答案2

这是同一脚本的更好版本,它可以检索连接到实例的卷并报告每个卷的使用情况。

注意用 /dev/xvd 替换 /dev/sd

还请注意,您需要安装 ec2-api 工具和 cloudwatch 工具以及证书才能使它们正常工作

#!/bin/bash

export JAVA_HOME=
export AWS_CREDENTIAL_FILE=
export EC2_CERT=
export EC2_PRIVATE_KEY=
export EC2_HOME=
export AWS_CLOUDWATCH_HOME=

INSTANCE_ID=$(wget -q -O - http://169.254.169.254/latest/meta-data/instance-id)
VOLUME_LIST=$($EC2_HOME/bin/ec2-describe-volumes | grep ${INSTANCE_ID} | awk '{ print $2 ";" $4}')

for VOLUME_LINE in $(echo $VOLUME_LIST); do
        VOLUME_NAME=${VOLUME_LINE%;*}
        DEVICE_NAME=/dev/xvd${VOLUME_LINE#*;/dev/sd}
        USAGE=$(df $DEVICE_NAME | perl -ne 'print "$1" if /(\d+)\%/')
        $AWS_CLOUDWATCH_HOME/bin/mon-put-data -v $USAGE -d "Volume=$VOLUME_NAME" -m UsedStoragePercentage -u Percent -n "NAMESPACE" --show-request
done

答案3

我编写了一个 Bash 脚本来使用自定义 CloudWatch 指标执行此操作

http://aws.typepad.com/aws/2011/05/amazon-cloudwatch-user-defined-metrics.html

用您自己的值替换 XXXX

#!/bin/sh

export JAVA_HOME=/usr/lib/jvm/java-6-sun
export AWS_CREDENTIAL_FILE=XXXX 
export AWS_CLOUDWATCH_HOME=XXXX

INSTANCE_ID=$(wget -q -O - http://169.254.169.254/latest/meta-data/instance-id)

$AWS_CLOUDWATCH_HOME/bin/mon-put-data -v $(df / | perl -ne 'print "$1" if /(\d+)\%/') -d "InstanceId=$INSTANCE_ID,Volume=root" -u Percent -m UsedStoragePercentage -n "XXXX" --show-request

将其放入 cron 作业中,您将获得一个可以设置警报的指标。我决定使用百分比和特定于实例的挂载点,而不是监控卷本身,因为它适合我的需求。我倾向于调整卷大小和切换卷,而不是重新启动实例。您的里程可能会有所不同。

答案4

在提出问题后的某个时候,AWS 提供了带有报告磁盘使用情况选项的脚本。

您可以在 crontab 中运行此脚本,向 CloudWatch 报告可用磁盘空间。不要忘记包含磁盘路径。

*/5 * * * * ~/aws-scripts-mon/mon-put-instance-data.pl --disk-space-util --disk-path=/ --from-cron

文档给出了完整选项列表及示例请点击此处

相关内容