Construire un Sidecar Python pour surveiller les performances du serveur

Améliorez la surveillance de vos serveurs avec un Sidecar Python léger

C05348A3-9AB8-42C9-A6E0-81DB3AC59FEB
           

Dans les architectures cloud et microservices modernes, les sidecars jouent un rôle essentiel en déchargeant l'application principale de tâches auxiliaires. Un sidecar Python peut être particulièrement utile pour surveiller la santé du système sans alourdir l'application principale. Ce guide vous accompagnera dans la création d'un script Python léger qui collecte en continu les métriques de performance du serveur, les consigne et envoie éventuellement des alertes en cas de dépassement des seuils.

judy-beth-morris-D5bZ2wzgUkA-unsplash

Un sidecar basé sur Python est un moyen simple mais efficace de surveiller les performances d'un serveur en temps réel. Avec des extensions telles que les alertes et la journalisation à distance, il peut aider à assurer la stabilité du système et la résolution proactive des problèmes. Essayez de l'intégrer à votre infrastructure pour améliorer l'observabilité sans impacter les services de base.

J'ai écrit ce script lorsque j'ai travaillé dans un environnement où je devais surveiller un grand nombre d'hôtes exécutant des conteneurs Docker (environ 600 X-Large exécutant plus de 30 000 conteneurs), et je n'étais pas autorisé à utiliser les logiciels de surveillance existants, même les logiciels libres. Mais, c'est la puissance de Python, quelques lignes de code peuvent vraiment aller très loin.

Dépendances

Le script s'appuie sur la bibliothèque psutil, qui nous permet d'obtenir des mesures de performance du système telles que la charge du processeur, l'utilisation de la mémoire et l'activité du disque. L'installation de cette bibliothèque sur certaines versions de Linux peut parfois s'avérer délicate, mais il est possible que des versions plus anciennes soient disponibles pour installer le référentiel du gestionnaire de paquets de votre système d'exploitation.

Le script s'appuie également sur la bibliothèque de planification et utilise des threads. Ainsi, le script s'exécute en continu et la fréquence à laquelle vous souhaitez vérifier certaines conditions peut être ajustée dans le script.

J'ai décidé d'utiliser Slack pour les alertes, en postant des messages sur un canal particulier. Vous pouvez également l'adapter à vos propres besoins. Cette version particulière fonctionne sur une instance EC2 sur AWS, donc l'URL de Slack est récupérée à partir de Parameter Store en utilisant la bibliothèque Boto3, encore une fois, s'il vous plaît ajuster à votre situation.

Caractéristiques

Je voulais évidemment que le script surveille l'utilisation du disque, du processeur et de la mémoire, c'est-à-dire les éléments de base. Les seuils et la fréquence peuvent être ajustés.

L'un des processus en cours d'exécution sur certains serveurs présentait la plus grande fuite de mémoire que j'aie jamais rencontrée, soit environ 1 Go par jour. Par conséquent, le script enregistre également l'utilisation de la mémoire au fil du temps pour chaque processus utilisant plus de 2 Go (une fois encore, adaptez-le à vos besoins). C'est un bon moyen d'identifier ces conditions, vous pouvez greper le journal et voir l'utilisation de la mémoire augmenter au fil du temps.

Je voulais également que le script vérifie les connexions réseau interrompues, mais cela générait trop d'alertes, ce qui était peut-être le signe de problèmes plus importants dans l'environnement.

Le CPU peut être difficile à surveiller, une augmentation temporaire de l'utilisation du CPU peut être correcte, mais une utilisation du CPU proche de 90-100% pendant une longue période n'est certainement pas bonne, à moins que vous ne soyez en train d'entraîner un modèle d'intelligence artificielle. Une fois de plus, adaptez-vous à vos besoins !!!

Le code Python

Le code complet est disponible sur GitHub à l'adresse suivante :

https://github.com/Christophe-Gauge/python/blob/main/sidecar_monitor.py

La planification de chaque vérification est définie vers le bas du script, la syntaxe schedule.every(5).to(15).minutes signifie que cette tâche s'exécutera toutes les 5 à 15 minutes, ajoutant un peu d'aléatoire afin que toutes les vérifications ne se produisent pas toutes en même temps, provoquant un pic de CPU non désiré.

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 fonction watch_and_notify_events s'exécute en tant que thread et est assez puissante. Elle s'attache à la socket Docker et écoute les événements pour les conteneurs que vous voulez surveiller. Elle enverra des messages Slack pour chaque changement d'état de l'un de ces conteneurs. Si vous avez un conteneur "rebondissant" qui se plante et redémarre continuellement, cela va générer beaucoup d'alertes, donc il y a aussi un nombre maximum quotidien de notifications Slack, juste pour que vous ne vous noyez pas dans les alertes.

Utilisation du script

Exécution en tant que service d'arrière-plan

Pour exécuter le script sidecar en arrière-plan, utilisez :

nohup python sidecar_monitor.py &

Fonctionnement en tant que service

Pour une utilisation en production, il convient d'exécuter le système en tant que service et d'utiliser les paramètres de votre système d'exploitation pour ce faire.

Licence

Ce projet est placé sous la licence GNU Lesser General Public License v3.0 (LGPL-3.0).

Clause de non-responsabilité

Ce logiciel est fourni "tel quel", sans garantie d'aucune sorte, expresse ou implicite, y compris, mais sans s'y limiter, les garanties de qualité marchande, d'adéquation à un usage particulier et d'absence de contrefaçon. En aucun cas, les auteurs ou les détenteurs des droits d'auteur ne peuvent être tenus responsables de toute réclamation, de tout dommage ou de toute autre responsabilité, que ce soit dans le cadre d'une action contractuelle, délictuelle ou autre, découlant du logiciel, de son utilisation ou de toute autre opération liée au logiciel.

Commentaires publiés : 0

Tagged with:
Python notification linux networking