La supervision est un élément crucial de toute infrastructure informatique. Elle permet d’être pro-actif et de ne pas subir les pannes, de remonter des métriques métier pertinentes ou encore de fournir une visualisation globale de votre système d’information. Veryfrog vous guide dans la construction d’une plateforme de supervision complète, scalable mais surtout gratuite.

Supervision: une plateforme complète, scalable et gratuite pour votre entreprise

Le Cloud-IT à la rescousse !

Beaucoup d’outils sont disponibles gratuitement. Citons Zabbix, Nagios/Centreon ou encore Cacti. Néanmoins, ces produits affichent certaines limites: visualisation des années 60, mise à l’échelle et haute disponibilité compliquées, interfaçage peu évident. Pour palier à tout cela, nous allons construire une plateforme typique du Cloud-IT, avec les outils des géants du Web :

  1. Prometheus pour le remontée de métriques et le stockage
  2. Des exporters pour convertir vos métriques au format Prometheus
  3. AlertManager pour le dispatch des alertes
  4. Grafana pour la visualisation
  5. Draw.io pour la cartographie de l’infrastructure
  6. Guacamole pour la prise de main à distance depuis la cartographie

Prometheus: le socle de votre supervision

Prometheus est issu de Soundcloud. Il s’agit d’un simple binaire Go qui va chercher les métriques (scrapping) et les stocker. Il embarque nativement une base de données temporelle (Time Series DataBase – TSDB). Cette dernière est optimisée pour le stockage de données horodatées, comme les métriques d’infrastructure. Ainsi, il est possible de stocker 1 million de metriques recueillies toutes les 30s pendant 1 an sur 100G seulement !

Prometheus s’inscrit comme élément central de votre supervision du fait qu’il fournit un langage structuré de requête: le promQL. Ce langage permet, entre autres, de faire des jointures entre toutes les métriques, d’utiliser des regex ou encore de jouer sur la temporalité des données. En utilisant ce langage, nous allons pouvoir construire des alertes et des visualisations complexes, pertinentes pour votre activité.

A l’image des solutions Web du moment, Prometheus utilise énormément les libellés pour “tagger” ses données. Ces labels vous permettront d’organiser vos métriques, de les catégoriser selon une hiérarchie pertinente pour vous. Ainsi, vous avez la pleine maîtrise de l’organisation de vos données.

Exporters: Faire le lien entre votre infrastructure et Prometheus

Prometheus ne comprend qu’un seul format de données: le format OpenMetrics. Cependant, les mesures d’infrastructure ne sont pas dans ce format. C’est pourquoi Prometheus est accompagné de plus de 200 exporters qui transposent les métriques de supervision dans le bon format. Ce sont la plupart du temps des binaires Go dédiés à une famille de métriques, par exemple les mesures système d’un Unix, d’un Windows, les données SNMP d’un switch, les statistiques d’une base de données, etc, … Toutes les données de l’exporter sont alors publiées en HTTP(S) au format OpenMetrics pour être scrappées par Prometheus.

AlertManager: Dispatcher vos alertes de supervision

Les alertes de la plateforme sont définies dans Prometheus via son langage PromQL. Par exemple, voici une alerte complexe réalisable via Prometheus:

- alert: DiskWillFillIn4Hours
  expr: predict_linear(node_filesystem_free_bytes{fstype!~"tmpfs"}{1h], 4 * 3600) < 0
  for: 5m
  labels:
    severity: warning
  annotations:
    summary: "Disk will fill in 4 hours (instance {{ $labels.instance }})"
    description: "Disk will fill in 4 hours at current write rate\n  VALUE = {{ $value }}\n  LABELS: {{ $labels }}"

Ce code permet de prédire le remplissage d’un système de fichier dans les 4 prochaines heures. Si une telle alerte est déclenchée, elle est transmise à l’AlertManager. Ce composant de notre plateforme de supervision permet de définir des “receivers” et des “routes”. Les “receivers” définissent les destinataires et leurs mediums de communication. On peut donc définir un groupe d’individus accessibles par emails, un autre par SMS ou encore un 3ème groupe joignable par Slack.

Les “routes” quant à elles, définissent le dispatch entre les alertes reçues et les receivers. Ce dispatch est réalisé grâce aux libellés définis dans Prometheus. On voit donc bien que les labels sont des pièces essentielles dans cette plateforme de supervision.

Enfin, l’AlertManager dispose nativement de plusieurs mediums de communication (la liste ici). Le plus intéressant est le receiver “webhook”. Celui-ci permet d’exporter l’alerte en JSON à travers un POST HTTP. De ce fait, on peut aisément faire communiquer l’AlertManager avec n’importe quel autre système, comme du ticketing, en transcodant ce JSON au bon format via quelques lignes de Go/Python ou en utilisant vos ETL – si vous en avez déjà en place.

Grafana: une visualisation jooooooolie

Grafana est, là encore, un simple binaire Go qui publie de l'HTML5. La visualisation est donc légère et compatible avec les tablettes et smartphones. Grafana utilise des “datasources” sur lesquelles il exécutent des requêtes. Le résultat de ces dernières est alors mise en forme à travers une dizaine de graphiques prédéfinis (courbes, gauge, tableau, heatmap, …).

Vous pouvez construire vos propres tableaux de bord en utilisant les éléments de base de Grafana et le requêtage de Prometheus. Si vous êtes pressé, Grafana met à disposition sur son site web tout un ensemble de dashboards clé en main, issus de sa communauté. On retrouve ainsi des tableaux de bord de supervision déjà prêt à l’emploi pour chacun des exporters de Prometheus.

Draw.io : Faîtes une cartographie de votre informatique

Draw.io est un utilitaire full-web permettant de dessiner des plans, des schémas ou encore des graphes. Il n’a rien à envier à Visio de Microsoft, à la différence qu’il est gratuit et que vous pouvez aussi l’héberger chez vous. Avec cet utilitaire, vous pouvez représenter votre infrastructure facilement et exporter votre cartographie dans différents formats : png, pdf ou bien xml.

Grafana possède un plugin nommé Flowcharting qui permet d’utiliser les schémas issus de Draw.io (au format XML). Ce plugin va permettre d'associer une requête à n’importe quel objet de la cartographie. Ainsi, on pourra lier une bande passante à une ligne entre 2 images de serveurs, on pourra aussi associer une requête d’état à une représentation d’un service. Le plugin permet en plus de colorer les objets en fonction de la requête associé. De ce fait, on pourra colorer en rouge un service remonté comme défaillant par Prometheus.

Guacamole: Ajouter une prise de main à votre supervision

Guacamole est un serveur de prise de main à distance. La partie client de Guacamole est codée en HTML5 : vous pouvez donc prendre la main sur vos serveurs Unix ou Windows depuis un navigateur et donc depuis une tablette ou un smartphone. La partie serveur quant à elle est développé en Java, et non pas en Go comme le reste de la plateforme.

En étant là encore une solution Full-Web, Guacamole offre la possibilité de se connecter à vos serveurs via une simple URL. Aussi, Draw.io permet d’associer un lien HTTP(S) à chaque élément de vos schémas. Ainsi, vous pouvez construire une cartographie de votre infrastructure qui non seulement se colorera en fonction de l’état de votre système d’information mais qui permettra aussi de prendre la main sur vos serveurs d’un simple clic !

Scalabilité et Haute Disponibilité

La mise à l’échelle de l’ensemble est plutôt aisé. Hormis Prometheus, toutes les composantes sont stateless. Il suffit donc de les multiplier et de répartir la charge via des loadbalancers comme ngninx ou haproxy. Concernant Prometheus, il suffit là encore de penser “scaling-out” : découpez votre infrastructure en parties pertinentes pour vous (par exemple une partie réseau, une partie Windows, une partie Linux, …) et dédiez un serveur Prometheus par partie. La visualisation rendera alors une vue uniforme de toutes ces sources Prometheus.

La haute disponibilité suit le même schéma : il suffit de multiplier les éléments stateless comme Grafana ou AlertManager et d’utiliser des loadbalancers – qu’on veillera à rendre hautement disponible (via Pacemaker par exemple). On notera qu’AlertManager propose un mode cluster. Prometheus quant à lui ne propose pas de clustering. Deux solutions s’offrent à vous : Doubler Prometheus – vous aurez alors les mêmes données scrapées sur les 2 serveurs – ou remplacer le TSDB de Prometheus par une base nativement hautement disponible comme InfluxDB.

Ainsi, en assemblant intelligemment différents blocs issus du Cloud-IT, on peut construire une plateforme de supervision complète, avec des fonctionnalité poussée comme une cartographie dynamique et une prise de main. Aussi, les protocoles utilisés permettent une mise à l’échelle et une haute disponibilité aisées.Le tout pour 0€ ! Si vous aussi vous souhaitez mettre en place une telle structure au sein de votre entreprise, n’hésitez pas à nous contacter.