Script bash que avisa del estado de un servidor

Actualizado el sábado, 11 enero, 2020

Script bash que avisa del estado de un servidor

Si quieres estar siempre informado del estado del hardware de tu servidor o PC linux, en este articulo te propongo una solución. Con este sencillo script bash recibirás por mail los datos del estado de tu sistema.

El script nos aportara la siguiente información:

  • General: Hora del sistema, Ip del sistema, Kernel Linux.
  • Hardware: Tipo y modelo de procesador, Numero de procesadores o nucleos.
  • Memoria RAM: Mem total, Mem que usas, Mem libre.
  • Memoria SWAP: Mem total, Mem que usas, Mem libre.
  • Uso de Disco: Sistema de ficheros, Tamaño, Usados, Disponible, Uso, %, Montado en.
  • More Info: Uptime, Usuarios conectados, Procesos, Carga de procesador.
  • LAMP: Procesos MySQL, Procesos Apache, Peticiones Apache.
  • Puertos abiertos: SSH, Apache, POP3, IMAP, MySQL (Busca los puertos por defecto).

 

El script bash:

Para poder identificar los puertos abiertos debes tener instalado Nmap, así que si no lo tienes instalado te recomiendo que lo hagas… es una excelente aplicación.

Script bash que avisa del estado de un servidor 1

En Centos y derivados:

yum install nmap

En Debian, Ubuntu y derivados:
apt-get install nmap

 

Una vez instalado nmap abrimos la consola / terminal shell y escribimos…

nano estado.sh

Ahora copia y pega en estado.sh, lo siguiente:
#!/bin/bash

echo "************************ [General] ****************************"
echo " "
echo "  Hora:           " `date '+%m-%d-%y %H:%M:%S'`
echo "  IPs:            " `ifconfig | grep "inet addr:" | cut -f2 -d":" | cut -f1 -d" "`
echo "  Kernel: " `uname -r`
echo " "

echo "************************ [Hardware] ***************************"
echo " "
echo "  Procesador:             " `cat /proc/cpuinfo | grep "model name" | uniq | cut -f2 -d":"`
echo "  Núm.Prosd/nucleos:      " `cat /proc/cpuinfo | grep processor | wc -l`
echo " "

echo "*********************** [Memoria RAM] **************************"
echo " "
echo "  Memoria total:  " `free -m | grep Mem | awk '{print $(2)}'` Mb.
echo "  Memoria usada:   " `free -m | grep Mem | awk '{print $(3)}'` Mb.
echo "  Memoria free:   " `free -m | grep Mem | awk '{print $(4)}'` Mb.
echo " "

echo "********************** [Memoria SWAP] **************************"
echo " "
echo "  Memoria total:  " `free -m | grep Swap | awk '{print $(2)}'` Mb.
echo "  Memoria used:   " `free -m | grep Swap | awk '{print $(3)}'` Mb.
echo "  Memoria free:   " `free -m | grep Swap | awk '{print $(4)}'` Mb.
echo " "

echo "********************** [Uso de Disco] **************************"
disco=`df -h`
echo -e "-- Disco --\r\n$disco\r\n\r\n"

echo "************************** [More Info] *************************"
echo " "
echo "  Uptime:                 " `uptime | cut -f4 -d" "` días
echo "  Usuarios conectados:    " `w | wc -l`
echo "  Procesos:               " `ps aux | wc -l`
echo "  Carga de procesador:    " `uptime | awk '{print $(NF - 2), $(NF - 1), $NF}'`
echo " "

echo "************************ [LAMP] ********************************"
echo " "
echo "  Procesos MySQL :        " `mysql -N -uuser -ppassword -e "show processlist" | grep -v Sleep | wc -l`
echo "  Procesos Apache:        " `ps aux | grep apache | wc -l`
echo "  Peticiones Apache:      " `netstat -an | grep :80 | wc -l`
echo " "

echo "********************* [Puertos abiertos] ***********************"
echo " "
echo "  (22)   SSH:             " `nmap localhost -p 22 | grep 22 | cut -f2 -d" "`
echo "  (80)   Apache:  " `nmap localhost -p 80 | grep 80 | cut -f2 -d" "`
echo "  (110)  POP3:            " `nmap localhost -p 110 | grep 110 | cut -f2 -d" "`
echo "  (143)  IMAP:            " `nmap localhost -p 143 | grep 143 | cut -f2 -d" "`
echo "  (3306) MySQL:           " `nmap localhost -p 3306 | grep 3306 | cut -f2 -d" "`
echo " "
echo "****************************************************************"

Guarda el archivo y sal de nano.

 

Ejecuta el script bash:

bash estado.sh

Obtendrás un resultado similar a:
************************ [General] ****************************
 
  Hora:            08-07-17 11:44:02
  IPs:            
  Kernel:  3.10.0-514.26.2.el7.x86_64
 
************************ [Hardware] ***************************
 
  Procesador:              Intel Core Processor (Haswell, no TSX)
  Núm.Procesadores:       2
 
*********************** [Memoria RAM] **************************
 
  Memoria total:   5665 Mb.
  Memoria usada:    916 Mb.
  Memoria free:    3689 Mb.
 
********************** [Memoria SWAP] **************************
 
  Memoria total:   0 Mb.
  Memoria used:    0 Mb.
  Memoria free:    0 Mb.
 
********************** [Uso de Disco] **************************
-- Disco --
S.ficheros     Tamaño Usados  Disp Uso% Montado en
/dev/sda1         25G   5,5G   19G  24% /
devtmpfs         2,8G      0  2,8G   0% /dev
tmpfs            2,8G      0  2,8G   0% /dev/shm
tmpfs            2,8G   8,4M  2,8G   1% /run
tmpfs            2,8G      0  2,8G   0% /sys/fs/cgroup
tmpfs            567M      0  567M   0% /run/user/0


************************** [More Info] *************************
 
  Uptime:                  días
  Usuarios conectados:     3
  Procesos:                98
  Carga de procesador:     0,32, 0,21, 0,12
 
************************ [LAMP] ********************************
 
ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: YES)
  Procesos MySQL :         0
  Procesos Apache:         11
  Peticiones Apache:       31
 
********************* [Puertos abiertos] ***********************
 
  (22)   SSH:              closed
  (80)   Apache:   open
  (110)  POP3:             open
  (143)  IMAP:             open
  (3306) MySQL:            open
 
****************************************************************

También lo puedes descargar directamente en tu servidor desde la consola.
wget https://www.sololinux.es/public/estado.sh

O descargar en tu pc, desde aquí.

 

Por ultimo creas una tarea cron para que te envíe un mail con la info del servidor.

Ejemplo:

05 * * * * /home/user/monitor.sh | /usr/bin/mail -s "Monitor [`/bin/hostname`]" mail@dominio.com

Si tienes dudas sobre las tareas cron, visita este articulo.

 

2 Comentarios

  1. jairo
    31/10/2019
    • sololinux
      31/10/2019

Agregar comentario