À la découverte de Glances 2.4

Magazine
Marque
GNU/Linux Magazine
Numéro
182
Mois de parution
mai 2015
Spécialité(s)


Résumé
Glances est un logiciel de supervision système dont l'objectif est d'offrir aux utilisateurs une vue synthétique mais néanmoins complète de l'état de leurs machines. Nous allons dans cet article présenter les fonctions de base de Glances ainsi que les nouveautés de la version 2.4.

Body

La genèse de Glances vient d'un simple constat personnel. Il existe, sur nos systèmes d'exploitation modernes, pléthore de logiciels de supervision des différents composants de nos machines : un pour la cpu/charge/mémoire (top), un pour le trafic transitant sur les interfaces réseaux (ifstat) et encore un autre pour vérifier les espaces disques disponibles (df)… Cependant, aucun ne peut répondre rapidement à la question que tout administrateur système, réseau ou simple développeur s'est posé un jour : « Mais que ce passe-t-il (WTF) sur cette machine ? ».

En partant de ce postulat, les objectifs affichés de Glances sont les suivants :

- contrôler dans une interface unifiée l'ensemble des paramètres sensibles ayant un impact sur les performances : CPU, mémoire vive, mémoire disque, charge, débits réseaux, débits et espaces disques, capteurs de température, liste et état des processus...

- superviser sa machine locale (on parle ici du mode standalone) quel que soit le système d'exploitation utilisé : GNU/Linux, BSD, Mac OS ou bien Windows ;

- superviser ses machines distantes (mode « client/serveur ») ;

- en cas de problèmes, alerter l'utilisateur de la manière la plus claire possible ;

- proposer des interfaces utilisateur de type console (Curse), Web (AngularJS) et API (XML/RPC et Restful) ;

- exporter les statistiques vers d'autres logiciels (CSV, StatsD, InfluxDB) ;

- offrir un logiciel libre (licence LGPL v3) et évolutif (système de modules).

Glances est actuellement maintenu par Alessio Sergi (@asergi) et votre serviteur (@nicolargo) et dispose d'une communauté active d'une dizaine de contributeurs.

1. Installation de Glances

Sous GNU/Linux, le plus simple est d'utiliser le script d'installation automatique (actuellement uniquement disponible pour Ubuntu/Debian et Fedora/CentOS) :

# curl -L http://bit.ly/glances | /bin/bash

L'avantage de ce script par rapport à l'utilisation de Pypi (https://pypi.python.org/pypi/Glances) est une installation exhaustive des dépendances pour l'ensemble des fonctions.

Pour les autres systèmes d'exploitation et les autres méthodes d'installation, le mieux est de consulter la documentation officielle [1].

2. Utilisation basique

Maintenant que Glances est installé sur votre machine, vous pouvez lancer le mode standalone grâce à la commande suivante :

$ glances

L'interface par défaut est la console/terminal visible en figure 1.

figure_01

Fig. 1: Interface par défaut en mode console.

Comme vous pouvez le voir en redimensionnant votre terminal, l'interface est « curse responsive ».

Commençons par le tour du propriétaire. La première ligne donne les informations générales sur la machine (nom de l'hôte, système d'exploitation, adresse IP principale et uptime).

Viennent en dessous les statistiques principales (CPU, mémoires et charge) dont le nombre et la précision sont dépendantes du système (par exemple, on ne dispose pas des statistiques de charge sur un système Windows).

Sur la gauche on trouve les informations secondaires (débits des interfaces réseaux, débits d'entrée/sortie des disques, état du RAID (non présent sur ma copie d'écran), espaces disques et températures des capteurs).

Au centre, on retrouve les statistiques sur les conteneurs Docker, les processus à surveiller et la liste des processus.

Par défaut, la liste des processus est triée automatiquement en fonction de l'alerte globale courante. Si tout est normal sur votre système, un tri par consommation CPU sera appliqué. En cas de saturation de la RAM c'est un tri par pourcentage d'occupation de la mémoire qui sera utilisé. Il est bien sûr possible d'opter pour un tri statique des processus (pour cela cliquer sur la touche <h> pour voir la liste des touches raccourci-clavier).

Il est également possible de configurer une liste ou un ensemble de processus à surveiller : ils seront affichés avant la liste des processus. Par exemple, pour surveiller l'ensemble de vos processus Python, il suffit d'ajouter les lignes suivantes dans votre fichier de configuration :

[monitor]

# Define the list of processes to monitor

# *** This section is optional ***

# The list is composed of items (list_#nb <= 10)

# An item is defined:

# * description: Description of the processes (max 16 chars)

# * regex: regular expression of the processes group to monitor

# * command: (optional) full path to shell command/script for extended stat

# Use with caution. Should return a single line string.

# Only execute when at least one process is running

# By default display CPU and MEM %

# Limitation: Do not use in client / server mode

# * countmin: (optional) minimal number of processes

# A warning will be displayed if number of process < count

# * countmax: (optional) maximum number of processes

# A warning will be displayed if number of process > count

list_1_description=Python prg

list_1_regex=^python.*

Dans cette configuration, le groupe nommé Python prg est défini par l'expression régulière ^python.*, c'est à dire toutes les commandes commençant par le mot clé python.

Enfin en bas de l'écran, en plus de l'heure de la machine, on peut consulter l'historique des 10 dernières alertes jugées sévères ou critiques.

Par défaut, le temps de rafraîchissement est de 3 secondes. Vous pouvez le modifier en utilisant l'option -t de la ligne de commandes. L'augmentation de cette valeur aura un impact positif sur la consommation CPU de Glances.

L'affichage des statistiques utilise un code de couleur standardisé afin d'identifier rapidement les problèmes : du vert, quand tout va bien, au rouge, dans le cas d'une valeur critique. Ces seuils sont configurables dans le fichier /etc/glances/glances.conf (ou dans ~/.config/glances/glances.conf).

En cas de problème lors de l'utilisation de Glances, il peut être utile de consulter le fichier de log (par défaut sous /tmp/glances.log). Il est possible de passer en mode debug grâce à l'option -d.

2. Le mode client/serveur

Pour superviser à distance une machine sans avoir à utiliser une connexion SSH, il est possible de lancer Glances en mode serveur avec la commande :

$ glances -s

Le processus va se mettre en attente d'une connexion cliente (en limitant sa consommation CPU pendant cette période).

Le poste client doit lancer la commande :

$ glances -c <serveur>

ou <serveur> est à remplacer par le nom ou l'adresse IP du serveur.

L'affichage sera identique au mode standalone avec uniquement un indicateur de connexion entre le client et le serveur en plus, en haut à gauche de l'écran, comme vous pouvez le voir sur la figure 2.

figure_02

Fig. 2: Affichage en mode serveur.

Le serveur est en écoute sur toutes les interfaces réseaux sur le port TCP/61209. Ce port doit donc être joignable à partir du ou des postes clients (attention à la configuration des firewalls). La consommation réseau entre le serveur et un client est d'environ 30 Kbps.

Une nouvelle fonction apparue dans la version 2.2 permet de disposer d'un point central pour superviser un ensemble de serveurs Glances. Quand le client est lancé avec l'option --browser, il va afficher la liste des serveurs pré-configurés dans le fichier glances.conf ainsi que les serveurs Glances détectés sur le même réseau local (en utilisant le protocole de découverte automatique ZeroConf [2]) :

$ glances --browser

On obtient un menu où l'on peut sélectionner le serveur à superviser (voir figure 3).

figure_03

Fig. 3: Menu de sélection du serveur à superviser.

Il est également possible d'utiliser le client Glances pour récupérer les statistiques systèmes à partir d'un simple serveur SNMP. Ainsi, si le client n'arrive pas à trouver un serveur Glances, il va essayer de basculer ses requêtes vers le serveur SNMP. Bien que ce mode ne soit pas aussi complet qu'un serveur Glances, il permet de superviser des machines appliances comme des routeurs Cisco, des serveurs VmWare ESXi ou bien des SAN NetApps.

Pour forcer l'utilisation du mode SNMP, il faudra utiliser la commande :

$ glances -c <serveur SNMP> --snmp-force

3. Interface Web

Les besoins en mobilité devenant de plus en plus grand, la supervision des systèmes doit adapter ses interfaces utilisateurs. Ainsi, Glances dispose d'une interface Web permettant de surveiller à distance ses machines à partir de n'importe quel PC disposant d'un navigateur Web, d'une tablette ou d'un téléphone portable.

L'interface Web de la version 2.4 a été entièrement repensée par deux contributeurs (Nicolas Hart et Sylvain Mouquet) et se base maintenant sur des technologies AngularJS et responsive design.

Pour lancer Glances en mode serveur Web :

$ glances -w

Glances web server started on http://0.0.0.0:61208/

En saisissant l'URL http://<serveur>:61208/ dans un navigateur, on arrive sur l'interface Web dynamique présentée en figure 4.

figure_04

Fig. 4: Interface Web.

La même interface à partir d'un smartphone est visible en figure 5.

figure_5

Fig. 5: Interface Web depuis un smartphone

Le serveur Web est en écoute sur toutes les interfaces réseaux sur le port HTTP/61208. Ce port doit donc être joignable à partir du ou des postes clients (attention à la configuration des firewalls).

4. Les APIs

Une des grandes valeurs ajoutées de Glances par rapport aux autres logiciels équivalents est la mise à disposition d'APIs permettant, dans vos infrastructures, l'exploitation des statistiques systèmes.

Glances propose deux interfaces pour son API :

- XML/RPC : voir la documentation sur le Wiki (https://github.com/nicolargo/glances/wiki/The-Glances-2.x-API-How-to)

- RESTFUL/JSON : documentation également sur le Wiki (https://github.com/nicolargo/glances/wiki/The-Glances-RESTFULL-JSON-API)

Voici un exemple d'utilisation de l'API RESTFUL/JSON à partir de la ligne de commandes. On commence par lancer Glances en mode serveur Web :

$ glances -w

Glances web server started on http://0.0.0.0:61208/

Puis on demande la consommation CPU à l'API RESTful (/api/2/cpu) :

$ curl -s http://0.0.0.0:61208/api/2/cpu | json_pp

{

"system" : 0.5,

"guest_nice" : 0,

"idle" : 97,

"user" : 2.4,

"softirq" : 0,

"nice" : 0,

"guest" : 0,

"steal" : 0,

"iowait" : 0,

"total" : 3,

"irq" : 0

}

On peut demander également la consommation mémoire (/api/2/mem) :

$ curl -s http://0.0.0.0:61208/api/2/mem | json_pp

{

"inactive" : 1990729728,

"total" : 8273547264,

"available" : 4227063808,

"used" : 4046483456,

"percent" : 48.9,

"free" : 4227063808,

"active" : 3854503936,

"cached" : 1724342272,

"buffers" : 578723840

}

Et il est possible de cibler une statistique directement par l'API (/api/2/mem/used) :

$ curl -s http://0.0.0.0:61208/api/2/mem/used | json_pp

{

"used" : 4113895424

}

5. Les modules d'export des données

Au vu des architectures logicielles actuelles, un système de supervision fermé n'a plus de sens. Glances intègre donc nativement des modules d'exports des données. Depuis la version 2.3, Glances propose les modules suivants : fichier CSV, Statsd et InfluxDB. Nous allons nous focaliser dans ce chapitre sur ce dernier module.

InfluxDB est une base de données NoSQL de type temps/valeurs, optimisée pour le stockage des données de métrologie que vous pouvez coupler avec Grafana, un client Web permettant de créer des tableaux de bord graphiques.

La configuration du couple InfluxDB/Grafana sort du cadre du présent article mais il existe de nombreuses références sur le Web. Je pars donc du principe que vous disposez d'un serveur InfluxDB fonctionnel avec une base nommée glances.

Pour connecter Glances à InfluxDB, il faut vérifier que votre fichier de configuration de Glances (glances.conf) contient la section suivante :

[influxdb]

host=localhost

port=8086

user=root

password=root

db=glances

On lance ensuite Glances avec l'option d'exportation InfluxDB (--export-influxdb) :

$ glances --export-influxdb

Le résultat dans un tableau de bord Grafana (template fourni avec Glances [6]) est présenté en figure 6.

figure_06

Fig. 6: Tableau de bord Grafana.

6. Focus sur les nouveautés de la version 2.4

Glances utilise une architecture modulaire. Ainsi, chaque groupe de statistiques (CPU, mémoire, swap, charge, processus…) est défini sous la forme d'un plugin. La structure d'un plugin Glances permet de capturer, mettre en forme et exporter les statistiques.

Il est bien sûr possible d'enrichir cet écosystème en écrivant vous même un plugin. Ainsi les dernières versions ont vu apparaître les plugins Docker (pour superviser vos conteneurs), RAID (pour surveiller les contrôleurs disques) et Quick Look (jauges en mode console).

6.1 Le plugin Docker

Les conteneurs ont le vent en poupe en ce moment. Il n'y a qu'à voir l'engouement sur les réseaux sociaux autour de l'implémentation Docker [3] pour sentir le virage technologique qui est en train de s'opérer. Glances surfe donc sur cette vague et propose un plugin permettant de superviser les conteneurs. Le plugin s'affiche automatiquement au-dessus de la liste des processus, si Docker est détecté. On retrouve ainsi, la liste des conteneurs, leurs consommations CPU et mémoire ainsi que leurs statuts comme le montre la figure 7.

figure_07

Fig. 7: Plugin de supervision des conteneurs.

Les prochaines versions de Glances intégreront des statistiques supplémentaires (comme les débits réseaux) en fonction de celles disponibles dans l'API Docker.

6.2 Le plugin RAID

Sur des serveurs en production, l'état du contrôleur RAID est un élément critique à surveiller. Glances se base sur la lecture du fichier /proc/mdstat via la librairie Python PyMDStat [4].

Par exemple, l'affichage de Glances dans le cas d'un contrôleur RAID5 avec un disque défectueux est visible en figure 8. Dans cet exemple, on voit que le quatrième disque de la grappe est indisponible (UUUA).

figure_08

Fig. 8: Cas d'un contrôleur RAID5 avec un disque défectueux.

6.3 Lancement d'actions sur alertes

Autre nouveauté de cette version 2.4, la possibilité de lancer des actions (des lignes de commandes) sur alerte.

Illustrons cela par un exemple : vous souhaitez surveiller une machine pendant une nuit et identifier les processus consommateurs de CPU. Nous allons donc déclencher une action (une simple commande ps redirigée vers un fichier temporaire /tmp/<date>-cpu.log) à chaque fois que la CPU user devient critique (supérieure à 90%). On doit pour cela éditer le fichier de configuration de Glances de la manière suivante :

[cpu]

user_critical=90

user_critical_action=ps auxw > /tmp/`date +"%Y%m%d%H%M%S"`-cpu.log

On peut aussi accéder aux valeurs du plugin où l'action est déclenchée grâce à une syntaxe {{Mustache}} [5]. Par exemple pour avoir accès à la valeur courante du CPU user, on utilisera {{user}} dans la ligne de commandes de l'action. Ainsi pour ajouter la valeur du CPU dans le nom du fichier du premier exemple :

user_critical_action=ps auxw > /tmp/`date +"%Y%m%d%H%M%S"`-cpu-{{user}}.log

Conclusion

Dans ce premier billet sur le sujet, nous n'avons abordé qu'une partie des fonctions proposées par Glances. Pour continuer l'aventure, je vous propose donc de consulter la documentation officielle (voir références ci-dessous) et je vous invite à participer au développement de Glances, par vos contributions sur le Github [1] et par vos questions sur le Google Groups [7].

Références

[1] Site officiel de Glances : https://github.com/nicolargo/glances

[2] Protocole ZeroConf : http://www.zeroconf.org/

[3] Docker : https://www.docker.com

[4] PyMDStat : https://github.com/nicolargo/pymdstat

[5] Mustache : http://mustache.github.io/

[6] Dashboard Grafana pour Glances : https://github.com/nicolargo/glances/blob/develop/conf/glances-grafana.json

[7] Glances Google Groups: https://groups.google.com/forum/#!forum/glances-users




Article rédigé par

Les derniers articles Premiums

Les derniers articles Premium

Sécurisez vos applications web : comment Symfony vous protège des menaces courantes

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Les frameworks tels que Symfony ont bouleversé le développement web en apportant une structure solide et des outils performants. Malgré ces qualités, nous pouvons découvrir d’innombrables vulnérabilités. Cet article met le doigt sur les failles de sécurité les plus fréquentes qui affectent même les environnements les plus robustes. De l’injection de requêtes à distance à l’exécution de scripts malveillants, découvrez comment ces failles peuvent mettre en péril vos applications et, surtout, comment vous en prémunir.

Bash des temps modernes

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Les scripts Shell, et Bash spécifiquement, demeurent un standard, de facto, de notre industrie. Ils forment un composant primordial de toute distribution Linux, mais c’est aussi un outil de prédilection pour implémenter de nombreuses tâches d’automatisation, en particulier dans le « Cloud », par eux-mêmes ou conjointement à des solutions telles que Ansible. Pour toutes ces raisons et bien d’autres encore, savoir les concevoir de manière robuste et idempotente est crucial.

Présentation de Kafka Connect

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Un cluster Apache Kafka est déjà, à lui seul, une puissante infrastructure pour faire de l’event streaming… Et si nous pouvions, d’un coup de baguette magique, lui permettre de consommer des informations issues de systèmes de données plus traditionnels, tels que les bases de données ? C’est là qu’intervient Kafka Connect, un autre composant de l’écosystème du projet.

Le combo gagnant de la virtualisation : QEMU et KVM

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

C’est un fait : la virtualisation est partout ! Que ce soit pour la flexibilité des systèmes ou bien leur sécurité, l’adoption de la virtualisation augmente dans toutes les organisations depuis des années. Dans cet article, nous allons nous focaliser sur deux technologies : QEMU et KVM. En combinant les deux, il est possible de créer des environnements de virtualisation très robustes.

Les listes de lecture

9 article(s) - ajoutée le 01/07/2020
Vous désirez apprendre le langage Python, mais ne savez pas trop par où commencer ? Cette liste de lecture vous permettra de faire vos premiers pas en découvrant l'écosystème de Python et en écrivant de petits scripts.
11 article(s) - ajoutée le 01/07/2020
La base de tout programme effectuant une tâche un tant soit peu complexe est un algorithme, une méthode permettant de manipuler des données pour obtenir un résultat attendu. Dans cette liste, vous pourrez découvrir quelques spécimens d'algorithmes.
10 article(s) - ajoutée le 01/07/2020
À quoi bon se targuer de posséder des pétaoctets de données si l'on est incapable d'analyser ces dernières ? Cette liste vous aidera à "faire parler" vos données.
Voir les 125 listes de lecture

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous