Comment utiliser Blackbox Exporter pour surveiller votre serveur Web sur Ubuntu 20.04
Comme on a pu le voir dans des articles précédents (Installation de Prometheus avec Grafana), Prometheus est un système de surveillance open source qui collecte les métriques de vos services et les stocke dans une base de données chronologique.
Blackbox Exporter sonde en envoyant des requêtes via les protocoles HTTP, HTTPS, DNS, TCP ou ICMP, renvoyant des métriques détaillées sur la demande, y compris si elle a réussi ou non et combien de temps il a fallu pour recevoir une réponse.
Création d'utilisateurs de service
Pour des raisons de sécurité, nous allons créer deux nouveaux comptes utilisateurs, blackbox_exporter. Nous utiliserons ces comptes pour exécuter Blackbox Exporter, ainsi que pour isoler la propriété sur les fichiers et répertoires principaux appropriés. Cela garantit que Blackbox Exporter ne peut pas accéder et modifier les données dont il n'est pas propriétaire.
Créez ces utilisateurs avec la useradd
commande en utilisant les indicateurs --no-create-home
et --shell /bin/false
afin que ces utilisateurs ne puissent pas se connecter au serveur :
useradd --no-create-home --shell /bin/false blackbox_exporter
Installation de Blackbox Exporter
Tout d'abord, téléchargez la dernière version stable de Blackbox Exporter dans votre répertoire personnel.
Vous pouvez trouver les derniers binaires sur la page de téléchargement de Prometheus.
cd ~
curl -LO https://github.com/prometheus/blackbox_exporter/releases/download/v0.18.0/blackbox_exporter-0.18.0.linux-amd64.tar.gz
Pour décompresser l'archive :
tar xvf blackbox_exporter-0.18.0.linux-amd64.tar.gz
Cela crée un répertoire, contenant le fichier binaire, une licence et des fichiers d'exemple.
Copiez le fichier binaire dans le répertoire /usr/local/bin
.
mv ./blackbox_exporter-0.18.0.linux-amd64/blackbox_exporter /usr/local/bin
Définissez la propriété de l'utilisateur et du groupe sur le binaire sur l' utilisateur blackbox_exporter , en vous assurant que les utilisateurs non root ne peuvent pas modifier ou remplacer le fichier :
chown blackbox_exporter:blackbox_exporter /usr/local/bin/blackbox_exporter
Enfin, nous supprimerons l'archive et le répertoire décompressé, car ils ne sont plus nécessaires :
rm -rf ~/blackbox_exporter-0.18.0.linux-amd64.tar.gz ~/blackbox_exporter-0.18.0.linux-amd64
Configuration et exécution de Blackbox Exporter
Créons un fichier de configuration définissant comment Blackbox Exporter doit vérifier les points à questionner. Nous allons également créer un fichier pour systemd afin de pouvoir gérer le service de Blackbox à l'aide de systemd
.
Nous spécifierons la liste des points de terminaison à explorer dans la configuration Prometheus à l'étape suivante.
Commencez par créer le répertoire pour la configuration de Blackbox Exporter. Selon les conventions Linux, les fichiers de configuration vont dans le répertoire /etc
, nous allons donc utiliser ce répertoire pour contenir également le fichier de configuration de Blackbox Exporter :
mkdir /etc/blackbox_exporter
Définissez ensuite la propriété de ce répertoire sur l' utilisateur blackbox_exporter que vous avez créé précédemment :
chown blackbox_exporter:blackbox_exporter /etc/blackbox_exporter
Dans le répertoire nouvellement créé, créez le fichier blackbox.yml
qui contiendra les paramètres de configuration de Blackbox Exporter :
nano /etc/blackbox_exporter/blackbox.yml
Nous allons configurer Blackbox Exporter pour utiliser la sonde http
par défaut pour sonder les points de terminaison. Les sondes définissent comment Blackbox Exporter vérifie si un point de terminaison est en cours d'exécution. La sonde http
vérifie les points de terminaison en envoyant une requête HTTP au point de terminaison et en testant son code de réponse. Vous pouvez sélectionner la méthode HTTP à utiliser pour la détection, ainsi que les codes d'état à accepter comme réponses réussies. Parmi les autres sondes populaires, citons la sonde tcp
pour le sondage via le protocole TCP, la sonde icmp
pour le sondage via le protocole ICMP et la sonde dns
pour vérifier les entrées DNS.
Nous utiliserons la sonde http
pour sonder le point de terminaison s'exécutant sur le port 8080
via un GET
, une méthode HTTP de requête. Par défaut, le testeur suppose que les codes HTTP dans les 2xx
sont valides, nous n'avons donc pas besoin de fournir une liste de codes d'état valides.
Nous allons configurer un délai d'expiration de 5 secondes, ce qui signifie que Blackbox Exporter attendra 5 secondes pour la réponse avant de signaler un échec. En fonction de votre type d'application, choisissez n'importe quelle valeur qui correspond à vos besoins.
Remarque: le fichier de configuration de Blackbox Exporter utilise le format YAML , qui interdit l'utilisation des tabulations et nécessite strictement l'utilisation de deux espaces pour l'indentation. Si le fichier de configuration n'est pas formaté correctement, Blackbox Exporter ne démarrera pas.
Ajoutez la configuration suivante au fichier blackbox.yml :
modules:
http_2xx:
prober: http
timeout: 5s
http:
valid_status_codes: []
method: GET
Vous pouvez trouver plus d'informations sur les options de configuration dans la documentation de Blackbox Exporter .
Enregistrez le fichier et quittez votre éditeur de texte.
Avant de créer le fichier de service, définissez la propriété de l'utilisateur et du groupe dans le fichier de configuration sur l' utilisateur blackbox_exporter créé précédemment.
chown blackbox_exporter:blackbox_exporter /etc/blackbox_exporter/blackbox.yml
Créez maintenant le fichier de service afin de pouvoir gérer Blackbox Exporter en utilisant systemd
:
nano /etc/systemd/system/blackbox_exporter.service
[Unit]
Description=Blackbox Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=blackbox_exporter
Group=blackbox_exporter
Type=simple
ExecStart=/usr/local/bin/blackbox_exporter --config.file /etc/blackbox_exporter/blackbox.yml
[Install]
WantedBy=multi-user.target
Ce fichier de service indique systemd
d'exécuter Blackbox Exporter en tant qu'utilisateur blackbox_exporter avec le fichier de configuration situé sur /etc/blackbox_exporter/blackbox.yml
.
Enregistrez le fichier et quittez votre éditeur de texte.
Enfin, rechargez systemd
pour utiliser votre fichier de service nouvellement créé :
systemctl daemon-reload
Maintenant, lancez Blackbox Exporter :
systemctl start blackbox_exporter
Assurez-vous qu'il a démarré avec succès en vérifiant l'état du service :
systemctl status blackbox_exporter
La sortie contient des informations sur le processus de Blackbox Exporter, y compris l'identificateur de processus principal (PID), l'utilisation de la mémoire, les journaux, et autres.
Si l'état du service ne l'est pas active (running)
, suivez les journaux à l'écran et retracez les étapes précédentes pour résoudre le problème avant de poursuivre le didacticiel.
Enfin, activez le service pour vous assurer que Blackbox Exporter démarre au redémarrage du serveur :
systemctl enable blackbox_exporter
Maintenant que Blackbox Exporter est entièrement configuré et en cours d'exécution, nous pouvons configurer Prometheus pour collecter des métriques sur les requêtes de sonde à notre point de terminaison, afin que nous puissions créer des alertes basées sur ces métriques et configurer des notifications pour les alertes à l'aide d'Alertmanager.
Configuration de Prometheus pour scruter l'exportateur Blackbox
La liste des points de terminaison à tester se trouve dans le fichier de configuration Prometheus dans le cadre de la directive targets
de Blackbox Exporter. Dans cette étape, vous allez configurer Prometheus pour utiliser Blackbox Exporter pour scruter le serveur Web Nginx fonctionnant sur le port 8080
que vous avez configuré précédemment.
Ouvrez le fichier de configuration Prometheus dans votre éditeur :
nano /etc/prometheus/prometheus.yml
Cela devrait ressembler à ce qui suit :
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
À la fin de la directive scrape_configs
, ajoutez l'entrée suivante, qui indiquera à Prometheus de sonder le point de terminaison s'exécutant sur le port local 8080
à l'aide du module Blackbox Exporter http_2xx
, précédemment configuré.
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- http://localhost:8080
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: localhost:9115
Par défaut, Blackbox Exporter s'exécute sur le port 9115
avec des métriques disponibles sur le configuration /probe
.
La configuration scrape_configs
de Blackbox Exporter diffère de la configuration des autres exportateurs. La différence la plus notable est la directive targets
, qui répertorie les points finaux sondés au lieu de l'adresse de l'exportateur. L'adresse de l'exportateur est spécifiée à l'aide du jeu d'étiquettes __address__
approprié .
Vous trouverez une explication détaillée des relabel
directives dans la documentation Prometheus .
Votre fichier de configuration Prometheus ressemblera maintenant à ceci :
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9100']
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- http://localhost:8080
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: localhost:9115
Enregistrez le fichier et fermez votre éditeur de texte.
Redémarrez Prometheus pour appliquer les modifications :
systemctl restart prometheus
Assurez-vous qu'il fonctionne comme prévu en vérifiant l'état du service Prometheus :
systemctl status prometheus
Si l'état du service n'est pas active (running)
, vérifiez les journaux à l'écran et retracez les étapes précédentes pour résoudre le problème .
À ce stade, vous avez configuré Prometheus pour extraire les métriques de Blackbox Exporter.