DevOps and Infrastructure

Maîtriser l'observabilité moderne : Guide complet sur Prometheus et Grafana

Dans le paysage DevOps moderne, la capacité à visualiser et réagir aux métriques d'infrastructure n'est pas un luxe, mais une nécessité. À mesure que les architectures microservices deviennent plus complexes, la journalisation traditionnelle devient insuffisante pour diagnostiquer les goulots d'étranglement ou comprendre la santé du système. C'est ici que la puissante combinaison de Prometheus pour la collecte de données séquentielles et Grafana pour la visualisation entre en jeu. Dans ce guide, nous explorerons comment mettre en place une pile de surveillance robuste qui fournit des informations en temps réel sur votre application et votre infrastructure.

Comprendre l'architecture

Prometheus fonctionne sur une architecture basée sur le tirage (pull-based), ce qui signifie qu'il récupère les métriques des points de configuration définis à intervalles réguliers. Cette approche garantit que Prometheus a un contrôle total sur le processus de récupération, réduisant ainsi la charge sur vos services par rapport aux systèmes basés sur l'envoi (push-based). Grafana, quant à lui, agit comme la couche de présentation. Il se connecte à Prometheus en tant que source de données, vous permettant de créer des tableaux de bord riches et interactifs à l'aide de PromQL (Prometheus Query Language).

Ensemble, ils forment un écosystème découplé : Prometheus gère le stockage et la récupération, tandis que Grafana gère l'expérience utilisateur et la visualisation des alertes. Cette séparation des responsabilités vous permet de mettre à l'échelle chaque composant indépendamment en fonction de vos besoins spécifiques.

Mise en place avec Docker Compose

La méthode la plus efficace pour commencer avec cette pile est d'utiliser Docker Compose. Cette méthode assure la reproductibilité et simplifie le processus de déploiement sur différents environnements, du développement local à la production.

Commencez par créer un fichier docker-compose.yml. Cette configuration lancera trois services : Prometheus, Grafana et une application exemple (dans ce cas, Node Exporter, qui expose les métriques au niveau du système).

version: '3.8'
services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus_data:/prometheus
    ports:
      - "9090:9090"
    networks:
      - monitoring

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
    volumes:
      - grafana_data:/var/lib/grafana
    ports:
      - "3000:3000"
    depends_on:
      - prometheus
    networks:
      - monitoring

  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    ports:
      - "9100:9100"
    networks:
      - monitoring

volumes:
  prometheus_data:
  grafana_data:

networks:
  monitoring:
    driver: bridge

Configuration des cibles Prometheus

Une fois les conteneurs en cours d'exécution, vous devez indiquer à Prometheus où récupérer les métriques. Créez un fichier prometheus.yml dans le même répertoire que votre docker-compose.yml. La configuration ci-dessous définit deux jobs : un pour le serveur Prometheus lui-même (auto-surveillance) et un pour le Node Exporter.

global:
  scrape_interval: 15s

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

  - job_name: 'node'
    static_configs:
      - targets: ['node-exporter:9100']

Avec cette configuration, Prometheus récupérera les métriques toutes les 15 secondes. Vous pouvez vérifier la configuration en accédant à http://localhost:9090/targets dans votre navigateur. Vous devriez voir les jobs prometheus et node répertoriés avec un statut "UP".

Création de votre premier tableau de bord

Avec les données qui s'accumulent dans Prometheus, l'étape suivante est la visualisation. Connectez-vous à Grafana à l'adresse http://localhost:3000 en utilisant les identifiants définis dans le fichier Docker Compose (admin/admin). Allez dans Connexions > Sources de données et ajoutez une nouvelle source de données Prometheus, en pointant vers http://prometheus:9090.

Créez un nouveau tableau de bord et ajoutez un nouveau panneau. Utilisez PromQL pour interroger vos données. Par exemple, pour visualiser l'utilisation du CPU, vous pourriez utiliser la requête 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100). Cette requête calcule le temps CPU inactif moyen sur 5 minutes et le soustrait de 100 % pour obtenir le pourcentage d'utilisation.

Conclusion

Mettre en œuvre Prometheus et Grafana est une étape fondamentale vers l'atteinte d'une véritable observabilité de votre infrastructure. Bien que cette configuration couvre les bases, l'écosystème offre beaucoup plus, notamment des règles d'alerte via Alertmanager et des mécanismes avancés de découverte de services. En adoptant ces outils, vous permettez à votre équipe de passer d'une gestion réactive des incidents à une gestion proactive du système, garantissant ainsi une haute disponibilité et des performances optimales pour vos applications.

Share: