TP - Installation simple et découverte de Prometheus
Dans ce TP nous allons explorer comment installer, configurer et utiliser une instance simple de Prometheus. Vous allez télécharger et exécuter Prometheus localement, le configurer pour collecter des données sur lui-même et sur une application exemple, puis travailler avec des requêtes, des règles et des graphiques pour utiliser les séries temporelles collectées.
Téléchargement et exécution de Prometheus
Téléchargez la dernière version de Prometheus pour votre plate-forme, puis extrayez la :
tar xvfz prometheus-*.tar.gz
mkdir ~/prometheus-tp
mv prometheus-xx ~/prometheus-tp/prometheus # à compléter
Ouvrez ensuite le dossier ~/prometheus-tp dans VSCode (menu demarrer > development)
Avant de démarrer Prometheus, configurons-le.
Configuration de Prometheus pour se surveiller lui-même
Prometheus collecte des métriques à partir de cibles en récupérant des métriques à partir de points d'accès (endpoints) HTTP. Étant donné que Prometheus expose également ses données de la même manière à propos de lui-même, il peut également récupérer et surveiller sa propre santé.
Bien qu'un serveur Prometheus qui collecte uniquement des données à propos de lui-même ne soit pas très utile, il constitue un bon exemple de départ. Enregistrez la configuration de base de Prometheus suivante dans un fichier nommé prometheus.yml :
global:
scrape_interval: 15s # Par défaut, récupère les cibles toutes les 15 secondes.
# Attachez ces étiquettes à toute timeserie ou alerte envoyée à des systèmes externes (fédération, stockage distant, Alertmanager).
external_labels:
monitor: 'lab-monitoring'
# configuration des cibles à scraper : Ici, c'est Prometheus lui-même.
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
Pour une spécification complète des options de configuration, consultez la documentation de configuration.
Démarrage de Prometheus
Pour démarrer Prometheus avec le fichier de configuration que vous venez de créer, accédez au répertoire contenant le binaire Prometheus et exécutez :
# Démarrez Prometheus.
# Par défaut, Prometheus stocke sa base de données dans ./data (indicateur --storage.tsdb.path).
./prometheus --config.file=prometheus.yml
Prometheus devrait démarrer. Vous devriez également pouvoir accéder à une page de statut à son sujet à l'adresse localhost:9090. Attendez quelques secondes que Prometheus collecté quelques données à son sujet à partir de son propre point d'accès HTTP.
Vous pouvez également vérifier que Prometheus sert des métriques à propos de lui-même en accédant à son point d'accès de métriques : localhost:9090/metrics
Arrêt de Prometheus et rechargement de la configuration
Une instance Prometheus peut recharger sa configuration sans redémarrer le processus en utilisant le signal SIGHUP. Si vous utilisez Linux, vous pouvez le faire en utilisant kill -s SIGHUP <PID>, en remplaçant <PID> par l'ID de processus de votre instance Prometheus.
Bien que Prometheus dispose de mécanismes de récupération en cas de défaillance abrupte du processus, il est recommandé d'utiliser le signal SIGTERM pour arrêter proprement une instance Prometheus. Si vous utilisez Linux, vous pouvez le faire en utilisant kill -s SIGTERM <PID>, en remplaçant <PID> par l'ID de processus de votre instance Prometheus.
Utilisation du navigateur d'expressions
Explorons les données que Prometheus a collectées à propos de lui-même. Pour utiliser le navigateur d'expressions intégré à Prometheus, accédez à http://localhost:9090/graph et choisissez la vue "Table" dans l'onglet "Graph".
Comme vous pouvez le voir sur localhost:9090/metrics, l'une des métriques que Prometheus exporte à propos de lui-même s'appelle prometheus_target_interval_length_seconds (la durée réelle entre les récupérations de cibles). Saisissez la commande suivante dans la console d'expression, puis cliquez sur "Exécuter" :
prometheus_target_interval_length_seconds
Cela devrait renvoyer plusieurs séries temporelles différentes (avec la dernière valeur enregistrée pour chacune), chacune avec le nom de métrique prometheus_target_interval_length_seconds, mais avec différentes étiquettes. Ces étiquettes désignent différents percentiles de latence et des intervalles de groupe cible différents.
Si nous nous intéressons uniquement aux latences du 99e percentile, nous pourrions utiliser cette requête :
prometheus_target_interval_length_seconds{quantile="0.99"}
Pour compter le nombre de séries temporelles renvoyées, vous pourriez écrire :
count(prometheus_target_interval_length_seconds)
Pour en savoir plus sur le langage d'expression, consultez la documentation du langage d'expression.
Utilisation de l'interface de visualisation graphique
Pour créer des graphiques à partir d'expressions, accédez à http://localhost:9090/graph et utilisez l'onglet "Graph".
Par exemple, saisissez l'expression suivante pour créer un graphique du taux par seconde de création de chunks dans le Prometheus auto-récupéré :
rate(prometheus_tsdb_head_chunks_created_total[1m])
Expérimentez avec les paramètres de plage de graphique et d'autres paramètres.
Démarrage de quelques cibles exemple
Ajoutons des cibles supplémentaires pour que Prometheus les récupère.
Le node_exporter est utilisé comme cible exemple:
- Téléchargez la dernière version du
node_exporterpour votre plate-forme, puis extrayez la :
tar -xzvf node_exporter-*.*.tar.gz
cd node_exporter-*.*
# Démarrez 3 cibles exemple dans des terminaux séparés :
./node_exporter --web.listen-address 127.0.0.1:8080
./node_exporter --web.listen-address 127.0.0.1:8081
./node_exporter --web.listen-address 127.0.0.1:8082
Vous devriez maintenant avoir des cibles exemples en écoute sur http://localhost:8080/metrics, http://localhost:8081/metrics et http://localhost:8082/metrics.
Configuration de Prometheus pour surveiller les cibles d'exemple
Maintenant, nous allons configurer Prometheus pour récupérer ces nouvelles cibles. Regroupons les trois points d'accès en un seul job appelé node. Nous allons imaginer que les deux premiers points d'accès sont des cibles de production, tandis que le troisième représente une instance de test. Pour modéliser cela dans Prometheus, nous pouvons ajouter plusieurs groupes de points d'accès à un seul job, en ajoutant des étiquettes supplémentaires à chaque groupe de cibles. Dans cet exemple, nous ajouterons l'étiquette group="production" au premier groupe de cibles, tandis que nous ajouterons group="canary" au deuxième.
Pour ce faire, ajoutez la définition du job suivante à la section scrape_configs de votre fichier prometheus.yml, puis redémarrez votre instance de Prometheus :
scrape_configs:
- job_name: 'node'
# Remplacez la valeur par défaut globale et récupérez les cibles de ce job toutes les 5 secondes.
scrape_interval: 5s
static_configs:
- targets: ['localhost:8080', 'localhost:8081']
labels:
group: 'production'
- targets: ['localhost:8082']
labels:
group: 'canary'
Accédez au navigateur d'expressions et vérifiez que Prometheus dispose désormais d'informations sur les séries temporelles exposées par ces points d'accès exemples, telles que node_cpu_seconds_total.
Source: documentation officielle Prometheus sous licence CC by SA