Запуск AMI Amazon Linux. Похоже, CloudWatch не проверяет наличие свободного места на диске. У меня есть несколько серверов, и в идеале я не хочу настраивать каждый из них с почтовым сервером, скриптом для проверки места на диске и т. Д.
Есть способ сделать это попроще?
Amazon предоставляет для этого сценарии по состоянию на март 2012 года:
Сценарии мониторинга Amazon CloudWatch для Linux: http://aws.amazon.com/code/8720044071969977
Инструменты управления и мониторинга EC2 не могут предоставить вам эти данные, потому что файловая система ваших экземпляров доступна ТОЛЬКО самим экземпляром. И базовая архитектура оборудования, и модель безопасности требуют этого ограничения. Подумайте, как было бы плохо, если бы программное обеспечение вне вашего компьютера могло копаться в файлах на ваших жестких дисках!
Вот простой способ заставить cron (в любом случае установленный в большинстве систем) периодически проверять эти данные для вас. В любом случае ваши системы должны иметь минимальные требования для обработки уведомлений корневой почты. Я рекомендую иметь хотя бы материалистический агент исходящей почты и настроить псевдоним root или администратора для пересылки вам во всех администрируемых вами системах. Многие программы, включая cron
ожидайте эту конфигурацию.
Вы можете добавить это в свой crontab:
0 0 * * * test $(df / | grep ^/ | awk '{print $4}') -lt 1048576 && echo "Warning: Free disk space is less than 1G on /"
Чтобы сломать это, это
test
команда устанавливает простое сравнение оболочки с помощью -lt
меньше оператора и фиксированное значение, эквивалентное 1 ГБ свободного места.df
команда проверяет свободное место на /
файловая системаgrep
дает вам только нужную строку вывода вместо заголовков df
включает.awk
get - это всего лишь четвертый столбец вывода, номер свободного места.&&
говорит запустить следующую команду, только если первая ( test x -lt y
) возвращает истину.Я написал сценарий, так как мне нужно было проверить несколько серверов в моей группе 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
Пошаговые инструкции по настройке на инстансе EC2 с CloudWatch:
http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/mon-scripts.html
Я использую этот скрипт: http://nixcraft.com/shell-scripting/3238-shell-script-check-disk-space-remote-systems.html
Крон - ваш друг. Поместите этот файл в свой /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
ПРИМЕЧАНИЕ. Этот сценарий сообщит, что смонтированные компакт-диски заполнены.
Это быстрый сценарий PowerShell, который я написал, который запускается на нашем DC в AWS и отправляет сообщение электронной почты группе получателей, если диск заполнен. Требуется 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
}
}