miércoles, 23 de septiembre de 2009

Monitoreo de espacio en disco en servidores Linux

Este es un script que realicé a medida para monitorear el espacio en disco de servidores Linux.
Lo que hace es correr en forma periódica controlando el espacio ocupado en disco y si este espacio sobrepasa un valor de criticidad envia un email al administrador.
Tiene la particularidad de que si el espacio ocupado se mantiene sin cambios después de haber enviado un primer aviso no vuelve a reiterar el aviso hasta que se genere una nueva variación del espacio ocupado siempre que supere el nivel de criticidad establecido.
Además se le puede configurar la cantidad de particiones que tiene que monitorear agregando modulitos al scripts...

Script :

#!/bin/bash
# Shell script para monitoreo de espacio en disco
# Envia un email a los administradores $ADMIN, si el porcentage
# de espacio ocupado es >= 80%
# Modificado para que envie un aviso solo si aumenta el 
#porcentaje de disco
# ocupado con respecto al aviso anterior
# -------------------------------------------------------------
ADMIN="dgatti@empresa.com"
# set alert level 80% is default
ruta=/usr/local/scripts/monitoreo_disco
ALERT=80
cont=0
find $ruta/tmp1.txt > $ruta/tmpC        

variable=`cat $ruta/tmpC`
if [ -z $variable ]; then                                                     
        echo '0' > $ruta/tmp1.txt 
fi
df -H | grep -vE 
'^Filesystem|tmpfs|cdrom|usbdevfs|debugfs|securityfs|sysfs|udev|proc
|nfs|devpts|shmfs|floppy '| awk '{ print $5 " " $1 }' | 
while read output; do
  let cont=cont+1                       
  usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1  )
  partition=$(echo $output | awk '{ print $2 }' )
        if [ $usep -ge $ALERT ]; then                                 
                case $cont in                                                         
                        1)
                             aux=`cat $ruta/tmp1.txt`
                             if [ $usep -ne $aux ]; then                             
                                 rm $ruta/tmp1.txt
                                 echo $usep > $ruta/tmp1.txt 
                                 echo "Funcionando sobre el limite establecido: 
                                    \"$partition ($usep%)\" en $(hostname), 
                                    fecha $(date), se recomienda liberar espacio" |
                                 mail -s "ALERTA!!: Se ha sobrepasado el limite 
                                    establecido de espacio en disco" $ADMIN
                             fi


1) Crear el directorio “/usr/local/scripts/monitoreo_disco”

2) Copiar el script “monitoreo_disco.sh” en “/usr/local/scripts/monitoreo_disco"

3) Realizar los siguientes cambios en el script:

    3.1 - Definir en la variable “SYSADMIN” los destinatarios de las alertas. 
    Ejemplo:
  SYSADMIN="dgatti@empresa.com.ar"
    3.2 –  Establecer los niveles críticos y de advertencia y la variable 
    de logs (expresado en porcentaje, 80 porciento en el ejemplo)
  ALERT=80
  ruta=/usr/local/scripts/monitoreo_disco
    3.3 – Establecer la cantidad de particiones realizadas al disco y adaptar 
    el script a este número agregando o quitando tmpX.txt de 
    este if (en este caso si hubiese 2 particiones):
     if [ -z $variable ]; then                                        
        echo '0' > $ruta/tmp1.txt
        echo '0' > $ruta/tmp2.txt 
   fi
dónde la X se corresponde con el número de particiones.
La misma modificación se debe aplicar al "case" en la cantidad de opciones 
que este tenga para evaluar, adaptarlo a la cantidad de particiones (en el script esta para una sola partición):


                   aux=`cat $ruta/tmpX.txt`
         if [ $usep -ne $aux ]; then      
           rm $ruta/tmpX.txt
           echo $usep > $ruta/tmpX.txt    
           echo "Funcionando sobre el 
              limite establecido: \"$partition 
              ($usep%)\" en $(hostname), 
              fecha $(date), se recomienda 
              liberar espacio" |
                      mail -s "ALERTA!!: 
                      Se ha sobrepasado el 
                      limite establecido de 
                      espacio en disco" $ADMIN

4) Agregar a /etc/crontab:
# Dispara cada 60 minutos el control de espacios en disco
*/60 * * * *   root   /usr/local/scripts/monitoreo_disco/monitoreo_disco.sh >$PATHDESTINO/monitoreo_disco_std 2>$PATHDESTINO/monitoreo_disco_err

Espero que se entienda, si no avisen....y que les sea util



1 comentario:

  1. Reconozco mi ignorancia, pero en la expresión

    "*/60 * * * * root /usr/local/scripts/monitoreo_disco/monitoreo_disco.sh "

    ¿No estás ejecutando como root el comando?

    ResponderEliminar