https://d226lax1qjow5r.cloudfront.net/blog/blogposts/create-a-disk-usage-monitoring-system-using-the-vonage-messages-api/disk-usage-monitoring-system.png

Creación de un sistema de supervisión del uso del disco mediante la API de Messages de Vonage

Publicado el July 20, 2023

Tiempo de lectura: 4 minutos

Introducción

El uso del disco es una métrica importante a seguir en la infraestructura de TI de cualquier organización. Sin conocer el uso del disco en un momento dado, una organización corre el riesgo de tener problemas de rendimiento en sus aplicaciones de producción en ejecución, así como un sobrecoste financiero debido a los costes repentinos incurridos en la actualización de la infraestructura existente.

Los proveedores modernos de infraestructuras en la nube, por ejemplo AWS, proporcionan sistemas de métricas avanzados con alarmas configuradas, pero tienen un coste adicional. El uso del disco es una métrica clave, y por una fracción del coste de los proveedores de la nube, puedes desarrollar tu propio sistema de monitorización del uso del disco completo con alertas. Genial, ¿verdad?

En esta guía, veremos exactamente cómo crear un sistema de monitoreo de uso de disco personalizado utilizando el lenguaje de programación Python y la API Messages API de Vonage. Ten en cuenta que podrás ejecutar este programa en tus servidores e incluso en tu máquina de desarrollo local.

Requisitos previos:

Configurar una aplicación de Vonage a través de la CLI de Vonage

  1. Instala la última versión de la CLI de Vonage en tu equipo de desarrollo: npm install --location=global @vonage/cli

  2. Obtén tu API_KEY y API_SECRET de Vonage visitando la página de configuración en el panel de control

  3. Configura tu Vonage API_KEY y API_SECRET del último paso: vonage config:set --apiKey=API_KEY --apiSecret=API_SECRET

  4. Crea una aplicación de mensajes vonage: Utilice el comando vonage apps:create y siga las instrucciones en el modo CLI interactivo como se indica a continuación:

✔ Application Name … <insert any appropriate name>
✔ Select App Capabilities › <select Messages>
✔ Create messages webhooks? › (y/N)
✔ Allow use of data for AI training? Read data collection disclosure - https://help.nexmo.com/hc/en-us/articles/4401914566036<select either y/N>

Nuestros objetivos

Queremos crear una aplicación ligera que haga lo siguiente:

  • Obtener nuestras estadísticas de uso de disco (ya sea en el servidor o en la máquina de desarrollo local). Nos basaremos en una librería Python psutil para darnos nuestras estadísticas de uso de disco.

  • Establecer un umbral arbitrario, por ejemplo, el 50% del uso del disco, que nos permite enviar notificaciones cuando se alcanza este umbral.

  • Personaliza un mensaje que nos alerte cuando el uso de nuestro disco supere nuestro umbral. Confiamos en la API de Vonage para que nos envíe este mensaje.

Pasos

  1. Cree un directorio de proyecto localmente: Por ejemplo, mkdir disk_usage_monitor && cd disk_usage_monitor.

  2. Dentro del directorio de nuestro proyecto, crea un entorno virtual para mantener las dependencias de nuestro proyecto separadas de las dependencias globales de Python: python3 -m venv .venv.

  3. Activamos nuestro entorno virtual mediante el siguiente comando: source .venv/bin/activate.

  4. Dentro del directorio de nuestro proyecto, cree un archivo requirements.txt con el comando touch requirements.txt y copie las siguientes dependencias del proyecto en el archivo:

vonage==3.5.1
python-dotenv==1.0.0
psutil==5.9.5
  1. Para instalar las dependencias en nuestro entorno virtual, ejecute el siguiente comando: pip3 install -r requirements.txt

  2. Crea el archivo .env que albergará nuestras variables de entorno utilizando el siguiente comando touch .env y copia el siguiente contenido:

Nota: Cambia YOUR_VONAGE_API_KEY, YOUR_VONAGE_API_SECRET, THE_SENDER_NUMBER y THE_RECIPIENT_NUMBER con la información que se encuentra en el Panel de Vonage.

# Vonage Credentials
VONAGE_API_KEY=YOUR_VONAGE_API_KEY
VONAGE_API_SECRET=YOUR_VONAGE_API_SECRET
VONAGE_SENDER=THE_SENDER_NUMBER
RECIPIENT=THE_RECIPIENT_NUMBER
  1. Añade un archivo llamado monitor.py utilizando el comando touch monitor.py al directorio de nuestro proyecto y pega el siguiente contenido:

Nota:

  • psutil.disk_usage de la biblioteca psutil de la biblioteca python, devuelve una tupla con nombre de la forma: sdiskusage(total=xxxxx, used=xxxxx, free=xxxx, percent=47.0). El valor porcentual es el que más nos interesa.

import psutil
import vonage
from dotenv import dotenv_values

# load your environment variables
config = dotenv_values(".env")

client = vonage.Client(key=config["VONAGE_API_KEY"],  secret=config["VONAGE_API_SECRET"])

# get disk usage statistics for home directory
stats = psutil.disk_usage("/")


# device: give it an easily identifiable name e.g. server 1.89.200.4
device = "local dev machine"

# send out a message indicating the disk usage level
client.messages.send_message(
	{
    	"channel": "sms",
    	"message_type": "text",
    	"from": config["VONAGE_SENDER"],
    	"to": config["RECIPIENT"],
    	"text": f"Your Disk Usage is at {stats[-1]} % on {device}.",
	}
)

Una vez hecho esto, puede ejecutar el archivo monitor.py utilizando el siguiente comando: python3 monitor.py.

  1. Queremos recibir notificaciones cuando se alcance un determinado umbral en nuestro dispositivo. Podemos modificar nuestro archivo monitor.py para que nos envíe alertas cuando se alcance un determinado umbral:

# our previous code remains as is on this section
...
# the disk usage threshold. Adjust this to an acceptable threshold of your choice
threshold = 50

# if disk usage is above given threshold, send out an sms alert
if stats[-1] > threshold:
	client.messages.send_message(
    	{
        	"channel": "sms",
        	"message_type": "text",
        	"from": config["VONAGE_SENDER"],
        	"to": config["RECIPIENT"],
        	"text": f"Your Disk Usage is at {stats[-1]} % on {device}. Delete some files soon to create some disk space!",
    	}
	)

Bono

En sistemas Unix, podemos configurar este programa como una tarea cron que se ejecute diariamente (o según la frecuencia que prefiera) para realizar comprobaciones periódicas del uso del disco:

Edite su entrada crontab en una sesión de terminal utilizando el siguiente comando sudo crontab -e y añada la siguiente entrada cron para que se ejecute diariamente a las 6:00 AM:

0 6 * * * cd <project_directory> && .venv/bin/python3 monitor.py

En Windows, podemos configurar nuestro programa como una tarea programada para que se ejecute diariamente siguiendo los siguientes pasos:

  1. Abra el programador de tareas desde el menú de inicio.

  2. En el panel de acciones, seleccione la opción crear tarea para crear una nueva tarea cron.

  3. En la ventana de creación de tareas que aparece en su pantalla, añada un nombre para la tarea en la pestaña general y deje las demás opciones por defecto.

  4. Seleccione la pestaña Disparadores y haga clic en Nuevo para añadir un disparador.

  5. En la ventana de inicio de tarea, seleccione diario en el panel lateral, y la hora de inicio como 06:00:00 AM por ejemplo. Deje las demás opciones por defecto.

  6. Crea una nueva acción desde el panel de acciones y en el panel de Nueva Acción, proporciona una ruta al ejecutable de python, que es el resultado de ejecutar el siguiente comando en un símbolo del sistema: where python.

  7. En la sección de añadir argumentos, añada el nombre del archivo, por ejemplo monitor.py.

  8. En la sección start in, añada la ruta al directorio del proyecto: C:\Users\<user>\path\to\project-directory.

Conclusión

Hemos creado un sistema completo de supervisión del uso del disco con un componente de alerta que se basa en las API de Vonage para enviar alertas por SMS.

Si te ha gustado o tienes alguna pregunta, puedes enviarme un mensaje a Correo electrónico o ver el ejemplo de código completo en GitHub.

Vonage siempre agradece la participación de la comunidad. No dudes en unirte a Vonage en GitHub y en Slack de la comunidad de Vonage.

Compartir:

https://a.storyblok.com/f/270183/400x400/d6b5221cb3/adrian-francis.png
Adrian Francis

Adrian is a problem solver and Python developer advocate. He works with various programming languages to solve engineering problems. Introduced to programming at age 16, Adrian has spent the last 8 years oscillating between backend development and automation. He lives in Nairobi and when not writing code he is most likely playing Call Of Duty or NBA 2K on his PlayStation, riding his bicycle or binge watching the latest series on Netflix.