Este plugin ha sido desarrollado con el objetivo de ayudar a quienes necesitan monitorear el uso de sistemas de archivos en servidores Unix-Linux-Solaris-Aix,.. Permite monitorear múltiples sistemas de archivos simultáneamente, evaluando: Uso de espacio (en porcentajes) -Umbral de Alerta WARNING – Umbral de alerta CRITICA – Umbral de alerta INODOS.
- Uso de espacio (en porcentaje)
- Umbral de alerta CRITICAL
- Umbral de alerta, Uso de inodos
Cada sistema de archivos se pasa como parámetro al SCRIPTS, en el siguiente formato:
“/usr-95-98-90”
Los valores están separados por guion, el primero corresponde al File System a monitorear, el segundo al umbral WARNING (% de uso), el tercero al umbral CRITICO(% de uso) y el cuarto al umbral de uso INODOS. Al sobrepasar uno de estos umbrales, se gatilla la correspondiente alerta. Se pueden pasar múltiples parámetros, siguiendo este mismo formato.
Este plugin está diseñado para funcionar en todos los sistemas operativos tipo Unix, excluyendo Windows. Ha sido probado exitosamente en:
- Linux
- Solaris
- AIX
Es adaptable según las necesidades específicas de cada entorno.
El orden de las alertas es el siguiente:
- CRITICAL (prioridad máxima)
- WARNING
- OK (con valores informativos)
Esto permite una rápida identificación de problemas graves antes de revisar advertencias o estados normales. Como el plugin está en fase de prueba, agradeceré cualquier comentario, sugerencia o reporte de errores para seguir mejorándolo.
En la salida de la ejecución, muestra los valores obtenidos por cada File System Monitoreado, ya sean en estado OK, WARNING o CRITICO
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
#!/bin/bash # Detectar el sistema operativo OS_TYPE=$(uname) if [[ "$OS_TYPE" == "Linux" ]]; then inodo="df -i" comdf="df -h" elif [[ "$OS_TYPE" == "SunOS" ]]; then inodo="df -F ufs -o i " comdf="df -h" elif [[ "$OS_TYPE" == "AIX" ]]; then inodo="df -g" comdf="df -g" elif [[ "$OS_TYPE" == "Unix" ]]; then inodo="df -i" comdf="df -h" else inodo="df -i" comdf="df -h" fi global_status=0 unset crit warn ok # Procesar cada parametro for param in "$@"; do IFS='-' read -r fs warning critical inode <<< "$param" # Obtiene los valores del File System df_output=`$comdf "$fs" | grep "$fs"` used_percent=`echo "$df_output" | awk '{for(i=1;i<=NF;i++) if($i ~ /%$/) print $i}' | sed 's/%//'` avail_space=`echo "$df_output" | awk '{for(i=2;i<=NF;i++) if($i ~ /%$/) print $(i-1)}'` if [[ "$OS_TYPE" == "AIX" ]]; then used_percent=`echo $used_percent | cut -d" " -f1` avail_space=`echo $avail_space | cut -d" " -f1 | sed 's/$/G/'` fi free_percent=`expr 100 - $used_percent` # Obtiene los valores de INODO df_inode=`$inodo "$fs" | grep "$fs"` # Consulta si se obtuvieron valores en forma correcta if [[ $? -ne 0 ]] ; then inode_free_percent=99 else inode_used_percent=`echo "$df_inode" | awk '{for(i=1;i<=NF;i++) if($i ~ /%$/) print $i}' | sed 's/%//'` if [[ "$OS_TYPE" == "AIX" ]]; then inode_used_percent=`echo $inode_used_percent | cut -d" " -f2` fi inode_free_percent=`expr 100 - $inode_used_percent` fi if [ "$used_percent" -ge "$critical" ] || [ "$inode_used_percent" -ge "$inode" ]; then crit=`echo "$crit $fs $avail_space($free_percent%)I-$inode_free_percent%"` global_status=2 elif [ "$used_percent" -ge "$warning" ]; then warn=`echo "$warn $fs $avail_space($free_percent%)I-$inode_free_percent%"` global_status=1 else ok=`echo "$ok $fs $avail_space($free_percent%)I-$inode_free_percent%"` fi crit=$(echo $crit) warn=$(echo $warn) ok=$(echo $ok) done if [ "$global_status" -eq 0 ]; then echo "OK=$ok" exit 0 fi if [ "$global_status" -eq 1 ]; then if [ -n "$ok" ]; then echo "WAR=$warn OK=$ok" else echo "WAR=$warn" fi exit 1 fi if [ "$global_status" -eq 2 ]; then output="CRIT=$crit" [ -n "$warn" ] && output="$output WAR=$warn" [ -n "$ok" ] && output="$output OK=$ok" echo "$output" exit 2 fi # Si no se cumple ninguna condición echo "Error: $global_status No definido" exit 3 |
El el siguiente ejemplo lo lanzaremos para monitorear 3 File system en un determinado servidor SOLARIS y muestra el detalle de salida :
./monfilesys.sh «/-95-98-95» «/usr01-85-90-90» «/tmp-95-98-95»
En el detalle indica que el FS «/» tiene 3.0 Gigas libres, correspondiente al 80% y de inodos el 94% disponible, lo mismo para los 2 siguientes File System…
OK=/ 3.0G(80%)I-94% /usr01 3.6G(96%)I-99% /tmp 3.7G(99%)I-99%