Mise en place d'une infrastructure de monitoring avec Prometheus et Grafana

Présentation de l'écosystème Prometheus

Prometheus est une solution logicielle open-source dédiée à la surveillance et à l'alerte de systèmes. Intégré à la Cloud Native Computing Foundation (CNCF) en 2016, il s'est imposé comme le standard après Kubernetes pour le monitoring d'environnements cloud.

Ses caractéristiques principales incluant :

  • Un modèle de données multidimensionnel basé sur des séries temporelles identifiées par des noms de métriques et des paires clé-valeur (labels).
  • Le langage de requête PromQL, puissant et flexible.
  • Une architecture autonome n'utilisant pas de stockage distribué, privilégiant le stockage local.
  • Un mode de collecte de données principalement par pull via HTTP, bien qu'un support pour le push existe via la Pushgateway.
  • Un écosystème riche pour la visualisation de tablaeux de bord.

Architecture de la solution

Une stack complète de monitoring Prometheus se compose généralement des éléments suivants :

  • Serveur Prometheus : Cœur du système qui récupère et stocke les données (TSDB).
  • Exportateurs (Exporters) : Agents chargés d'extraire les métriques des services cibles (système, bases de données, etc.).
  • Alertmanager : Gère les alertes et les notifications (email, Slack, Webhooks).
  • Grafana : Interface graphique avancée pour la visualisation.

Installation et configuration initiale

Déploiement de Prometheus

L'installation peut se faire via les binaires officiels. Voici comment extraire et lancer le service sur un environnement Linux :

# Extraction du paquet
tar -xvf prometheus-2.x.x.linux-amd64.tar.gz -C /usr/local/bin/
cd /usr/local/bin/prometheus-files

# Démarrage du service avec une configuration spécifique
./prometheus --config.file="config_custom.yml" --storage.tsdb.path="./data" &

Alternativement, l'utilisation de Docker simplifie le déploiement :

docker run -d \
    --name mon_prometheus \
    -p 9090:9090 \
    -v /home/user/prometheus/config.yml:/etc/prometheus/prometheus.yml \
    prom/prometheus

Le fichier de configuration minimal (prometheus.yml) ressemble à ceci :

global:
  scrape_interval: 20s # Intervalle de collecte par défaut

scrape_configs:
  - job_name: 'srv-prometheus'
    static_configs:
      - targets: ['localhost:9090']

Surveillance des serveurs avec Node Exporter

Pour monitorer les ressources matérielles (CPU, RAM, Disque), on utilise Node Exporter. Une fois lancé sur le port 9100 par défaut, il faut mettre à jour la configuration de Prometheus :

scrape_configs:
  - job_name: 'nodes-linux'
    static_configs:
      - targets: ['192.168.1.50:9100', '192.168.1.51:9100']

Installation et configuration de Grafana

Grafana permet de transformer les données brutes de Prometheus en graphiques lisibles. Après installation, le service écoute généralement sur le port 3000.

# Lancement de Grafana (binaire)
./grafana-server web

Les étapes pour configurer la visualisation sont :

  1. Accéder à l'interface (admin/admin par défaut).
  2. Ajouter une Data Source : Sélectionner Prometheus et renseigner l'URL (ex: http://localhost:9090).
  3. Importer des Dashboards : Utiliser la bibliothèque officielle de Grafana pour trouver des templates adaptés à Node Exporter ou MySQL.

Cas pratique : Monitoring d'une base de données MySQL

Pour surveiller MySQL, l'exportateur mysqld_exporter est nécessaire. Il requiert un utilisateur dédié avec des privilèges restreints sur la base de données :

-- Création de l'utilisateur de monitoring
CREATE USER 'monitor_agent'@'localhost' IDENTIFIED BY 'pass_securise';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'monitor_agent'@'localhost';
FLUSH PRIVILEGES;

Créez ensuite un fichier de configuration pour l'exportateur (.my.cnf) :

[client]
user=monitor_agent
password=pass_securise

Lancez l'exportateur en spécifiant ce fichier :

./mysqld_exporter --config.my-cnf=".my.cnf" --web.listen-address=":9104" &

Enfin, déclarez cette nouvelle cible dans le fichier prometheus.yml :

  - job_name: 'db-mysql'
    static_configs:
      - targets: ['localhost:9104']

Une fois ces éléments configurés, vous pouvez importer le dashboard MySQL dans Grafana (ID souvent utilisé : 7362) pour visualiser en temps réel les requêtes par seconde, l'état des bufffers et les connexions actives.

Étiquettes: Prometheus Grafana Monitoring devops MySQL

Publié le 27 juin à 23h19