Présentation des nouveautés de Glances 1.7
Date: 10/08/2013 | Catégories: Developpement,Open-source,Planet-libre,Systeme | Tags: 1.7,glances
De retour de congés avec dans ma besace une nouvelle version de Glances qui sera la dernière version majeure de la série 1.x. La prochaine version sera donc une 2.x avec notamment un gros travail initial de refactoring/découpage du code en modules car le script initial atteint une taille critique (plus de 4400 lignes) qui commence à le rendre difficilement évolutif.
Mais revenons donc à nos moutons pour parler de cette version de Glances 1.7:
Un peu d'histoire
Pour ceux d'entre vous qui découvrent Glances dans ce billet, c'est un projet que j'ai lancé maintenant il y a 2 ans pour palier à un manque dans les outils de supervision système. En effet, j'utilisais tout un tas de logiciels (netstat, top, ntop, ifstat, dstat...) pour investiguer les éventuels problèmes de performance sur un système d'exploitation. Mais aucun ne permettait une visualisation simple (via un terminal par une connexion SSH) et rapide (sur un seul écran) des statistiques nécessaires. Glances était née.
Cette version apporte, en plus de son lot de corrections de bugs, d'améliorations des performances et de la documentation de nouvelles fonctionnalité que nous allons détailler ensemble
Les "Monitored Processes List"
L'objectif qui se cache derrière cette nouvelle fonction est de pouvoir, en un clin d'oeil, voir l'état d'un ensemble de processus regroupés ensemble sous une même thématique.
Par exemple, sur un machine hébergeant un serveur Web dynamique, la supervision des processus "importants" peut se découper de la manière suivante:
- Serveur Nginx: processus NGinx
- Serveur PHP: processus PHP-FPM
- Serveur de caching des pages: processus Varnish
- Serveur de base de données: processus MySQL
- Serveur de caching des objets: processus Memcached
On a donc 5 objets à superviser. Dans Glances, la définition de ces objets est faite via le fichier de configuration glances.conf. Chaque objet est défini par:
- description: description des processus (au maximum 16 caractères, exemple: Serveur Web Nginx)
- regex: expression régulière permettant de regrouper les processus dans l'objet (exemple: .*nginx.*)
et optionnellement par:
- command: chemin complet vers un script qui sera executé par Glances à chaque rafraichissement (donc toutes les 3 secondes par défaut) et qui devra retourner une chaine de caractère d'une seule et unique ligne contenant des informations utiles pour cet objet. Attention à ne pas utiliser un script trop consommateur de ressources ou bien d'augmenter le temps de rafraichissement (option -t <secondes>)
- countmin: nombre minimal de processus attendus. Un message de warning sera affiché si le nombre de processus passe en dessous de cette valeur.
- countmax: nombre maximal de processus attendus. Un message de warning sera affiché si le nombre de processus passe en dessus de cette valeur.
Note: par défaut, Glances par sur le principe ou le groupe ne contient qu'un seul processus (donc countmin = countmax = 1)
Ainsi, la configuration de l'objet n°1 (on peut définir jusqu'à 10 objets) correspondant au serveur Web Nginx est donc la suivante:
[monitor] list_1_description=Serveur Web Nginx list_1_regex=.*nginx.* list_1_command=nginx -v list_1_countmin=1 list_1_countmax=4
Dans Glances, l'affichage des objets se fait de la manière suivante:
La couleur détermine l'état de l'objet. Si le nombre de processus:
- est compris entre countmin et countmax alors Glances affichera l'objet en vert (état OK)
- est différent de 0 mais non compris entre countmin et countmax alors Glances affichera l'objet en orange (état WARNING)
- est égal à 0 alors Glances affichera l'objet en rouge (état CRITICAL)
Comme pour toutes les autres statistiques importantes de Glances, le changement des états est logué.
En mode client/serveur la liste des items est défini au niveau serveur. Une nouvelle entrée dans l'API permet au client de récupérer la liste sur le serveur.
Supervision de la température des disques
Sur certain système, notamment les NAS, la température des disques est un critére important à surveiller. En partant de ce postulat, MendelGusmao a développé un module optionnel (activable en passant l'option -y au lancement de Glances) permettant d'aller récupérer la température des disques sur le daemon HDDTemp qui doit être lancé sur votre machine (voir ici les instructions d'installation de HDDTemp sur Debian/Ubuntu).
Sur ma machine (qui ne comporte qu'un seul disque dur), j'obtiens l'affichage suivant:
Il est bien sûr possible de définir les seuils d'alertes dans la section [hddtemperature] du fichier de configuration de Glances. Les valeurs par défaut sont: CAREFUL=45 / WARNING = 52 / CRITICAL = 60 (en ° celcus).
Information sur l'état de charge de la batterie
J'ai reçu plusieurs demandes d'utilisateur de Glances souhaitant superviser la capacité de la batterie (notamment dans le cas d'utilisation de nano PC autonomes). Premier problème, PsUtil ne remonte pas ce genre de statistiques (du moins dans la version actuelle 1.0). Après une rapide et non exhaustive recherche sur le net d'une bibliothéque Python permettant d'obtenir simplement les informations disponibles sur les systèmes Linux j'ai du me résoudre à coder moi même quelque chose. C'est donc ainsi que Batinfo est apparu il y a quelques semaines.
L'intégration de la librairie Batinfo a été ensuite une formalité et Glances propose donc, si une ou plusieurs batteries sont détectés, l'affichage du pourcentage de capacité restante au milieu du footer:
Limitation: cette statistique est uniquement disponible sur les systèmes Linux.
Une option pour un Glances "low CPU"
Le traitement de la liste comprenant les processus est un des facteur principaux de la consommation CPU de Glances. Sur certain système (notamment les nanos PC comme les Raspberry Pi), il est conseillé de réduire le taux de rafraichissement des statistiques pour faire baisser cette consommation CPU. Cependant, si vous avez besoin d'un taux de rafraichissement important sans avoir besoin du détail des processus alors l'option -r codé par J.Renner est faite pour vous. En lançant Glances avec l'option -r, vous allez désactiver tout les traitements des processus (liste dynamique, monitored process list...) et ainsi disposer d'un Glances faiblement consommateur de CPU.
Sur ma machine de développement, l'utilisation de cette option fait passer la consommation CPU de 2.9% à 0.3%.
Détail de la CPU au lancement de Glances
Une version précédante de Glances voyait apparaître une option (activable en appuyant sur la touche '1' dans Glances) permettatn d'afficher le détail de la CPU par coeur et non plus globalement. Une nouvelle option sur la ligne de commande (-1) permet de lancer par défaut ce mode d'affichage.
IPv6
Enfin un vrai support IPv6 pour le mode client serveur de Glances.
A tester simplement et localement avec:
glances -s -B ::0
pour lancer le serveur en mode IPv6 avec un bind sur toutes les interfaces.
Puis ensuite on lance le client sur le localhost IPv6:
glances -c ::1
Et puis...
Quelques autre petites nouveautés:
- Platform/architecture is more specific now
- Add support for local conf file
- Add a uninstall script
- Add getNetTimeSinceLastUpdate() getDiskTimeSinceLastUpdate() and getProcessDiskTimeSinceLastUpdate() in the API
- Add more translation: Italien, Chinese
Conclusion
Tout d'abord un grand merci aux principaux contributeurs de cette nouvelle version:
Ensuite, je compte sur vous pour tester cette nouvelle version qui est dès à présent disponible sous Pypi (les packages Debian, BSD, Windows et Mac ne devrait pas trop tarder).
Installation et mise à jour de Glances 1.7
Si vous avez installé Glances via Pypi (ce que je conseille), une mise à jour peut se faire simplement via la ligne de commande:
sudo pip install --upgrade Glances
Pour une installation toute fraîche (pour les nouveaux venus ayant les droits root):
sudo pip install Glances
ou la commande équivalente pour une installation locale (pour les nouveaux venus sans les droits root):
pip install --user Glances
Si vous préférerez utiliser les packages Debian/Ubuntu, Windows et Mac OS, il va falloir attendre un peu que mes "packagers" attitrés bossent un peu.
J'attend vos retours sur les commentaires suivants ou vos retour de bug/demande d'amélioration sur le site du dépôt officiel.