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


25

Запуск Amazon Linux AMI. Кажется, что CloudWatch не проверяет свободное место на диске. У меня есть несколько серверов, и в идеале я не хочу настраивать каждый из них с почтовым сервером, скриптом для проверки дискового пространства и т. Д.

Есть ли более простой способ сделать это?

Ответы:


13

Amazon предоставляет сценарии для этого по состоянию на март 2012 года:

Сценарии мониторинга Amazon CloudWatch для Linux : http://aws.amazon.com/code/8720044071969977


Сценарии выглядят довольно прямо. Меня беспокоит то, что ему нужна известная пара ключей доступа и секретного ключа AWS. Кто-нибудь знает, будет ли он искать в роли экземпляра EC2 временную пару или мне придется самому ее кодировать?
sergiopereira

Чтобы ответить на мой собственный вопрос. Да! Сценарии будут использовать роль IAM экземпляра EC2 (если он есть). Выгода в том, что выбранная вами роль должна иметь необходимые разрешения CloudWatch.
sergiopereira

5

Инструменты контроля и мониторинга 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оператор less than и фиксированное значение, эквивалентное 1 ГБ свободного пространства.
  • Команда dfпроверяет свободное место в /файловой системе
  • grepПолучает вас только строку вывода вам нужно вместо заголовков dfвключают в себя.
  • awkПрибудет только четвертый столбец в выводе, свободное пространство номер.
  • Команда &&говорит выполнить следующую команду, только если первая ( test x -lt y) возвращает true.

4

Я написал скрипт, так как мне нужно было проверить несколько серверов в моей группе 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

2
«Сценарии мониторинга Amazon CloudWatch для Linux» могут выдвигать использование диска в CloudWatch в качестве пользовательских метрик. docs.amazonwebservices.com/AmazonCloudWatch/latest/…
Лорион Берчолл,

@LaurionBurchall, пожалуйста, укажите это как ответ. IMO - это правильный ответ, поскольку он дает возможность использовать оповещения CloudWatch.
Джо Констант



0

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


0

Это быстрый сценарий PowerShell, который я написал и который запускается на нашем контроллере домена в AWS и отсылает электронное письмо группе получателей, если накопитель заполнен. Он принимает CSV с 2 столбцами - одно название с именем компьютера и один диск с буквой диска. У нас нет почтового сервера в нашей среде 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
    } 


}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.