web-dev-qa-db-fra.com

Le moyen le plus simple de vérifier automatiquement l'espace disque EC2 et d'être alerté si elle est en cours d'exécution?

Exécution de l'Amazon Linux Ami. Il semble que Cloudwatch ne vérifie pas l'espace disque libre. J'ai un certain nombre de serveurs et idéalement de ne pas avoir à configurer chacun avec un serveur de messagerie, un script pour vérifier l'espace disque, etc.

Y a-t-il un moyen plus simple de faire cela?

25
DaBeeeenster

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

Scripts de surveillance d'Amazon Cloudwatch pour Linux : http://aws.amazon.com/code/87200440719699777

13
qerub

Il n'y a aucun moyen pour les outils de contrôle et de surveillance EC2 pour vous donner ces données car le système de fichiers de vos instances n'est accessible que par l'instance elle-même. L'architecture de base du matériel et le modèle de sécurité exigent cette limitation. Pensez à la manière dont il serait mauvais si le logiciel en dehors de votre ordinateur pourrait percer dans les fichiers de vos disques durs!

Voici un moyen bas clé de faire de cron (installé sur la plupart des systèmes de toute façon) Vérifiez ces données pour votre périodiquement. Vos systèmes doivent avoir les exigences minimales pour gérer de toute façon les notifications de la messagerie racine. Je recommande d'avoir au moins un agent de courrier sortant matérialiste et de configurer l'alias racine ou administrateur à vous transmettre à tous les systèmes que vous administrez. De nombreux programmes comprenant cron s'attendent à 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 /"

Briser cela, ça

  • Crée un emploi qui gère une fois par jour à 00h00.
  • Cron gère automatiquement l'envoi de l'administrateur système avec la sortie des travaux. Ce travail ne produit que la sortie s'il existe une erreur ou si l'espace disque est faible
  • La commande test définit une simple comparaison de shell à l'aide de l'-lt Moins que l'opérateur et une valeur fixe équivotant à 1 Go d'espace libre.
  • La commande df teste l'espace libre sur le / système de fichiers
  • Le grep vous obtient juste la ligne de sortie dont vous avez besoin au lieu des en-têtes df comprend.
  • Le awk Obtenez juste la quatrième colonne de la sortie, le numéro d'espace libre.
  • Les && dit d'exécuter la commande suivante que si le premier (le test x -lt y) retourne vrai.
5
Caleb

J'ai écrit un script car je devais vérifier plusieurs serveurs au sein de mon groupe EC2. Il a besoin d'un fichier avec une liste de chaque nom du serveur IP/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
4
DaBeeeenster

Cron est ton ami. Placez ce fichier dans votre annuaire / etc/cron.daily et il fonctionnera 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 dira que les cdoms montés sont pleins.

0
djangofan

Il s'agit d'un script rapide PowerShell que j'ai écrit qui fonctionne sur notre DC dans AWS et tire 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, donc je l'ai configuré pour envoyer via SES. Vous pouvez également modifier légèrement le script pour envoyer Un rapport de chaque si souvent de l'utilisation de la conduite si vous le souhaitez. Je pensais simplement que je postirais cela ici, puisque toutes les solutions que j'ai trouvées étaient pour les cas de 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
    } 


}
0
Benjamin Girard
0
Pete White