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. Alertmanager est un outil de traitement des alertes, qui déduplique , regroupe et envoie des alertes au destinataire approprié. Il peut gérer les alertes des applications clientes telles que Prometheus, et il prend en charge de nombreux récepteurs, mails ou messagerie instantanée.

Grâce aux nombreux exportateurs Prometheus disponibles, vous pouvez configurer des alertes pour chaque partie de votre infrastructure, y compris les serveurs Web et de base de données , les systèmes de messagerie ou les API .

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 useraddcommande en utilisant les indicateurs --no-create-homeet --shell /bin/falseafin 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 8080via 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 systemdd'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 systemdpour 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 8080que 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 9115avec 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 relabeldirectives 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.

Me faire un don

Si vous appréciez le contenu de mes articles :

Boris
Dinan, Bretagne