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.

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']

Ă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"}

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])

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.

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 :