Назад | Перейти на главную страницу

Самый простой способ автоматически проверить дисковое пространство EC2 и получить уведомление, если оно заканчивается?

Запуск 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 /"

Чтобы сломать это, это

  • Создает задание, которое запускается раз в день в 00:00.
  • Cron автоматически обрабатывает электронные письма системному администратору с выводом заданий. Это задание производит вывод только в случае ошибки или если на диске мало места.
  • В 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

Крон - ваш друг. Поместите этот файл в свой /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
    } 


}