Surveillance des déploiements Azure : Prometheus et Grafana avec Ansible

01 Mai 2025

📊 Dans ce projet, j’ai amĂ©liorĂ© mon dĂ©ploiement sur Azure Kubernetes Service (AKS) en intĂ©grant la surveillance avec Prometheus et Grafana, configurĂ©s via Ansible. Voici comment j’ai construit une solution de monitoring robuste pour mon application Node.js !

Aperçu du projet

Mon objectif Ă©tait de surveiller mon application Node.js (`azuredev-appservice`) exĂ©cutĂ©e sur AKS, en suivant les taux de requĂȘtes HTTP pour les endpoints comme `/`, `/api/stocks` et `/metrics`. J’ai utilisĂ© Ansible pour automatiser l’installation de Prometheus et Grafana, configurĂ© des mĂ©triques personnalisĂ©es et créé des tableaux de bord pour visualiser les donnĂ©es.

Étape 1 : Installation de Prometheus et Grafana avec Ansible

J’ai commencĂ© par crĂ©er un playbook Ansible pour installer Prometheus et Grafana sur mon cluster AKS. Le playbook (`ansible/install_prometheus_grafana.yml`) a installĂ© ces outils dans l’espace de noms `monitoring` en utilisant des charts Helm et a configurĂ© Prometheus pour scraper l’endpoint `/metrics` de mon application.

Playbook Ansible pour Prometheus et Grafana

AprĂšs avoir installĂ© Ansible localement avec `brew install ansible`, j’ai exĂ©cutĂ© le playbook :

ansible-playbook ansible/install_prometheus_grafana.yml

Cela a configuré Prometheus et Grafana en tant que services LoadBalancer, les exposant via des IPs externes.

Étape 2 : Configuration des mĂ©triques dans l’application Node.js

Mon fichier `server.js` disposait dĂ©jĂ  d’un endpoint `/metrics` utilisant la bibliothĂšque `prom-client` pour exposer des mĂ©triques personnalisĂ©es comme `http_requests_total`. J’ai vĂ©rifiĂ© que Prometheus Ă©tait configurĂ© pour scraper cet endpoint en ajoutant un job nommĂ© `azuredev-appservice` dans le playbook Ansible :

- job_name: 'azuredev-appservice'
          metrics_path: /metrics
          scrape_timeout: 15s
          static_configs:
            - targets: ['132.220.10.28:80']
Configuration des métriques Prometheus

Étape 3 : VĂ©rification des mĂ©triques dans Prometheus

J’ai accĂ©dĂ© Ă  l’interface de Prometheus Ă  `http://128.251.236.207:9090` et vĂ©rifiĂ© dans **Status > Targets** que le job `azuredev-appservice` Ă©tait "UP". J’ai ensuite interrogĂ© `http_requests_total` pour voir les mĂ©triques de mes endpoints :

http_requests_total{job="azuredev-appservice", method="GET", route="/api/stocks", status="200"}
Vérification des cibles dans Prometheus

Les mĂ©triques Ă©taient prĂ©sentes, mais `/api/stocks` n’apparaissait pas initialement Ă  cause d’un problĂšme de barre oblique finale dans l’étiquette de route. J’ai corrigĂ© cela en normalisant la route dans `server.js`.

Étape 4 : CrĂ©ation de tableaux de bord dans Grafana

J’ai accĂ©dĂ© Ă  Grafana Ă  `http://128.251.236.208:3000` en utilisant les identifiants admin (`admin/admin123`). J’ai créé un nouveau tableau de bord nommĂ© "TaskOne" et ajoutĂ© des panneaux pour surveiller les taux de requĂȘtes HTTP :

rate(http_requests_total{job="azuredev-appservice", method="GET", route="/api/stocks", status="200"}[5m])
Tableau de bord Grafana pour les requĂȘtes HTTP

J’ai Ă©galement importĂ© un tableau de bord prĂ©configurĂ© en utilisant un modĂšle JSON pour visualiser d’autres mĂ©triques comme `/` et `/metrics`.

Défi 1 : Métriques manquantes pour `/api/stocks`

Initialement, les mĂ©triques de `/api/stocks` manquaient car l’endpoint Ă©chouait Ă  cause de problĂšmes avec la bibliothĂšque `yahoo-finance2`. J’ai ajoutĂ© une gestion des erreurs dans `server.js` pour m’assurer que l’endpoint renvoie toujours un statut `200`, mĂȘme si certaines donnĂ©es boursiĂšres Ă©chouaient Ă  ĂȘtre rĂ©cupĂ©rĂ©es.

Correction des métriques de /api/stocks

Défi 2 : Barre oblique finale dans les étiquettes de route

L’étiquette `route` pour `/api/stocks` incluait parfois une barre oblique finale (`/api/stocks/`), ce qui faisait que la requĂȘte Grafana ne la dĂ©tectait pas. J’ai mis Ă  jour la requĂȘte pour utiliser une expression rĂ©guliĂšre (`route=~"/api/stocks.*"`) et normalisĂ© la route dans le middleware de l’application.

Vérification

AprĂšs avoir gĂ©nĂ©rĂ© du trafic avec `curl`, le tableau de bord Grafana affichait les taux de requĂȘtes pour tous les endpoints. Le tableau de bord "NodeJS Application Dashboard" offrait Ă©galement des informations sur l’utilisation du CPU, la mĂ©moire et le dĂ©calage de la boucle d’évĂ©nements, confirmant la santĂ© de l’application.

for i in {1..20}; do curl --connect-timeout 20 http://132.220.10.28/api/stocks; sleep 1; done

Leçons apprises

  • Ansible simplifie la configuration d’outils de surveillance comme Prometheus et Grafana.
  • Les mĂ©triques personnalisĂ©es nĂ©cessitent une gestion minutieuse des Ă©tiquettes—attention aux incohĂ©rences comme les barres obliques finales.
  • Les tableaux de bord prĂ©configurĂ©s (par exemple, NodeJS Application Dashboard) sont excellents pour obtenir rapidement des informations sur les performances de l’application.
  • GĂ©nĂ©rez toujours du trafic pour tester les mĂ©triques et les tableaux de bord aprĂšs la configuration.

Cette configuration de surveillance m’a offert des informations prĂ©cieuses sur les performances de mon application. J’ai hĂąte d’explorer des requĂȘtes Prometheus plus avancĂ©es et des visualisations Grafana dans de futurs projets ! Partagez vos astuces de surveillance ci-dessous !

Hashtags :

Partagez cet article :