Présentation des nouveautés de Glances 1.7

Date: 10/08/2013 | Catégories: Developpement,Open-source,Planet-libre,Systeme | Tags: ,

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:

screenshot 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:

Dans Glances, l'affichage des objets se fait de la manière suivante:

monitored

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:

hddtemp

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:

battery

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.

per-cpu

IPv6

Enfin un vrai support IPv6 pour le mode client serveur de Glances.

A tester simplement et localement avec:

pour lancer le serveur en mode IPv6 avec un bind sur toutes les interfaces.

Puis ensuite on lance le client sur le localhost IPv6:

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:

Pour une installation toute fraîche (pour les nouveaux venus ayant les droits root):

ou la commande équivalente pour une installation locale (pour les nouveaux venus sans les droits root):

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.

  • Guest

    Soucis avec la mesure de températures via HDD (un des disques est un SSD sans capteur) :

    Traceback (most recent call last):
    File « /usr/local/bin/glances », line 9, in
    load_entry_point(‘Glances==1.7’, ‘console_scripts’, ‘glances’)()
    File « /usr/local/lib/python2.7/dist-packages/glances/glances.py », line 4461, in main
    stats.update()
    File « /usr/local/lib/python2.7/distpackages/glances/glances.py », line 1489, in update self.__update__(input_stats)
    File « /usr/local/lib/python2.7/dist-packages/glances/glances.py », line 1430, in __update__
    self.hddtemp = self.glancesgrabhddtemp.get()
    File « /usr/local/lib/python2.7/dist-packages/glances/glances.py », line 956, in get
    self.__update__()
    File « /usr/local/lib/python2.7/dist-packages/glances/glances.py », line 952, in __update__
    hddtemp_current[‘value’] = int(temperature)
    ValueError: invalid literal for int() with base 10: ‘UNK’

  • Pingback: Visto nel Web – 91 | Ok, panico()

  • Francois_1_

    Merci pour Glances, je viens de tester et c’est exactement l’outil que je cherchais 🙂
    De plus, je trouve la coloration automatique très pratique !
    Merci encore et bonne journée à toi.

    François.

  • gaston martel

    Ok, glances fonctionne bien sur ma version Debian Jessie, par contre la température « hddtemp » me pose quelques soucis, il ne fonctionne qu’en root après avoir démarré le service, j’ai pu voir la marque du disque et sa température, j’ai du louper un truc certainement.
    Cordialement.

  • unknown

    Bonjour à tous,
    Je vais surement paraitre bête en posant cette question…
    Mais la solution m’intéresse beaucoup! Bon je me lance, si j’ai bien compris la solution « Glances » doit être installé sur une machine. Mais il n’y aurait pas l’équivalence en portable? c’est à dire sans installation? De pouvoir trimbaler la solution et faire des tests de vérification sur d’autres machines sans installation?

  • Julien

    Bonjour à tous,

    Félicitation pour ce superbe outil de monitoring !
    Petite question :

    Je rencontre une erreur lors de l’exécution de glances :

    Traceback (most recent call last):
    File « /usr/bin/glances », line 5, in ?
    from pkg_resources import load_entry_point
    File « /usr/lib/python2.4/site-packages/pkg_resources.py », line 2479, in ?
    working_set.require(__requires__)
    File « /usr/lib/python2.4/site-packages/pkg_resources.py », line 585, in require
    needed = self.resolve(parse_requirements(requirements))
    File « /usr/lib/python2.4/site-packages/pkg_resources.py », line 483, in resolve
    raise DistributionNotFound(req) # XXX put more info here
    pkg_resources.DistributionNotFound: psutil>=0.5.1

    Je suis sous CentOS release 5.9

    J’ai bien install psutil (yum install psutils)

    Une idée ?

    Bonne journée !