
Creación de un Sidecar Python para supervisar el rendimiento del servidor
Mejore la supervisión de sus servidores con un complemento ligero de Python
En las arquitecturas modernas de nube y microservicios, los sidecars desempeñan un papel esencial al descargar tareas auxiliares de la aplicación principal. Un sidecar de Python puede ser especialmente útil para supervisar el estado del sistema sin sobrecargar la aplicación principal. Esta guía le guiará a través de la creación de un script Python ligero que recopila continuamente métricas de rendimiento del servidor, las registra y, opcionalmente, envía alertas cuando se superan los umbrales.

Un sidecar basado en Python es una forma sencilla pero eficaz de supervisar el rendimiento del servidor en tiempo real. Con extensiones como alertas y registro remoto, puede ayudar a garantizar la estabilidad del sistema y la resolución proactiva de problemas. Pruebe a integrarlo en su infraestructura para mejorar la capacidad de observación sin afectar a los servicios principales.
Escribí este script cuando trabajaba en un entorno en el que tenía que monitorizar un gran número de hosts que ejecutaban contenedores Docker (unos 600 X-Large que ejecutaban más de 30.000 contenedores), y no se me permitía utilizar software de monitorización existente, ni siquiera de código abierto. Pero, ese es el poder de Python, unas pocas líneas de código realmente pueden recorrer un largo camino.
Dependencias
El script se basa en la biblioteca psutil, que nos permite obtener métricas de rendimiento del sistema como la carga de la CPU, el uso de memoria y la actividad del disco. Instalar esta librería en algunas versiones de Linux puede ser complicado, pero puede que haya versiones anteriores disponibles para instalar el repositorio del gestor de paquetes de tu sistema operativo.
El script también se basa en la biblioteca de programación y utiliza hilos. De esta forma, el script se ejecuta continuamente, y la frecuencia con la que se desea comprobar determinadas condiciones puede ajustarse dentro del script.
Decidí utilizar Slack para las alertas, publicando mensajes en un canal concreto. También puede ajustar esto a sus propias necesidades. Esta versión en particular se ejecuta en una instancia EC2 en AWS, por lo que la URL de Slack se recupera de Parameter Store utilizando la biblioteca Boto3, una vez más, por favor, ajústala a tu situación.
Características
Obviamente quería que el script monitorizara el uso de Disco, CPU y Memoria, lo básico. Los umbrales y la frecuencia se pueden ajustar.
Uno de los procesos que se ejecutaba en algunos servidores tenía la mayor fuga de memoria que he encontrado nunca, alrededor de 1GB al día. Como resultado, el script también registra el uso de memoria a lo largo del tiempo para cada proceso que utiliza más de 2GB (una vez más, ajústelo a sus necesidades). Esta es una buena manera de identificar estas condiciones, usted puede grep el registro y ver el uso de la memoria crece con el tiempo.
También quería que el script comprobara las conexiones de red caídas, pero esto estaba generando demasiadas alertas, tal vez un signo de problemas mayores en el entorno.
La CPU puede ser difícil de controlar, un aumento temporal en el uso de la CPU en realidad puede estar bien, pero el uso de la CPU cerca de 90-100% durante mucho tiempo definitivamente no es bueno, a menos que tal vez usted está entrenando un modelo de IA. Una vez más, ¡ajústalo a tus necesidades!
El código Python
El código completo está disponible en GitHub en:
https://github.com/Christophe-Gauge/python/blob/main/sidecar_monitor.py
El horario para cada comprobación se establece cerca de la parte inferior del script, la sintaxis schedule.every(5).to(15).minutes significa que esta tarea se ejecutará en algún momento entre cada 5 y 15 minutos, añadiendo un poco de aleatoriedad para que todas las comprobaciones no ocurran al mismo tiempo, causando un pico de CPU no deseado.
schedule.every(5).to(15).minutes.do(run_threaded, Check_Disk_Usage)
schedule.every(15).to(45).minutes.do(run_threaded, Check_Memory_Usage)
schedule.every(10).to(20).minutes.do(run_threaded, Check_Required_Containers)
# schedule.every(4).to(6).hours.do(run_threaded, Check_Network_Drops)
schedule.every(1).to(2).hours.do(run_threaded, Check_CPU_Usage)
schedule.every(24).hours.do(resetSlackCount)
La función watch_and_notify_events se ejecuta como un hilo y es bastante potente. Se conectará al socket Docker y escuchará los eventos de los contenedores que quieras vigilar. Enviará mensajes Slack por cada cambio de estado de cualquiera de estos contenedores. Si tienes un contenedor "rebotante" que continuamente se bloquea y reinicia, esto generará muchas alertas, por lo que también hay un número máximo diario de notificaciones Slack, sólo para que no te ahogues en alertas.
Uso del script
Ejecución como servicio en segundo plano
Para ejecutar el script sidecar en segundo plano, utilice:
nohup python sidecar_monitor.py &
Funcionamiento como servicio
Para uso en producción, ejecútelo como servicio, utilice la configuración de su sistema operativo particular para ello.
Licencia
Este proyecto está bajo licencia GNU Lesser General Public License v3.0 (LGPL-3.0).
Descargo de responsabilidad
Este software se proporciona "tal cual", sin garantías de ningún tipo, expresas o implícitas, incluidas, entre otras, las garantías de comerciabilidad, idoneidad para un fin determinado y no infracción. En ningún caso los autores o los titulares de los derechos de autor serán responsables de cualquier reclamación, daño u otra responsabilidad, ya sea en una acción contractual, extracontractual o de otro tipo, que surja de, o esté relacionada con el software o el uso u otras operaciones con el software.
Tagged with:
Python notification linux networking