Le moyen le plus simple de vérifier automatiquement l'espace disque EC2 et d'être alerté s'il manque de ressources?

25

Exécution de l'AMI Amazon Linux. Il semble que CloudWatch ne vérifie pas l'espace disque disponible. J'ai un certain nombre de serveurs et, idéalement, je ne veux pas avoir à configurer chacun d'eux avec un serveur de messagerie, un script pour vérifier l'espace disque, etc.

Existe-t-il un moyen plus simple de procéder?

DaBeeeenster
la source

Réponses:

13

Amazon fournit des scripts pour cela à partir de mars 2012:

Scripts de surveillance Amazon CloudWatch pour Linux : http://aws.amazon.com/code/8720044071969977

qerub
la source
Les scripts semblent assez simples. Ce qui m'inquiète, c'est qu'il a besoin d'une paire connue de clé d'accès et de secret AWS. Est-ce que quelqu'un sait s'il cherchera également dans le rôle d'instance EC2 pour obtenir une paire temporaire ou si je devrai le coder moi-même?
sergiopereira
Pour répondre à ma propre question. Oui! Les scripts utiliseront le rôle IAM de l'instance EC2 (le cas échéant). Le problème est que le rôle que vous avez choisi doit disposer des autorisations CloudWatch nécessaires.
sergiopereira
5

Les outils de contrôle et de surveillance EC2 n'ont aucun moyen de vous fournir ces données car le système de fichiers de vos instances est UNIQUEMENT accessible par l'instance elle-même . L'architecture de base du matériel et le modèle de sécurité exigent cette limitation. Pensez à quel point ce serait mauvais si des logiciels en dehors de votre ordinateur pouvaient fouiller les fichiers sur vos disques durs!

Voici un moyen discret de faire en sorte que cron (installé sur la plupart des systèmes) vérifie périodiquement ces données. De toute façon, vos systèmes doivent avoir la configuration minimale requise pour gérer les notifications de courrier racine. Je recommande d'avoir au moins un agent de courrier sortant matérialiste et de configurer l'alias racine ou administrateur pour vous le transmettre sur tous les systèmes que vous administrez. De nombreux programmes notamment cronattendent cette configuration.

Vous pouvez ajouter ceci à votre crontab:

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

Pour décomposer cela, ce

  • Crée un travail qui s'exécute une fois par jour à 00h00.
  • Cron gère automatiquement l'envoi par e-mail à l'administrateur système de la sortie des travaux. Ce travail ne produit une sortie qu'en cas d'erreur ou si l'espace disque est faible
  • La testcommande établit une comparaison de shell simple en utilisant l' -ltopérateur inférieur à et une valeur fixe équivalente à 1 Go d'espace libre.
  • La dfcommande teste l'espace libre sur le /système de fichiers
  • Le grepvous obtient juste la ligne de sortie dont vous avez besoin au lieu des en-têtes dfinclus.
  • Le awkget n'est que la quatrième colonne de la sortie, le numéro d'espace libre.
  • Le &&dit d'exécuter la commande suivante uniquement si la première (la test x -lt y) renvoie vrai.
Caleb
la source
4

J'ai écrit un script car j'avais besoin de vérifier plusieurs serveurs au sein de mon groupe EC2. Il a besoin d'un fichier avec une liste de chaque IP de serveur / nom de domaine sur une seule ligne.

#! /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
la source
2
Les "Amazon CloudWatch Monitoring Scripts for Linux" peuvent pousser l'utilisation du disque dans CloudWatch en tant que mesures personnalisées. docs.amazonwebservices.com/AmazonCloudWatch/latest/…
Laurion Burchall
@LaurionBurchall veuillez mettre cela comme réponse. IMO qui est la bonne réponse car elle donne la possibilité d'utiliser les alertes CloudWatch.
Joe Constant
0

Cron est votre ami. Placez ce fichier dans votre répertoire /etc/cron.daily et il s'exécutera une fois par jour:

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

REMARQUE: ce script indique que les CD-ROM montés sont pleins.

djangofan
la source
0

Il s'agit d'un script PowerShell rapide que j'ai écrit qui s'exécute sur notre DC dans AWS et envoie un e-mail à un groupe de destinataires si un lecteur est plein. Il faut un csv avec 2 colonnes - un nom intitulé avec un nom d'ordinateur et un lecteur intitulé avec une lettre de lecteur. Nous n'avons pas de serveur de messagerie dans notre environnement AWS, je l'ai donc configuré pour envoyer via SES. Vous pouvez également modifier légèrement le script pour simplement envoyer un rapport de temps en temps sur l'utilisation du lecteur si vous le souhaitez. Je pensais juste que je publierais ceci ici, car toutes les solutions que j'ai trouvées étaient pour des instances 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
    } 


}
Benjamin Girard
la source