Najłatwiejszy sposób na automatyczne sprawdzenie miejsca na dysku EC2 i wyświetlenie ostrzeżenia, gdy zaczyna brakować?

25

Uruchamianie Amazon Linux AMI. Wygląda na to, że CloudWatch nie sprawdza wolnego miejsca na dysku. Mam kilka serwerów i idealnie nie chcę konfigurować każdego z nich z serwerem poczty, skryptem do sprawdzania miejsca na dysku itp.

Czy istnieje prostszy sposób na zrobienie tego?

DaBeeeenster
źródło

Odpowiedzi:

13

Amazon udostępnia skrypty do tego w marcu 2012 r .:

Skrypty monitorowania Amazon CloudWatch dla systemu Linux : http://aws.amazon.com/code/8720044071969977

qerub
źródło
Skrypty wyglądają dość prosto. Martwi mnie to, że potrzebuje znanej pary klucza dostępu i hasła AWS. Czy ktoś wie, czy będzie również wyglądał w roli instancji EC2, aby uzyskać tymczasową parę, czy też będę musiał to kodować?
sergiopereira
Aby odpowiedzieć na moje pytanie. Tak! Skrypty wykorzystają rolę IAM instancji EC2 (jeśli jest obecna). Chwytem jest to, że wybrana rola musi mieć niezbędne uprawnienia CloudWatch.
sergiopereira,
5

Narzędzia kontroli i monitorowania EC2 nie mają możliwości przekazania tych danych, ponieważ system plików twoich instancji jest dostępny TYLKO dla samej instancji . Zarówno podstawowa architektura sprzętu, jak i model bezpieczeństwa wymagają tego ograniczenia. Pomyśl o tym, jak źle byłoby, gdyby oprogramowanie poza komputerem mogło wyłudzać pliki na dyskach twardych!

Oto niski klucz do tego, aby cron (i tak instalowany w większości systemów) okresowo sprawdzał te dane. Twoje systemy powinny mieć minimalne wymagania do obsługi powiadomień poczty głównej. Zalecam posiadanie co najmniej materialistycznego agenta poczty wychodzącej i skonfigurowanie aliasu administratora lub administratora, aby przekazywał ci informacje na wszystkich administrowanych przez ciebie systemach. Wiele programów, w tym cronoczekiwanie tej konfiguracji.

Możesz dodać to do swojego crontab:

0 0 * * * test $(df / | grep ^/ | awk '{print $4}') -lt 1048576 && echo "Warning: Free disk space is less than 1G on /"

Aby to rozbić, to

  • Tworzy zadanie uruchamiane raz dziennie o 00:00.
  • Cron automatycznie obsługuje wysyłanie wiadomości e-mail do administratora systemu z danymi wyjściowymi zadań. To zadanie generuje dane wyjściowe tylko w przypadku wystąpienia błędu lub braku miejsca na dysku
  • Te testzestawy poleceń do góry prostego porównania powłoki wykorzystujące -ltmniej niż operatora i stałą wartość equivolent 1GB wolnej przestrzeni.
  • dfKomenda sprawdza ilość wolnego miejsca na /systemie plików
  • grepDostaje po prostu linię wyjścia co potrzeba zamiast nagłówków dfzawiera.
  • awkGet to dopiero czwarta kolumna w produkcji, wolna ilość miejsca.
  • &&Mówi do uruchomienia następnego polecenia tylko wtedy, gdy najpierw jeden ( test x -lt y) zwraca true.
Caleb
źródło
4

Napisałem skrypt, ponieważ musiałem sprawdzić kilka serwerów w mojej grupie EC2. Potrzebuje pliku z listą adresów IP / nazw domen każdego serwera w jednym wierszu.

#! /bin/bash

ADMIN="[email protected]"
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
DaBeeeenster
źródło
2
„Skrypty monitorowania Amazon CloudWatch dla systemu Linux” mogą przesuwać użycie dysku do CloudWatch jako niestandardowe wskaźniki. docs.amazonwebservices.com/AmazonCloudWatch/latest/…
Laurion Burchall
@LaurionBurchall, proszę podać to jako odpowiedź. IMO to poprawna odpowiedź, ponieważ daje możliwość korzystania z alertów CloudWatch.
Joe Constant,
0

Cron jest twoim przyjacielem. Umieść ten plik w katalogu /etc/cron.daily, a będzie on uruchamiany raz dziennie:

#!/bin/sh
# this script is /etc/cron.daily/diskAlert.cron    
ADMIN="[email protected]"
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

UWAGA: Ten skrypt powie, że zamontowane CD-ROMy są pełne.

djangofan
źródło
0

Jest to szybki skrypt PowerShell, który napisałem, który działa na naszym DC w AWS i wysyła wiadomość e-mail do grupy odbiorców, jeśli dysk jest pełny. Zajmuje csv z 2 kolumnami - jedną zatytułowaną z nazwą komputera i jedną zatytułowaną dysk z literą dysku. Nie mamy serwera pocztowego w naszym środowisku AWS, więc skonfigurowałem go do wysyłania za pośrednictwem SES. Możesz także nieznacznie zmodyfikować skrypt, aby co jakiś czas wysyłać raport dotyczący wykorzystania dysku. Pomyślałem, że opublikuję to tutaj, ponieważ wszystkie rozwiązania, które znalazłem, dotyczyły instancji Linuksa.

$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
    } 


}
Benjamin Girard
źródło