¿La forma más fácil de verificar automáticamente el espacio en disco EC2 y recibir una alerta si se está agotando?

25

Ejecutando la AMI de Amazon Linux. Parece que CloudWatch no busca espacio libre en el disco. Tengo varios servidores e idealmente no quiero tener que configurar cada uno con un servidor de correo, script para verificar el espacio en disco, etc.

¿Hay una manera más simple de hacer esto?

DaBeeeenster
fuente

Respuestas:

13

Amazon proporciona scripts para esto a partir de marzo de 2012:

Scripts de monitoreo de Amazon CloudWatch para Linux : http://aws.amazon.com/code/8720044071969977

qerub
fuente
Los guiones parecen bastante sencillos. Lo que me preocupa es que necesita un par conocido de clave de acceso y secreto de AWS. ¿Alguien sabe si también se verá en el rol de instancia EC2 para obtener un par temporal o si tendré que codificarlo yo mismo?
sergiopereira
Para responder mi propia pregunta. ¡Sí! Los scripts utilizarán el rol de IAM de la instancia EC2 (si está presente). El problema es que el rol que elija debe tener los permisos necesarios de CloudWatch.
sergiopereira
5

Las herramientas de control y supervisión de EC2 no pueden proporcionarle estos datos porque la instancia en sí solo puede acceder al sistema de archivos de sus instancias . Tanto la arquitectura básica del hardware como el modelo de seguridad exigen esta limitación. ¡Piense en lo malo que sería si el software fuera de su computadora pudiera hurgar en los archivos de sus discos duros!

Aquí hay una forma discreta de hacer que cron (instalado en la mayoría de los sistemas de todos modos) verifique estos datos periódicamente. Sus sistemas deben tener los requisitos mínimos para manejar las notificaciones de correo raíz de todos modos. Recomiendo tener al menos un agente de correo saliente materialista y configurar el alias raíz o administrador para que lo reenvíe en todos los sistemas que administre. Muchos programas, incluso cronesperan esta configuración.

Puede agregar esto a su crontab:

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

Para romper eso, esto

  • Crea un trabajo que se ejecuta una vez al día a las 00:00.
  • Cron maneja automáticamente el correo electrónico del administrador del sistema con la salida de trabajos. Este trabajo solo produce resultados si hay un error o si el espacio en disco es bajo
  • El testcomando configura una comparación de shell simple utilizando el -ltoperador menor que y un valor fijo equívoco al espacio libre de 1 Gb.
  • El dfcomando prueba el espacio libre en el /sistema de archivos
  • El grepque sufre es sólo la línea de salida que necesitan en lugar de los encabezados dfincluye.
  • El awkget es sólo la cuarta columna de la salida, el número de espacio libre.
  • El &&dice ejecutar el siguiente comando solo si el primero (el test x -lt y) devuelve verdadero.
Caleb
fuente
4

Escribí un script ya que necesitaba verificar varios servidores dentro de mi grupo EC2. Necesita un archivo con una lista de cada IP del servidor / nombre de dominio en una sola línea.

#! /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
fuente
2
Los "Scripts de monitoreo de Amazon CloudWatch para Linux" pueden impulsar el uso del disco en CloudWatch como métricas personalizadas. docs.amazonwebservices.com/AmazonCloudWatch/latest/…
Laurion Burchall
@LaurionBurchall, pon eso como respuesta. OMI, esa es la respuesta correcta, ya que ofrece la posibilidad de utilizar alertas de CloudWatch.
Joe Constant
0

Cron es tu amigo. Coloque este archivo en su directorio /etc/cron.daily y se ejecutará una vez al día:

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

NOTA: Este script dirá que los CDROM montados están llenos.

djangofan
fuente
0

Este es un script rápido de PowerShell que escribí que se ejecuta en nuestro DC en AWS y envía un correo electrónico a un grupo de destinatarios si una unidad está llena. Se necesita un csv con 2 columnas: un nombre titulado con el nombre de una computadora y una unidad titulada con una letra de unidad. No tenemos un servidor de correo en nuestro entorno de AWS, así que lo configuré para enviar a través de SES. También puede modificar ligeramente la secuencia de comandos para enviar un informe cada cierto tiempo de la utilización de la unidad si lo desea. Solo pensé en publicar esto aquí, ya que todas las soluciones que encontré fueron para instancias 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
    } 


}
Benjamin Girard
fuente