Answers:
截至2012年3月,Amazon为此提供了脚本:
适用于Linux的Amazon CloudWatch监视脚本:http : //aws.amazon.com/code/8720044071969977
EC2控制和监视工具无法向您提供此数据,因为实例的文件系统只能由实例本身访问。硬件的基本体系结构和安全模型都需要此限制。想一想,如果计算机外部的软件可以猛击硬盘驱动器上的文件,将会有多严重!
这是使cron(无论如何安装在大多数系统上)定期检查此数据的一种低调方法。您的系统应具有最低要求,无论如何都应处理根邮件通知。我建议至少拥有一个实质性的外发邮件代理,并配置根或管理员别名以在您管理的所有系统上转发给您。许多程序都包括cron
这种配置。
您可以将其添加到您的crontab中:
0 0 * * * test $(df / | grep ^/ | awk '{print $4}') -lt 1048576 && echo "Warning: Free disk space is less than 1G on /"
要分解,这
test
命令使用-lt
小于运算符和等于1Gb可用空间的固定值来设置简单的Shell比较。df
命令测试/
文件系统上的可用空间grep
让你输出的只是线,你需要的不是头df
包括。awk
GET只是在输出第四列,自由空间数。&&
说只运行,如果第一个(对下一个命令test x -lt y
)返回true。我需要检查EC2组中的多台服务器时编写了一个脚本。它需要一个文件,其中在一行上包含每个服务器IP /域名的列表。
#! /bin/bash
ADMIN="serveralerts@youraddress.com"
ALERT=85
for SERVER in `cat ~/scripts/servers.txt` do
ssh -i ~/.ssh/yourkey.pem $SERVER df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
do
echo $output
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
partition=$(echo $output | awk '{ print $2 }' )
if [ $usep -ge $ALERT ]; then
echo "Running out of space \"$partition ($usep%)\" on $SERVER as on $(date)" |
mail -s "Alert: Almost out of disk space $usep" $ADMIN
fi
done done
使用CloudWatch在EC2实例上进行设置的分步说明:
http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/mon-scripts.html
Cron是你的朋友。将此文件放到/etc/cron.daily 目录中,它将每天运行一次:
#!/bin/sh
# this script is /etc/cron.daily/diskAlert.cron
ADMIN="jdoe@maildomain.com"
ALERT=90
df -PkH | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $6 }' | while read output;
do
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
partition=$(echo $output | awk '{print $2}' )
if [ $usep -ge $ALERT ]; then
echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)" |
mail -s "Alert: Almost out of disk space $usep%" $ADMIN
fi
done
注意:此脚本将表明已安装的CDROM已满。
这是我编写的快速PowerShell脚本,可在AWS的DC上运行,如果驱动器已满,则会发出一封电子邮件给一组收件人。它需要两列的csv-一列带计算机名称的名称,一列带驱动器号的驱动器。我们的AWS环境中没有邮件服务器,因此我将其配置为通过SES发送。如果愿意,您也可以稍微修改脚本以仅每隔一段时间发送一次有关驱动器利用率的报告。只是以为我会将其发布在这里,因为我发现的所有解决方案都是针对Linux实例的。
$CSVPath = "c:\Scripts\computerNames.csv"
$computerName = new-object System.Data.DataSet
$computerName = Import-CSV $CSVPath
$AwsUn = ""
$AwsPw = ConvertTo-SecureString "" -AsPlainText -Force
$cred = New-Object -typename System.Management.Automation.PSCredential -ArgumentList $AwsUn, $AwsPw
Foreach($name in $computerName)
{
$dl = $name.drive
$Utilization = Get-WmiObject win32_Volume -ComputerName $name.computerName -Filter "DriveLetter = '$($dl)'"| Foreach{ “{0:N2}” -f ((1-$_.FreeSpace / $_.Capacity)*100) }
if($Utilization -gt 90)
{
Send-MailMessage -From Sender to Recipients -subject (
"$($name.computerName) Disk utilization" )-Body "The $dl drive on the AWS instance $($name.computerName) has $utilization% disk utilization. Please log in and delete log files or contact the Network Operations team to increase the storage allocated to this instance" -SmtpServer email-smtp.us-west-2.amazonaws.com -Credential $cred -useSSL -port 25
}
}