Il modo più semplice per controllare automaticamente lo spazio su disco EC2 ed essere avvisato se si sta esaurendo?


25

Esecuzione dell'AMI Amazon Linux. Sembra che CloudWatch non controlli lo spazio libero su disco. Ho un numero di server e idealmente non voglio dover configurare ciascuno con un server di posta, uno script per controllare lo spazio su disco ecc.

C'è un modo più semplice per farlo?

Risposte:


13

Amazon fornisce script per questo a partire da marzo 2012:

Script di monitoraggio di Amazon CloudWatch per Linux : http://aws.amazon.com/code/8720044071969977


Gli script sembrano abbastanza semplici. La cosa che mi preoccupa è che ha bisogno di una coppia nota di chiave di accesso AWS e segreta. Qualcuno sa se cercherà anche nel ruolo dell'istanza EC2 per ottenere una coppia temporanea o se dovrò codificarlo da solo?
sergiopereira,

Per rispondere alla mia domanda. Sì! Gli script utilizzeranno il ruolo IAM dell'istanza EC2 (se presente). Il problema è che il ruolo scelto deve disporre delle autorizzazioni CloudWatch necessarie.
sergiopereira,

5

Gli strumenti di controllo e monitoraggio EC2 non possono fornire questi dati perché il file system delle istanze è accessibile SOLO dall'istanza stessa . Sia l'architettura di base dell'hardware che il modello di sicurezza richiedono questa limitazione. Pensa a quanto sarebbe grave se un software esterno al tuo computer potesse cercare i file sui tuoi dischi rigidi!

Ecco un modo semplice per fare in modo che cron (installato sulla maggior parte dei sistemi) controlli periodicamente questi dati. I tuoi sistemi dovrebbero avere i requisiti minimi per gestire comunque le notifiche di posta root. Ti consiglio di avere almeno un agente di posta in uscita materialista e di configurare l'alias root o amministratore per inoltrarti su tutti i sistemi che gestisci. Molti programmi cronprevedono questa configurazione.

Puoi aggiungere questo al tuo crontab:

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

Per scomporlo, questo

  • Crea un lavoro che viene eseguito una volta al giorno alle 00:00.
  • Cron gestisce automaticamente l'invio tramite e-mail dell'amministratore di sistema con l'output dei lavori. Questo lavoro produce output solo se si verifica un errore o se lo spazio su disco è insufficiente
  • Il testcomando imposta un semplice confronto della shell utilizzando l' -ltoperatore minore di e un valore fisso equivalente a 1 GB di spazio libero.
  • Il dfcomando verifica lo spazio libero sul /file system
  • La grepsi ottiene solo la linea di uscita è necessario invece che le intestazioni dfcomprende.
  • Il awkget è solo la quarta colonna nell'output, il numero di spazio libero.
  • Il &&dice di eseguire il comando successivo solo se il primo (il test x -lt y) restituisce vero.

4

Ho scritto uno script in quanto avevo bisogno di controllare diversi server all'interno del mio gruppo EC2. Ha bisogno di un file con un elenco di ciascun IP server / nome di dominio su una singola riga.

#! /bin/bash

ADMIN="serveralerts@youraddress.com"
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

2
Gli "Script di monitoraggio Amazon CloudWatch per Linux" possono trasferire l'utilizzo del disco in CloudWatch come metriche personalizzate. docs.amazonwebservices.com/AmazonCloudWatch/latest/…
Laurion Burchall

@LaurionBurchall, per favore, inseriscilo come risposta. IMO è la risposta corretta in quanto offre la possibilità di utilizzare gli avvisi di CloudWatch.
Joe Constant,



0

Cron è tuo amico. Inserisci questo file nella directory /etc/cron.daily e verrà eseguito una volta al giorno:

#!/bin/sh
# this script is /etc/cron.daily/diskAlert.cron    
ADMIN="jdoe@maildomain.com"
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

NOTA: questo script dirà che i CD-ROM montati sono pieni.


0

Questo è uno script PowerShell veloce che ho scritto che viene eseguito sul nostro controller di dominio in AWS e invia un'e-mail a un gruppo di destinatari se un'unità è piena. Prende un CSV con 2 colonne: un nome con un nome di computer e un titolo con una lettera di unità. Non abbiamo un server di posta nel nostro ambiente AWS, quindi l'ho configurato per l'invio tramite SES. Puoi anche modificare leggermente lo script per inviare un rapporto ogni tanto sull'utilizzo dell'unità se lo desideri. Ho pensato di postare qui, poiché tutte le soluzioni che ho trovato erano per istanze di 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
    } 


}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.