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?
Amazon fournit des scripts pour cela à partir de mars 2012:
Scripts de surveillance d'Amazon Cloudwatch pour Linux : http://aws.amazon.com/code/87200440719699777
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
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.df
teste l'espace libre sur le /
système de fichiersgrep
vous obtient juste la ligne de sortie dont vous avez besoin au lieu des en-têtes df
comprend.awk
Obtenez juste la quatrième colonne de la sortie, le numéro d'espace libre.&&
dit d'exécuter la commande suivante que si le premier (le test x -lt y
) retourne vrai.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
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.
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
}
}