Un script de shell para enviar una alerta por correo electrónico cuando la memoria se agota


Un aspecto poderoso de los programas de shell de Unix/Linux, como bash, es su increíble soporte para construcciones de programación comunes que le permiten tomar decisiones, ejecutar comandos repetidamente, crear nuevas funciones y mucho más. Puede escribir comandos en un archivo conocido como script de shell y ejecutarlos colectivamente.

Esto le ofrece un medio fiable y eficaz de administración del sistema. Puede escribir scripts para automatizar tareas, por ejemplo, copias de seguridad diarias, actualizaciones del sistema, etc. cree nuevos comandos/utilidades/herramientas personalizados y más. Puede escribir secuencias de comandos que lo ayuden a mantenerse al día con lo que se desarrolla en un servidor.

Uno de los componentes críticos de un servidor es la memoria (RAM), tiene un gran impacto en el rendimiento general de un sistema.

En este artículo, compartiremos un pequeño pero útil script de shell para enviar un correo electrónico de alerta a uno o más administradores del sistema, si la memoria del servidor se está agotando.

Este script es particularmente útil para vigilar los VPS (servidores privados virtuales) de Linux con una pequeña cantidad de memoria, digamos de aproximadamente 1 GB (aproximadamente 990 MB).

  1. Un servidor de producción CentOS/RHEL 7 con la utilidad mailx instalada con un servidor de correo postfix en funcionamiento.

Así es como funciona el script alertmemory.sh: primero verifica el tamaño de memoria libre, luego determina si la cantidad de memoria libre es menor o igual a un tamaño especificado (100 MB para el propósito de esta guía), usado como punto de referencia para el tamaño de memoria libre menos aceptable.

Si esta condición es verdadera, generará una lista de los 10 procesos principales que consumen RAM del servidor y envía un correo electrónico de alerta a las direcciones de correo electrónico especificadas.

Nota: Deberá realizar algunos cambios en la secuencia de comandos (especialmente en la utilidad de remitente de correo, use los indicadores apropiados) para cumplir con los requisitos de distribución de Linux.

#!/bin/bash 
#######################################################################################
#Script Name    :alertmemory.sh
#Description    :send alert mail when server memory is running low
#Args           :       
#Author         :Aaron Kili Kisinga
#Email          :[email protected]
#License       : GNU GPL-3	
#######################################################################################
## declare mail variables
##email subject 
subject="Server Memory Status Alert"
##sending mail as
from="[email protected]"
## sending mail to
to="[email protected]"
## send carbon copy to
also_to="[email protected]"

## get total free memory size in megabytes(MB) 
free=$(free -mt | grep Total | awk '{print $4}')

## check if free memory is less or equals to  100MB
if [[ "$free" -le 100  ]]; then
        ## get top processes consuming system memory and save to temporary file 
        ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head >/tmp/top_proccesses_consuming_memory.txt

        file=/tmp/top_proccesses_consuming_memory.txt
        ## send email if system memory is running low
        echo -e "Warning, server memory is running low!\n\nFree memory: $free MB" | mailx -a "$file" -s "$subject" -r "$from" -c "$to" "$also_to"
fi

exit 0

Después de crear su script /etc/scripts/alertmemory.sh, hágalo ejecutable y enlace simbólico a cron.hourly.

# chmod +x /etc/scripts/alertmemory.sh
# ln -s -t /etc/cron.hourly/alertmemory.sh /etc/scripts/alertmemory.sh

Esto significa que la secuencia de comandos anterior se ejecutará cada 1 hora mientras el servidor esté en ejecución.

Sugerencia: puede probar si está funcionando según lo previsto, establecer el valor de referencia un poco alto para activar fácilmente el envío de un correo electrónico y especificar un pequeño intervalo de aproximadamente 5 minutos.

Luego continúe verificando desde la línea de comandos usando el comando gratuito provisto en el script. Una vez que confirme que está funcionando, defina los valores reales que le gustaría usar.

A continuación se muestra una captura de pantalla que muestra un ejemplo de correo electrónico de alerta.

¡Eso es todo! En este artículo, explicamos cómo usar un script de shell para enviar correos electrónicos de alerta a los administradores del sistema en caso de que la memoria del servidor (RAM) se esté agotando. Puede compartir cualquier pensamiento relacionado con este tema con nosotros a través del formulario de comentarios a continuación.