Mise en œuvre de la supervision système et applicative avec Prometheus et Grafana

Surveillance de bases de données MariaDB et MySQL

L'outil mysqld_exporter permet l'extraction des métriques de performance pour les instances MySQL. Son fonctionnement repose sur une connexion authentifiée à la base de données avec des privilèges restreints.

Déploiement via Docker Stack

Pour un cluster MariaDB Galera, il est recommandé de déployer un exportateur par nœud de base de données. Voici un exemple de configuration docker-compose.yml utilisant un réseau externe nommé monitoring-net :

version: '3.8'

networks:
  monitoring-net:
    external: true

services:
  db-metrics-node1:
    image: quintoandar/mysqld_exporter:latest
    deploy:
      placement:
        constraints:
          - node.hostname == srv-db-01
    networks:
      - monitoring-net
    environment:
      DATA_SOURCE_NAME: "exporter_user:password_secure@(mysql-cluster:3306)/"

  db-metrics-node2:
    image: quintoandar/mysqld_exporter:latest
    deploy:
      placement:
        constraints:
          - node.hostname == srv-db-02
    networks:
      - monitoring-net
    environment:
      DATA_SOURCE_NAME: "exporter_user:password_secure@(mysql-cluster:3306)/"

Intégration dans Prometheus

Dans le fichier prometheus.yml, définissez une tâche de collecte pour regrouper vos cibles de base de données :

scrape_configs:
  - job_name: 'mysql-nodes'
    static_configs:
      - targets:
          - 'db-metrics-node1:9104'
          - 'db-metrics-node2:9104'

Supervision de Microservices Spring Boot

L'intégration de Prometheus dans un écosystème Java Spring Boot nécessite l'utilisation de Micrometer pour exposer les métriques via un point de terminaison HTTP.

Configuration Maven

Ajoutez les dépendances suivantes dans votre fichier pom.xml :

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Paramétrage de l'application (application.yml)

Exposez le point de terminaison Prometheus et activez la collecte détaillée des statistiques de la JVM :

management:
  endpoints:
    web:
      exposure:
        include: 'prometheus,health,info'
  metrics:
    export:
      prometheus:
        enabled: true
    distribution:
      percentiles-histogram:
        http.server.requests: true

Collecte de métriques système avec Node Exporter

node_exporter est l'agent standard pour collecter les ressources matérielles (CPU, RAM, Disque, Réseau) sur les serveurs Linux.

Configuration Docker pour un cluster de serveurs

services:
  system-monitor:
    image: prom/node-exporter:latest
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.rootfs=/rootfs'
      - '--path.sysfs=/host/sys'
    deploy:
      mode: global
    networks:
      - monitoring-net

Monitoring du cache Redis

Pour Redis, l'exportateur peut être configuré pour surveiller plusieurs instances distantes à partir d'un seul conteneur.

Configuration de la tâche de collecte Prometheus

L'exemple ci-dessous illustre l'utilisation du mécanisme de relabeling pour interroger plusieurs instances Redis :

scrape_configs:
  - job_name: 'redis-multi-targets'
    static_configs:
      - targets:
        - redis://10.0.5.10:6379
        - redis://10.0.5.11:6379
    metrics_path: /scrape
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: redis-exporter:9121

Supervsiion RabbitMQ

Depuis la version 3.8.0, RabbitMQ intègre nativement un plugin pour Prometheus, ce qui évite le déploiement d'un agent tiers.

Activation du plugin interne

Exécutez la commande suivante sur vos nœuds RabbitMQ :

rabbitmq-plugins enable rabbitmq_prometheus

Configuration Prometheus pour RabbitMQ

Le point de terminaison par défaut utilise le port 15692 :

scrape_configs:
  - job_name: 'rabbitmq-native'
    static_configs:
      - targets: ['mq-node-01:15692', 'mq-node-02:15692']

Monitoring Elasticsearch

L'exportateur communautaire permet de récupérer l'état de santé du cluster, les statistiques d'indexation et l'utilisation des shards.

services:
  es-exporter:
    image: prometheuscommunity/elasticsearch-exporter:latest
    command:
      - '--es.uri=http://elasticsearch-api:9200'
      - '--es.all'
      - '--es.indices'
    networks:
      - monitoring-net

Une fois les données collectées par Prometheus, l'étape finale consiste à importer les tableaux de bord (Dashboards) correspondants dans Grafana en utilisant les identifiants officiels fournis sur le portail Grafana Labs.

Étiquettes: Prometheus Grafana Docker spring-boot Redis

Publié le 4 juillet à 00h31