Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Prometheus et Grafana
  3. Suivi d’applications modernes
Extrait - Prometheus et Grafana Surveillez vos applications et composants système
Extraits du livre
Prometheus et Grafana Surveillez vos applications et composants système
2 avis
Revenir à la page d'achat du livre

Suivi d’applications modernes

Objectifs du chapitre et prérequis

1. Contexte et prérequis

Le chapitre courant a pour vocation de présenter aux lecteurs comment mettre en place le suivi d’une application dans Prometheus. Dans un premier temps, cette instrumentalisation se fera à l’aide des capacités de deux frameworks courants :

  • Java Spring Boot.

  • Python Flask.

Le lecteur abordera également la mise en place d’un agent Java : jmx-exporter. Ce dernier permet d’instrumenter des applications Java historiques sans avoir à toucher au code source. Il est également compatible avec l’utilisation de serveurs d’applications traditionnels (Tomcat, JBoss, WebLogic, WebSphere, etc.).

Dans la dernière partie, l’utilisation d’outils de génération de tableaux de bord sera également présentée avec Jsonnet.

2. Fichiers téléchargeables

Vous pouvez récupérer les exemples sur le repository GitHub suivant : https://github.com/EditionsENI/prometheus-grafana

Vous pouvez également récupérer ces fichiers dans l’archive chapitre-16.tar.gz depuis la page Informations générales.

Instrumentation d’application Java/Spring Boot

1. Contexte

Spring Boot est un framework informatique de développement d’application très répandu. Son fonctionnement s’appuie majoritairement sur la machine virtuelle Java. Il s’agit d’un standard utilisé par de très nombreux acteurs qui permet de simplifier le développement d’applications complexes.

Le but de ce chapitre est de mettre en œuvre la supervision Prometheus en s’appuyant sur les capacités de ce framework.

2. Surveillance Prometheus avec Spring Boot

a. Création d’une application Spring Boot de démonstration

La première étape consiste à créer une application Spring Boot. Cette dernière n’a pas vocation à faire grand-chose, si ce n’est de démarrer un serveur HTTP.

La création d’une nouvelle application Spring Boot réclame un travail important. Il est recommandé de démarrer à l’aide d’un générateur automatique en ligne. Dans le cas de Spring Boot, le projet met à disposition le site web suivant : https://start.spring.io/

images/17EP01.png

Écran de génération d’une application Spring Boot

 Dans la partie droite de l’écran, cliquez sur le bouton ADD DEPENDENCIES puis sélectionnez la dépendance Spring Web. Cette dernière permet d’embarquer un serveur Tomcat dans les dépendances de l’application. De cette manière, il ne sera pas nécessaire de dépendre d’un serveur d’applications externe pour gérer l’exposition de l’application.

 Laissez les autres valeurs au choix par défaut, puis cliquez sur le bouton GENERATE. Le navigateur télécharge alors une archive portant le nom de demo.zip.

b. Installation des prérequis

La compilation d’une application Java nécessite de disposer d’un gestionnaire de construction comme Maven ou Gradle. Pour la suite, l’exemple s’appuie sur Maven (choix par défaut).

Dans les faits, le programme généré précédemment ne nécessite même pas l’installation de Maven. En effet, il contient un script mvnw avec tout le nécessaire pour lancer la compilation du programme de démonstration....

Instrumentation d’applications Python/Flask

1. Contexte

Tout comme Spring Boot, il est possible d’ajouter un point de surveillance Prometheus dans les applications Python. L’exemple qui suit s’appuie sur le framework Flask.

2. Préparation des prérequis de l’application Python Flask

a. À propos de Flask

Pour la suite de l’exercice, l’utilisateur va faire appel à la librairie de développement Flask. Cette dernière a l’avantage de prendre en charge de nombreux aspects bas niveau comme par exemple :

  • l’écoute sur le port HTTP,

  • la prise en charge de points de suivi (health check),

  • l’exposition de métriques Prometheus.

Pour la suite, la version Python 3.8.5 sera utilisée (version par défaut dans Ubuntu 20.04 LTS). Toutefois, n’importe quelle version supérieure à la version 3.6 suffit.

b. Installation des prérequis Python et virtualenv

Premier point à vérifier : la présence de Python et de l’utilitaire pip (en version 3). Sous Ubuntu 20.04 LTS, cette vérification se fait à l’aide de la commande suivante :

$ sudo apt install python3-pip 

Autre aspect, afin d’éviter de polluer le système ainsi que les fichiers de l’utilisateur courant, l’installation se fait à l’aide de l’utilitaire virtualenv.

Ce dernier a pour but de créer des environnements de travail Python séparés. Le principe est de créer des arborescences complètes dans lesquelles l’utilisateur peut travailler sans interférer avec les chemins d’installations standards.

Voici la commande d’installation de cet outil :

$ sudo apt install python3-virtualenv 

c. Création de l’environnement de travail

La création de l’environnement de travail se fera à l’aide de la commande virtualenv suivie d’un emplacement où stocker les différentes dépendances Python. 

Voici ci-dessous la création d’un répertoire de travail /tmp/eni-prometheus :

$ virtualenv /tmp/eni-prometheus 

Cette commande renvoie le message suivant (extrait) :

created virtual environment CPython3.8.5.final.0-64 in 151ms 
 creator CPython3Posix(dest=/tmp/eni-prometheus, ...) 
 seeder FromAppData(download=False...

Agent JMX exporter

1. Contexte

Jusqu’à maintenant, l’intégration des applications s’est toujours faite en modifiant le code source ou en injectant des dépendances. Malheureusement, il existe des cas pour lesquels il n’est pas possible de procéder ainsi.

De ce point de vue, les applications écrites en Java offrent une certaine souplesse puisque ce langage permet d’ajouter des métriques sur des applications existantes.

L’extension Java JMX (Java Management eXtensions, soit gestionnaire d’extensions Java) qui est au cœur de Java est spécialement conçue pour cet usage : ce protocole permet de configurer dynamiquement une application et également de faire un suivi de son fonctionnement interne (consommation des ressources CPU, mémoire, etc.).

2. À propos des MBeans

L’exporteur récupère les métriques à l’aide du mécanisme de MBeans (abréviation de Managed Bean). Ce type d’objet est relativement complexe à appréhender. Le but de cet ouvrage n’est pas de faire une présentation exhaustive de leur fonctionnement.

Dans ce qui va suivre, le lecteur doit cependant connaître quelques notions de ce fonctionnement.

3. Mise en place de l’exporteur

a. Téléchargement de l’exporteur JMX

L’exporteur JMX se présente sous la forme d’un fichier JAR Java. Il est disponible au téléchargement en suivant cette adresse : https://github.com/prometheus/jmx_exporter

La version 0.16.1 est la dernière disponible au moment de la rédaction de ce livre. L’archive porte le nom jmx_prometheus_javaagent-0.16.1.jar et est compatible Java 7 et versions supérieures.

Une seconde version existe pour les applications écrites avec Java 6. L’archive porte le nom jmx_prometheus_javaagent-0.16.1_java6.jar.

b. Mise en place et configuration de l’exporteur

L’exporteur est compatible avec n’importe quel processus Java. L’intégration se fait en ajoutant une option -javaagent. En plus de cette dernière, il est nécessaire d’ajouter les éléments suivants dans cet ordre :

  • L’option en elle-même.

  • Le caractère deux-points (’:’).

  • L’emplacement du fichier JAR téléchargé...

Création de tableaux de bord as code

1. Contexte

La récupération de métriques dans une application et la création d’alertes est un premier pas important. Toutefois, il est tout aussi important de disposer d’un tableau de bord pour suivre l’état d’une application.

Dans un premier temps, ce travail est relativement simple mais peut devenir complexe sur le long terme :

  • Modification des tableaux de bord lors de l’arrivée de nouvelles métriques.

  • Prise en compte de l’évolution des points d’entrées (renommage de métriques, changement de labels, etc.).

  • Enrichissement des métriques.

  • Uniformisation des tableaux de bord suite à l’évolution de la mise en page.

  • Distribution des modifications sur les différents environnements.

Les personnes en charge de ces tâches peuvent parfois se retrouver face à un travail relativement répétitif.

2. Principe de fonctionnement

Dans Grafana, un tableau de bord est une structure au format JSON. Jsonnet est un outil spécialement conçu pour la génération de ce type de fichier. Il faut pour cela fournir un programme à cet interpréteur.

Malheureusement, la structure d’un tableau de bord est relativement complexe et nécessite un effort afin de disposer de la structure minimale. Pour simplifier cet aspect, une librairie prend en charge les aspects bas niveau.

Il suffit alors de fournir un fichier en entrée au format Jsonnet afin d’obtenir en sortie un fichier au format JSON. Ce dernier peut être ingéré par Grafana soit par son API, soit par mécanisme d’approvisionnement automatique (cf. chapitre Ajout de tableaux de bord, et particulièrement la partie Utilisation du mécanisme d’approvisionnement).

3. Mise en place des prérequis

a. Installation du binaire de Jsonnet

Jsonnet se présente sous la forme d’un binaire autoporteur sans dépendance. Son téléchargement se fait en suivant cette adresse : http://github.com/google/jsonnet

Dans la section Releases de la page GitHub, récupérez la dernière version (v0.17.0). L’archive de la version Linux AMD64 porte le nom jsonnet-bin-v0.17.0-linux.tar.gz.

Décompressez tout d’abord l’archive à l’aide...