Glances: vos stats systèmes en un clin d’oeil

Il y a quelques jours, je vous avais parlé de Saidar, un logiciel permettant de regrouper dans un terminal|console un certain nombre de statistiques sur votre machine. Après quelques heures d'utilisations, j'ai identifié des choses qui ne me convenait pas:

  • pas d'affichage de la mémoire réellement disponible (comme on peut le trouver sur la deuxième ligne de la commande free -m)
  • pas de détail au niveau des processus
  • affichage des débits réseaux en octets/sec alors que j'utilise toujours les bits/sec
  • pas d'information sur l'espace disque disponible

Comme je ne trouvais pas la "killer application" dans ce domaine (même si il existe de très bon outils comme top), j'ai décidé de repartir d'une feuille blanche et de développer le logiciel Glances (licence LGPL) dont je vais vous présenter les grandes lignes dans ce billet.

Glances screenshot

Objectifs

Ils sont multiples:

  • prises en compte de mes griefs sur Saidar
  • accès à la fois depuis un environnement graphique (terminal) qu'à distance (console)
  • mise en avant des statistiques importantes à la compréhension d'un éventuel problème
  • affichage des processus triés de manière intelligente et automatique
  • développement en langage Python (je connais assez bien, c'est portable et facile à maintenir)

Installation

Après avoir téléchargé la dernière version stable disponible , il suffit de saisir les commandes suivantes:

[cc lang="bash"]

tar zxvf glances-version.tar.gz

cd glances-version

./configure

make

sudo make install

[/cc]

Notes: remplacer "version" par le numéro de version que vous avez téléchargé...

Glances a besoin de la librairie python-statgrab version 0.5 (ou supérieure) pour fonctionner correctement. Sous Ubuntu, il suffit de lancer la commande:

[cc lang="bash"]

sudo apt-get install python-statgrab

[/cc]

Sous Debian Squeeze, seule la version 0.4 de python-statgrab est disponible dans les dépôts. Il faut donc installer la version 0.5:

[cc lang="bash"]

sudo apt-get install libstatgrab-dev

wget http://ftp.uk.i-scream.org/sites/ftp.i-scream.org/pub/i-scream/pystatgrab/pystatgrab-0.5.tar.gz

tar zxvf pystatgrab-0.5.tar.gz

cd pystatgrab-0.5/

./setup.py build

sudo ./setup.py install

[/cc]

Utilisation

On lance le logiciel avec la commande:

[cc lang="bash"]

glances.py

[/cc]

Par défaut, le rafraîchissement des données se fait toutes les secondes. Il est possible de l'augmenter avec l'option -t. Par exemple pour avoir un taux de rafraîchissement de 5 secondes:

[cc lang="bash"]

glances.py -t 5

[/cc]

Une fois lancé, les touches suivantes sont actives:

  • 'a': passer le tri des processus en automatique (c'est le mode par défaut). Glances utilisera par défaut un tri décroissant sur l'utilisation CPU. Si une alerte sur la mémoire globale apparaît (mémoire occupé > 70%), le tri se fera alors par occupation mémoire.
  • 'c': forcer le tri des processus en fonction de leurs utilisations de la CPU.
  • 'm': forcer le tri des processus en fonction de leurs occupations mémoire.
  • 'q': quitter le programme (on peut également utiliser CTRL-C).

Si votre terminal|console est compatible avec un affichage couleur, alors les statistiques importantes (à mes yeux...) sont mises en avant de la manière suivante:

  • VERT: le compteur est < 50%
  • BLEU: le compteur est > 50% et < 70%
  • VIOLET: le compteur est > 70% et < 90%
  • ROUGE: le compteur est > 90%

Limitations

L'API python-statgrab comporte actuellement un bug pour la récupération des statistiques sur les espaces disques. Dès que ce dernier sera corrigé, je pense inclure ces statistiques dans l'espace libre en bas à gauche de la fenêtre de Glances.

Un problème ?

Si vous rencontrez un problème lors de l'installation ou de l'utilisation de Glances:

  1. Vérifié que le problème n'est pas référencé
  2. Saisir le nouveau bug dans le tracker GitHub

Lors de la saisie du bug merci de fournir les informations suivantes:

  • Système d'exploitation (nom, version)
  • version de Python (python -v)
  • version de la librairie statgrab (apt-cache show statgrab)
  • version de la librairie python-statgrab (apt-cache show python-statgrab)

Contribuer ?

Le logiciel est distribué sous licence libre LGPL. Il est disponible dans le GitHub suivant: https://github.com/nicolargo/glances

Si vous trouvé ce logiciel intéressant et que vous souhaitez vous impliquer, j'ai besoin de vous sur les sujet suivants:

  • packaging de Glances pour Debian, Ubuntu (PPA), Fedora, Redhat, Free|Open|NetBSD...
  • amélioration/optimisation du code (lire le billet contribuer à un projet hébérgé sur GitHub)
  • inclure la vérification de la présence de la librairie python-statgrab lors du .configure (j'ai un bug dans le configure.ac)
  • 'Man' page
  • Afficher une fenêtre d'aide avec les touches disponibles quand on clique sur F1
  • Corriger le bug de python-statgrab afin que l'on puisse inclure les statistiques sur les systèmes de fichiers
  • ...

J'attends vos retours. :)

  • frsdesign

    Salut, cool merci, ça a l’air super, j’avais aussi repéré ce problème de mémoire sur saidar.

    J’ai suivi la procédure d’install sur ubuntu 11.04, et le résultat est… problèmatique, je te laisse voir ça,

    http://pastebin.com/KHBYSUrF

    Bonne soirée,

    @+

    • http://gregoirepineau.fr Grég

      Il vaut mieux utiliser le bugtracker qui est sur github, plutot que de passer par les commentaires de ce billet ;)https://github.com/nicolargo/glances/issues/new

      • frsdesign

        Exact sorry :)

    • http://www.nicolargo.com NicoLargo

      Bizzare… Peux tu ouvrir un bug sur GitHub en précisant les informations suivantes:
      - version de Python (python -v)
      - version de la librairie statgrab (apt-cache show statgrab)
      - version de la librairie python-statgrab (apt-cache show python-statgrab)

      Merci !

  • http://www.sciunto.org François

    Je m’apprêtais à l’empaqueter pour Arch, mais c’était déjà fait. J’ouvre un petit rapport pour amélioration. ;)

  • Erufu

    Salut,

    Ton programme me tente bien. Je l’aurais bien installé et maintenus sur AUR pour Archlinux.

    Mon soucis est que je n’arrive même pas à l’installer …

    J’ai installé les paquets libstatgrab et pystatgrab.
    $ ./configure pas de soucis.
    $ make pas de soucis
    # make install : “Error : Can not init the libstatgrab library”

    J’ouvre un bug sur le bugtracker ? ou je suis un boulet et j’ai oublié un truc …

    • http://www.nicolargo.com NicoLargo

      As tu installé les pre-requis ?

      • erufu

        Oui je les avaient installés. Bizarrement avec le paquet AUR pas de soucis .. enfin si l’erreur s’affiche quand même mais le programme fonctionne.

        C’est pas grâve je vais regarder le PKGBUILD pour comprendre ce qu’il me manquait.

        En tout cas programme très pratique merci à toi :)

        • Erufu

          En fait le PKGBUILD modifie juste le
          #!/usr/bin/python2
          en
          #!/usr/bin/env python2
          sans doute une particularité de Arch je connais pas le python :$

          Par contre y’a toujours une erreur lors de la compilation même si le programme fonctionne.

          • http://www.nicolargo.com NicoLargo

            Peux tu remonter l’erreur dans le bug tracker de Github ?

  • Erufu

    Ok j’ai même pas pensé à regarder si il y était … ba je vais utiliser le paquet ça ira sans doute mieux …

  • http://twitter.com/Xat_xD Jérémy Descamps

    Salut, je peux m’occuper du Packaging RPM 32 et 64 bits !

    • http://www.nicolargo.com NicoLargo

      Super ! Merci bien.

  • http://www.jeremy-descamps.fr Jérémy Descamps

    Sinon c’est une superbe idée de regrouper tout ça au sein d’une même commande :)

    • http://www.nicolargo.com NicoLargo

      J’en avait un peu mare de taper toujours les mêmes commandes quand je cherche un pb sur une machine… C’est en étant fainéant que l’on créé le mieux :)

  • choopooyl

    Vraiment cool je vais checker ca.
    En revanche en regardant ton code source je remarque que tu ne suis pas le Style code Python PEP notamment pour le 79 charcters par ligne.

    Si je trouve un peu de temps je pourrais voir pour en faire un package debiam.

    • http://www.nicolargo.com NicoLargo

      Avec plaisir pour le packaging Debian.

      Pour la PEP sur 79 caractères c’est vrai que k’ai un peu de mal surtout quand la ligne commence par 3 tabulations… :)

  • http://blog.yannickjaquier.com Yannick

    Bonjour,

    “je vous avez parler”, je suis pas expert mais y’a un truc qui me gène…

    Sinon vous n’êtes pas en train de ré-developper nmon ?

    Yannick.

    • http://www.nicolargo.com NicoLargo

      1) Corrigé.

      2) Le pb avec nmon c’est qu’il est trop verbeux pour moi. Il est impossible d’avoir dans une même console (80×24) toutes les statistiques que je trouvent intéressantes. C’est bien pour cela que j’ai développé Glances.

  • Edouard

    Je peux m’occuper du package fedora/rh, histoire de le voir dans les dépôts officiels.

    • http://www.nicolargo.com NicoLargo

      Merci !

    • Edouard

      Premier petit retour pour le packaging, ce serait bien si le git proposait une url pour récupérer glances sous la forme glances-version.tar.gz. Pour l’instant il n’y a qu’un tag qui s’appelle v1.0.zip ce qui est plutot bizare?

      Autre point, le make install copie les fichiers de docs, j’ai jamais vu ça c’est d’habitude à la discression du packageur non? En tout cas le RPM est quasi prêt.

      • http://www.nicolargo.com NicoLargo

        Sur la page https://github.com/nicolargo/glances/tags tu as la possibilité de récupérer l’archive au format tar.gz:
        https://github.com/nicolargo/glances/tarball/v1.0

        Le résultat donne un fichier du style:
        nicolargo-glances-v1.0-0-gf37c1a3.tar.gz

        • Edouard

          ok je l’ai récuperer comme ça c’est un peu mieux en effet.
          Par contre le nom glances ya un rapport avec l’outil de monitoring HP Glance? Par ce que j’ai tout de suite pensé à ça

          • http://www.nicolargo.com NicoLargo

            Rien a voir, c’est pour cette raison que j’ai ajouté un s :)

          • Edouard

            Pour en revenir à la doc (les fichiers posés dans /usr/doc/glances), c’est normal que le configure ne prenne pas en compte le –docdir pour changer ça justement?

          • Edouard

            Il y a quelques fautes dans le fichier README, dans la description:

            informations => toujours au singulier en anglais (comme people, data, advice, etc)

            developped => developed

            Et il manque le man page, bref 3x rien :)

  • http://www.nicolargo.com NicoLargo

    Pour info, je viens de taguer la version 1.1 qui corrige quelques problèmes et apporte l’affichage des I/O sur les disques.

    Le changelog:

    Version 1.1
    ===========

    * Add disk IO monitoring
    * Add caption
    * Correct a bug when computing the bitrate with the option -t
    * Catch CTRL-C before init the screen (Bug #2)
    * Check if mem.total = 0 before division (Bug #1)

    • Edouard

      Je ne vois que la version 1.1.1, que j’ai récupéré via le tar.gz du tag. Dans celle-ci beaucoup de script/fichiers sont des liens symboliques vers des fichiers du système, bref c’est pas portable (genre le install.sh pointe vers /usr/share/automake-1.11/install-sh
      C’est normal?

  • Pingback: Nicolargo : Glances: vos stats systèmes en un clin d’oeil | Actualités de l'open source | Scoop.it

  • http://www.nicolargo.com NicoLargo

    Cela devrait être plus propre avec la nouvelle version 1.1.2. Désolé pour ces changements mais je débute avec GitHUB :)

    • http://twitter.com/Xat_xD Jérémy Descamps

      Il existe toujours les liens symboliques dans la version 1.1.2 ;)

  • badmaniak
  • Edouard

    Pour l’acceptation dans les dépôts fedora il faudrait régler les points suivants:
    - le git doit être normalement en mesure de nous fournir les sources dans une archive plus standard du style glances-.tar.gz ou bz2. Aujourd’hui on obtient qu’une archive v sans extension…
    - Dans cette archive il faudrait que le répertoire contenant les sources s’appelle plutôt glances- plutôt que nicolargo-glances-. C’est surtout le githash qui pose problème.
    Ces points sont pour faciliter la construction automatique des paquets.

    Il y a aussi le shebang que tu peux retirer de /usr/lib/python2.7/site-packages/glances/glances.py vu qu’il n’a pas vocation à être executable.

    Dans le README tu as mis tools au pluriel, au singulier ce serait mieux je pense. A moins que tu penses fournir d’autres outils à terme?

    On me suggère aussi qu’il serait mieux si l’executable principal s’appelait juste glances et pas glances.py

    As tu besoin d’aide pour le man? Et/ou pour le reste?

    Tout les points que j’ai cité sont dans la review du paquet pour Fedora:
    https://bugzilla.redhat.com/show_bug.cgi?id=760045

    Sinon aujourd’hui j’essaye de le faire tourner sur rh6

    • Edouard

      zut les noms de fichiers il manque le -[version] j’avais mis des signes inférieurs supérieurs ils ont été mangé :( Enfin bref tout est dans le rapport de bug chez RH. Bonne journée.

    • http://twitter.com/Xat_xD Jérémy Descamps

      Salut,

      j’allais m’occuper du packaging RHEL6 pour les sources 1.1.2 mais j’attends la correction des symlinks dans la tarball, en plus de tes autres remarques notamment sur le nom de la tarball avec un nom standard, un dossier également avec un nom standard et un hébergement avec un lien direct serait mieux.

  • Edouard

    Désolé c’est encore moi. Dans les stats réseaux il n’y aurait pas un problème d’unité? Il m’indique 60Kbps alors que je suis plutôt à 600Kbps (vérifier avec iptraf). Est-ce que se serait pas 60KBps qu’on devrait lire?

    • Edouard

      je viens aussi de remarquer que le tag v1.1.2 contient en fait les sources de la 1.1.1. Il y a vraiment un problème avec les tags là :(

    • Edouard

      D’après le man de sg_get_network_io_stats c’est bien en bytes (octets).

      • http://www.nicolargo.com NicoLargo

        Je viens de mettre en ligne la version 1.1.3 qui corrige le pb de débit en Kbps, les corrections dans le fichier README et les liens.

        J’ai également mis à dispo un fichier sous la forme:

        https://github.com/downloads/nicolargo/glances/glances-1.1.3.tar.gz

        qui génère un répertoire glances-1.1.3

        Tu dois donc pouvoir finaliser le packaging.

        Je suis preneur d’un contributeur sur le man avec plaisir :)

        Merci de ton aide !

        • Edouard

          c’est beau! Tout passe niquel merci :)

          • http://twitter.com/Xat_xD Jérémy Descamps

            Très propre ton .spec ;)

  • Edouard

    Super je test ça dès que possible. Jérémy on peut gérer le paquet à 2, tu t’es mis en cc du bug de review request? Et faudrait faire une demande pour avoir pystatgrab dans epel.

    • http://twitter.com/Xat_xD Jérémy Descamps

      Je viens de me mettre en cc mais je sais pas si c’est nécessaire qu’on soit 2 pour faire la compilation étant donné que le .spec ne devrait pas (ou peu) changer.

      Comment s’y prendre pour ajouter un package dans un dépôt officiel ou semi-officiel (comme EPEL) ?

      • Edouard

        Pour la compilation non c’est sûr, mais pour maintenir le spec, le faire évoluer en fonction des mises à jour là on peut être plusieurs. En gros on a accès au même GIT pour ce paquet.
        Sur ce GIT ya les différentes branches master, F17, F16 etc et on peut demander EPEL6, EPEL5 etc. Chaque branche contient le spec et les sources.

      • Edouard

        c’est quoi ton login FAS?

        • http://twitter.com/Xat_xD Jérémy Descamps

          J’en ai pas Edouard

        • http://twitter.com/Xat_xD Jérémy Descamps

          Je vais en créer un ASAP. Pour avoir pystatgrab dans EPEL, faudrait le packager pour RHEL. Je peux m’en occuper.

          • Edouard

            pystatgrab est déjà dispo pour Fedora, il faut juste demander à ce que son mainteneur fasse la branche pour EPEL

  • http://twitter.com/Xat_xD Jérémy Descamps

    Edouard, voici mon FAS : xat

  • http://www.sciunto.org François

    Grace au paquet git, j’ai créé le paquet stable pour AUR
    https://aur.archlinux.org/packages.php?ID=54666

    • http://www.nicolargo.com NicoLargo

      Super ! merci bcp.

  • http://blog.crifo.org/ Dju

    yop, j’ai rencontré quelques problemes de dépendance sous une debian squeeze à jour..

    tout d’abord:
    aptitude install pkg-config

    ensuite, pour compiler la python-statgrab 0.5, j’avais plein d’erreur (missing python.h etc…)
    aptitude install python-dev

    et la c’était bon, la compil s’est passé, puis l’install de glances et ça roule :)

  • http://twitter.com/ladyfatiha Fatiha

    Je viens de télécharger glances sous Linux Fedora 15. Pour la librairie python, j’ai procédé ainsi pour l’install: yum install pystatgrab.x86_64
    Et pour le lancement de l’application, je n’ai pas eu besoin de faire de ./configure, make et make install. J’ai juste lancé python glances.py

    Merci pour ce programme !

    • Edouard

      pour installer glances sous fedora:
      yum install –enablerepo=updates-testing glances

      d’ici quelques jours yum install glances suffira

      • http://www.leblogdefatiha.com Fatiha

        Merci Edouard.

  • http://www.nicolargo.com NicoLargo

    La version 1.2 est en ligne avec les améliorations suivantes:

    * Sélection dynamique des statistiques à afficher selon la taille du terminal
    * Amélioration de la réactivité
    * Nettoyage du code

    A télécharger ici: https://github.com/nicolargo/glances/downloads

  • Sylvain

    Bonjour !

    Pas besoin de publier ce commentaire.
    J’ai eu très ma laux yeux quand j’ai lu :
    “je vous avez parlez”
    j’ai parlé (parlé = participe passé)
    Remplacer par un verbe du troisième groupe si vous avez des doutes, “prendre” par exemple. Donc :
    J’ai pris – j’ai parlé
    Il veut prendre – Il veut parler.
    J’ai – présent
    J’avais – imparfait
    DONC
    J’avais parlé
    Je vous avais parlé. OK ? ;)

    • http://www.nicolargo.com NicoLargo

      Tiens justement je cherche un contributeur pour relire mes billets avant publication. Volontaire ?

  • http://www.nicolargo.com NicoLargo

    La version 1.3 est en ligne avec:

    Version 1.3
    ===========

    * Add file system stats (total and used space)
    * Adapt unit dynamicaly (K, M, G)
    * Add man page (Thanks to Edouard Bourguignon)

    ====

    • Edouard

      gros plantage avec la 1.3:
      Traceback (most recent call last):
      File “/usr/bin/glances”, line 704, in
      main()
      File “/usr/bin/glances”, line 688, in main
      screen.update(stats)
      File “/usr/bin/glances”, line 404, in update
      self.display(stats)
      File “/usr/bin/glances”, line 390, in display
      screen.displayFs(stats.getFs(), net_count + disk_count)
      File “/usr/bin/glances”, line 557, in displayFs
      self.term_window.addnstr(self.fs_y+1+mounted, self.fs_x, fs[mounted]['mnt_point'], 8)
      _curses.error: addnstr() returned ERR

      • http://www.nicolargo.com NicoLargo

        Strange, on dirait que Glances a planté sur un affichage en dehors de la fenêtre.

        Peux tu loguer le bug sur le GitHub en précisant:
        - version de Python (python -v)
        - version de la librairie statgrab (apt-cache show statgrab)
        - version de la librairie python-statgrab (apt-cache show python-statgrab)
        - de quel terminal as tu lancé la commande (console, terminal et si possible la taille du terminal)

        Thx

  • Edouard

    Le problème vient de là:
    for mounted in range(0, min(11+(screen_y-self.term_h), len(fs))):
    J’ai un peu de mal à comprendre les 2 derniers arguments. Le 2e semble calculer le nombre de lignes utilisables. Mais le pas de la longueur du tableau fs là je vois pas. et min ça sert à quoi?

    • http://www.nicolargo.com NicoLargo

      C’est pour calculer le nombre de filesystem a afficher en fonction de la taille de ta fenêtre. Plus la taille est grande plus il est possible d’afficher d’information.

      On prends donc la valeur minimum (min) entre le nombre de filesystem (fs) et une valeur standard (11+(screen_y-self.term_h)).

      Je ne vois pas pourquoi cela plante chez toi… J’ai testé sur pas mal de machines différentes. Si tu connais un peu il serait intéressant de tracer la valeur de len(fs).

      • http://www.nicolargo.com NicoLargo

        La version 1.3.1 devrait mieux marcher…

  • spurnelle

    Dommage qu’il faut python 2.6, redhat 5.7 propose python 2.4.3