Der einfachste Weg, den EC2-Speicherplatz automatisch zu überprüfen und benachrichtigt zu werden, wenn er zur Neige geht?

25

Ausführen von Amazon Linux AMI. Es scheint, dass CloudWatch nicht nach freiem Speicherplatz sucht. Ich habe eine Reihe von Servern und möchte im Idealfall nicht jeden mit einem Mailserver, Skript zum Überprüfen des Speicherplatzes usw. konfigurieren müssen.

Gibt es einen einfacheren Weg, dies zu tun?

DaBeeeenster
quelle

Antworten:

13

Amazon stellt hierfür ab März 2012 Skripte zur Verfügung:

Amazon CloudWatch Monitoring-Skripts für Linux : http://aws.amazon.com/code/8720044071969977

qerub
quelle
Die Skripte sehen ziemlich direkt aus. Die Sache, die mich beunruhigt, ist, dass es ein bekanntes Paar von AWS-Zugriffsschlüsseln und -geheimnissen benötigt. Weiß jemand, ob es auch in der EC2-Instanzrolle aussieht, um ein temporäres Paar zu erhalten, oder ob ich das selbst codieren muss?
Sergiopereira
Um meine eigene Frage zu beantworten. Ja! Die Skripte verwenden die IAM-Rolle der EC2-Instanz (falls vorhanden). Der Haken ist, dass die von Ihnen ausgewählte Rolle die erforderlichen CloudWatch-Berechtigungen haben muss.
Sergiopereira
5

Die Steuerungs- und Überwachungstools von EC2 können Ihnen diese Daten nicht zur Verfügung stellen, da das Dateisystem Ihrer Instanzen NUR für die Instanz selbst zugänglich ist . Sowohl die grundlegende Architektur der Hardware als auch das Sicherheitsmodell erfordern diese Einschränkung. Überlegen Sie, wie schlimm es wäre, wenn Software außerhalb Ihres Computers die Dateien auf Ihren Festplatten durchsuchen könnte!

Hier ist eine einfache Möglichkeit, cron (ohnehin auf den meisten Systemen installiert) dazu zu bringen, diese Daten regelmäßig auf Ihre Fehler zu überprüfen. Ihre Systeme sollten ohnehin die Mindestanforderungen für die Verarbeitung von Benachrichtigungen über Root-E-Mails erfüllen. Ich empfehle, mindestens einen materialistischen Agent für ausgehende E-Mails zu haben und den Root- oder Administrator-Alias ​​so zu konfigurieren, dass er auf allen von Ihnen verwalteten Systemen an Sie weitergeleitet wird. Viele Programme einschließlich cronerwarten diese Konfiguration.

Sie könnten dies zu Ihrer Crontab hinzufügen:

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

Um das zu brechen, das hier

  • Erstellt einen Job, der einmal täglich um 00:00 Uhr ausgeführt wird.
  • Cron bearbeitet automatisch die E-Mail-Benachrichtigung des Systemadministrators mit der Ausgabe von Aufträgen. Dieser Job erzeugt nur dann eine Ausgabe, wenn ein Fehler vorliegt oder der Speicherplatz knapp ist
  • Der testBefehl erstellt einen einfachen Shell-Vergleich mit dem -ltOperator less than und einem festen Wert, der 1 GB freiem Speicherplatz entspricht.
  • Der dfBefehl testet den freien Speicherplatz im /Dateisystem
  • Die grepbekommt man nur die Linie der Ausgabe , die Sie brauchen statt der Header dfenthält.
  • Das awkGet ist nur die vierte Spalte in der Ausgabe, die Nummer des freien Speicherplatzes.
  • Das &&sagt, dass der nächste Befehl nur ausgeführt werden soll, wenn der erste (der test x -lt y) true zurückgibt.
Caleb
quelle
4

Ich habe ein Skript geschrieben, um mehrere Server in meiner EC2-Gruppe zu überprüfen. Es wird eine Datei mit einer Liste aller Server-IP- / Domänennamen in einer einzelnen Zeile benötigt.

#! /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
quelle
2
Mit den "Amazon CloudWatch-Überwachungsskripten für Linux" kann die Datenträgernutzung als benutzerdefinierte Metrik in CloudWatch übertragen werden. docs.amazonwebservices.com/AmazonCloudWatch/latest/…
Laurion Burchall
@LaurionBurchall bitte als Antwort setzen. IMO ist die richtige Antwort, da CloudWatch-Warnungen verwendet werden können.
Joe Constant
0

Cron ist dein Freund. Legen Sie diese Datei in Ihr Verzeichnis /etc/cron.daily und sie wird einmal pro Tag ausgeführt:

#!/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

HINWEIS: In diesem Skript wird angegeben, dass bereitgestellte CD-ROMs voll sind.

Djangofan
quelle
0

Dies ist ein kurzes, von mir geschriebenes PowerShell-Skript, das auf unserem DC in AWS ausgeführt wird und eine E-Mail an eine Gruppe von Empfängern sendet, wenn ein Laufwerk voll ist. Es wird eine CSV mit 2 Spalten benötigt - ein Name mit dem Titel und ein Laufwerk mit dem Titel und einem Laufwerksbuchstaben. Wir haben keinen Mail-Server in unserer AWS-Umgebung, daher habe ich ihn so konfiguriert, dass er über SES gesendet wird. Sie können das Skript auch leicht modifizieren, um nur von Zeit zu Zeit einen Bericht über die Laufwerksauslastung zu senden, wenn Sie möchten. Ich dachte nur, dass ich das hier posten würde, da alle Lösungen, die ich gefunden habe, für Linux-Instanzen waren.

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