Comment visualiser NGINX Plus avec Prometheus et Grafana

NGINX | 23 septembre 2021

Comme nous l’avons expliqué dans « Comment améliorer la visibilité dans Kubernetes », l’un des principaux défis auxquels sont confrontées les équipes de développement et de livraison d’applications consiste à obtenir des informations sur les performances, la sécurité et la disponibilité des applications. Ces informations permettent aux équipes de résoudre rapidement les problèmes et de se préparer de manière proactive aux pics de trafic.

Les outils de gestion du trafic – tels que les équilibreurs de charge, les proxys inverses, les passerelles d’API et les contrôleurs Ingress – génèrent une multitude d’informations sur l’état de santé de votre application et de votre infrastructure. Vous pouvez suivre ces précieuses métriques en temps réel dans le tableau de bord NGINX Plus, et NGINX Plus peut également transmettre des métriques à des outils de surveillance tiers afin de vous fournir des informations supplémentaires grâce à des visualisations des performances au fil du temps. Deux des outils les plus populaires fonctionnent ensemble pour vous fournir ces graphiques de séries chronologiques :

  • Prometheus – Un projet open source de la Cloud Native Computing Foundation (CNCF) dédié à la surveillance et aux alertes
  • Grafana – Un outil open source de visualisation et d’analyse qui génère des graphiques et d’autres représentations visuelles à partir de bases de données de séries temporelles telles que Prometheus

Le module Prometheus-njs permet de transmettre facilement les métriques de NGINX Plus à Prometheus et Grafana. Il utilise le module JavaScript NGINX (NJS) et l’API NGINX Plus pour exporter les métriques de NGINX Plus vers le serveur Prometheus.

Dans cette démonstration vidéo, nous présentons toutes les étapes nécessaires pour configurer NGINX Plus, Prometheus et Grafana, ainsi que pour créer des graphiques dans Grafana.

 

Pour vous aider à mettre en place votre propre implémentation, nous résumons les étapes dans les sections suivantes, en indiquant les repères temporels correspondants dans la vidéo :

Remarques :

  • Ces instructions reposent sur l’API NGINX Plus et ne fonctionnent donc pas avec NGINX Open Source.
  • Pour utiliser Prometheus et Grafana avec NGINX Ingress Controller, consultez notre documentation.

Prérequis

Avant de commencer la démonstration, nous avons rempli les conditions préalables suivantes.

  1. Installer NGINX Plus sur le serveur NGINX Plus. Pour les besoins de la démonstration, nous effectuons une nouvelle installation initiale. Si vous utilisez un serveur NGINX Plus existant, vous devrez peut-être adapter les modifications apportées aux fichiers de configuration au cours de la démonstration.
  2. Installez le module JavaScript NGINX (njs) sur le serveur NGINX Plus.
  3. Installez la dernière version de Docker sur le serveur Prometheus. Dans cette démonstration, nous suivons la pratique courante qui consiste à exécuter Prometheus sur un second serveur, distinct de NGINX Plus.
  4. Installez la dernière version de Docker sur le serveur Grafana (dans la démonstration, il s’agit d’un troisième serveur).

Configurer le serveur NGINX Plus (1:20)

  1. Installez le module Prometheus-njs. Nous utilisons Ubuntu 20.04 dans cette démonstration, et voici la commande appropriée. Pour les autres systèmes d’exploitation, consultez la documentation.
$ sudo apt-get install nginx-plus-module-prometheus
  1. À l’aide de votre éditeur de texte préféré, ouvrez /etc/nginx/nginx.conf et ajoutez la directive load_module suivante dans le contexte principal, en dehors du bloc http.
load_module modules/ngx_http_js_module.so;
# existing top-level directives

http {
    #...
}
  1. (Facultatif) Augmentez la taille du tampon destiné à stocker les corps de réponse des sous-requêtes (la taille par défaut est de 4 Ko ou 8 Ko, selon la plateforme). Cela évite les erreurs too big subrequest response, qui apparaissent dans le journal des erreurs NGINX. Ajoutez la directive subrequest_output_buffer_size suivante dans le bloc http.
http {    #...
    subrequest_output_buffer_size 32k;
}

  1. Enregistrez nginx.conf et exécutez cette commande pour vérifier que la syntaxe de la configuration NGINX est correcte.
$ sudo nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
  1. Accédez au répertoire « conf.d » et affichez la liste des fichiers.
$ cd conf.d$ ls
default.conf
  1. Le fichier default.conf définit un serveur virtuel qui écoute sur le port 80. Le serveur virtuel de Prometheus doit écouter sur ce port ; supprimez donc default.conf pour le libérer.
$ sudo rm default.conf
  1. À l’aide de l’éditeur de texte de votre choix, créez un nouveau fichier nommé « prometheus.conf », avec le contenu suivant.
js_import /usr/share/nginx-plus-module-prometheus/prometheus.js;

server {
    location = /metrics {
        js_content prometheus.metrics;
    }
 
    location /api {
        api;
    } 
}
  1. La directive js_import indique l’emplacement du code JavaScript NGINX qui convertit les métriques générées par l’API NGINX Plus au format requis par Prometheus. (Il n’est pas nécessaire d’ajouter également une directive load_module pour Prometheus-njs.) Le premier bloc location permet d’accéder aux métriques au format Prometheus. Le second bloc location active l’API NGINX Plus, qui génère les métriques brutes et les expose à Prometheus. Remarque : Dans les environnements de production, nous recommandons vivement de restreindre l’accès à l’API NGINX Plus comme indiqué dans notre documentation. Pour plus d’informations sur le module Prometheus-njs, consultez notre documentation.
  2. Enregistrez prometheus.conf, vérifiez que la syntaxe est correcte comme à l’étape 4, puis exécutez cette commande pour démarrer NGINX Plus.
$ sudo nginx

Configurer le serveur Prometheus (5:30)

  1. Créez un nouveau fichier de configuration Prometheus au format YAML nommé « prometheus.yml » dans le répertoire « /etc/prometheus », avec le contenu suivant (basé sur un fichier de configuration par défaut du site web de Prometheus). Comme indiqué, la seule modification à effectuer consiste à ajouter l’adresse IP et le port du serveur NGINX Plus dans le champ targets.
global:
  scrape_interval: 15s 
  
  external_labels:
    monitor: 'codelab-monitor'
 
scrape_configs:  
  - job_name: 'prometheus'
    
    scrape_interval: 5s
 
    static_configs:
      - targets: ['NGINX_Plus_IP_address:80']
  1. Pour plus d’informations sur la configuration de Prometheus, notamment sur les autres options que vous pouvez inclure dans le fichier de configuration, consultez la documentation de Prometheus.
  2. Enregistrez « prometheus.yml », puis exécutez la commande suivante. Elle télécharge Prometheus depuis Docker Hub et le rend accessible sur le port 9090.
$ sudo docker run --network="host" -d -p 9090:9090 -v ~/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
  1. Dans un navigateur, accédez à l’adresse IP et au port du nouveau serveur Prometheus. Une page comme celle ci-dessous confirme que le serveur fonctionne.
  2. Vérifiez que Prometheus accède au flux de métriques de NGINX Plus. Cliquez sur l’icône en forme de globe située à gauche du bouton Exécuter dans le coin supérieur droit de la fenêtre. Une liste de métriques semblable à la suivante s’affiche.

Configurer le serveur Grafana (9:15)

  1. Exécutez cette commande pour récupérer Grafana depuis Docker Hub et le rendre accessible sur le port 3000 :
[terminal]$ sudo docker run -d -p 3000:3000 grafana/grafana
  1. Pour connaître les autres méthodes d’installation, consultez la documentation de Grafana.
  2. Dans un navigateur, accédez à l’adresse IP et au port du nouveau serveur Grafana. La page de connexion Grafana confirme que le serveur fonctionne.
  3. Connectez-vous en saisissant admin dans les champs Adresse e-mail ou nom d’utilisateur et Mot de passe. Nous vous recommandons vivement de définir un nouveau mot de passe sécurisé lorsque vous y êtes invité, mais, par souci de concision, nous ignorons cette étape dans la démonstration.

  1. Sur la page d’accueil de Grafana qui s’affiche, enregistrez Prometheus en tant que source de données en suivant les instructions de la documentation de Grafana. La vidéo présente les étapes à suivre dans l’interface graphique de Grafana. Remarque : à l’étape 5 des instructions de Grafana, au lieu de l’exemple d’URL indiqué (http://localhost:9090), saisissez l’adresse IP de votre serveur Prometheus (ainsi que le port 9090).
    Après avoir cliqué sur le bouton Save & test à l’étape 7 des instructions de Grafana, l’encadré vert avec une coche et le message Data source is working indiquent que Grafana s’est correctement connecté au serveur Prometheus.

Créer des graphiques NGINX Plus dans Grafana (11:15)

Si Prometheus est utile pour examiner une seule métrique, Grafana permet de visualiser facilement un ensemble de métriques sur un même graphique.

Pour créer un graphique Grafana :

  1. Cliquez sur le signe plus (« + ») dans la barre de navigation située à gauche de la page (voir la capture d’écran de l’étape 4 de la section précédente). Sélectionnez « Tableau de bord » dans le menu déroulant « Créer ».
  2. Cliquez sur la case « Ajouter un panneau vide ».
  3. Sur la page Nouveau tableau de bord/Modifier le panneau qui s’affiche, vérifiez que Prometheus apparaît dans le champ Source de données de l’onglet Requête situé dans la moitié inférieure de la page. Si ce n’est pas le cas, sélectionnez Prometheus dans le menu déroulant.
  4. Saisissez « nginx » dans le champ Metrics browser >. Une liste de métriques NGINX Plus s’affiche.
    Voici de brèves descriptions pour vous donner une idée des informations qu’elles fournissent.
    • nginxplus_connections_accepted – Connexions clientes acceptées
    • nginxplus_connections_active – Connexions clientes actives
    • nginxplus_connections_dropped – Connexions clientes abandonnées
    • nginxplus_connections_idle – Connexions clientes inactives
    • nginxplus_http_requests_current – Requêtes HTTP en cours
    • nginxplus_http_requests_total – Nombre total de requêtes HTTP
    • nginxplus_nginx_meta – Métadonnées NGINX
    • nginxplus_processes_respawned – Nombre total de processus enfants arrêtés anormalement et relancés
    • nginxplus_ssl_handshakes – Négociations SSL réussies
    • nginxplus_ssl_handshakes_failed – Échecs de négociation SSL
    • nginxplus_ssl_session_reuses – Réutilisations de session lors de la négociation SSL
    • nginxplus_workers_mem_private – Mémoire privée utilisée par les processus de travail NGINX, hors bibliothèques partagées
    • nginxplus_workers_mem_rss – Mémoire utilisée par les processus de travail NGINX
  5. Sélectionnez une métrique dans la liste (dans la démonstration, nous sélectionnons nginxplus_connections_active). Pour sélectionner une autre métrique, cliquez sur le bouton + Requête et sélectionnez une autre métrique dans le nouveau champ Explorateur de métriques > (dans la démonstration, nous sélectionnons nginxplus_connections_idle).
  6. Cliquez sur l’icône « Actualiser » (deux flèches formant un cercle) située au-dessus du graphique dans la moitié supérieure de la page. Les résultats commencent alors à s’afficher sur le graphique.

Bonus : informations et analyses unifiées pour tous vos déploiements NGINX Plus

Vous vous demandez peut-être : « Que faire si je dispose d’un déploiement NGINX de grande envergure, comprenant de nombreuses instances NGINX Plus ? » ou « Comment puis-je mettre à jour la configuration de mes instances en fonction des informations et analyses fournies par Prometheus et Grafana ? » NGINX Controller, notre solution de plans de contrôle et de gestion pour les déploiements NGINX, vous aide à répondre à ces questions et à bien d’autres.

Bien que Prometheus et Grafana soient d’excellentes solutions de surveillance, d’alerte et de visualisation, ils ne permettent pas de mettre à jour les configurations et les politiques. Pour agir sur la base de ces informations, il faut encore se connecter à chaque instance NGINX Plus afin d’y apporter des modifications, ce qui peut être chronophage et source d’erreurs, en particulier dans les déploiements NGINX Plus vastes et complexes.

NGINX Controller offre des informations détaillées et des analyses sur plus de 200 métriques NGINX Plus, notamment le nombre de requêtes par seconde, l’utilisation du processeur, les erreurs 4xx et 5xx, les échecs des contrôles d’intégrité et bien plus encore, le tout présenté sur une plateforme intuitive, unifiée et centrée sur les applications. Vous pouvez ensuite explorer les données en profondeur, les exporter dans des rapports et apporter les modifications nécessaires à la configuration et aux politiques en vous appuyant sur des workflows automatisés et adaptés à chaque rôle, conçus par les experts de NGINX pour masquer la complexité.

Avec NGINX Controller, vous pouvez suivre de près vos déploiements d’applications et gérer à grande échelle les instances NGINX Plus ainsi que les objets de configuration (par exemple, les environnements, les passerelles et les applications). Vous n’avez pas non plus à renoncer à vos solutions de surveillance et d’alerte préférées : grâce à la conception API-first de Controller, l’intégration de solutions tierces est particulièrement simple.

 

Démarrer avec NGINX Plus et NGINX Controller

Si vous n’avez pas encore essayé NGINX Plus, nous vous invitons à le découvrir en tant qu’équilibreur de charge, proxy inverse et passerelle d’API, ou en tant que serveur web entièrement pris en charge, doté d’API avancées de surveillance et de gestion. Commencez dès aujourd’hui avec un essai gratuit de 30 jours ou contactez-nous pour discuter de vos cas d’utilisation.

Et si vous pensez que NGINX Controller pourrait être la solution idéale pour visualiser et surveiller votre parc NGINX Plus, découvrez l’essai gratuit de 30 jours qui inclut les modules Application Delivery et API Management, ainsi que Controller App Security.


Partager
Mots-clés : Visibility, F5 NGINX, 2021, Tech

Articles de blog associés

Tendances actuelles des technologies cloud natives, de l’ingénierie de plateforme et de l’IA
NGINX | 13/10/2025

Tendances actuelles des technologies cloud natives, de l’ingénierie de plateforme et de l’IA

Découvrez les principaux enseignements tirés des réponses à l’enquête annuelle F5 NGINX sur les dernières tendances en matière de technologies cloud natives, de sécurité, d’ingénierie de plateforme et d’IA.

Quels contrôleurs Ingress NGINX sont affectés par les vulnérabilités CVE-2022-4886, CVE-2023-5043 et CVE-2023-5044 ?
NGINX | 03/11/2023

Quels contrôleurs Ingress NGINX sont affectés par les vulnérabilités CVE-2022-4886, CVE-2023-5043 et CVE-2023-5044 ?

Lorsque de nouvelles CVE sont signalées, il est facile de ne plus savoir si elles concernent un outil de contrôleur Ingress NGINX particulier, car il existe plusieurs projets. Cet article présente les CVE et explique comment distinguer les différents projets de contrôleurs Ingress afin de dissiper toute confusion.

Votre API est-elle en temps réel ? Testez sa latence avec l’outil rtapi de NGINX
NGINX | 11/03/2020

Votre API est-elle en temps réel ? Testez sa latence avec l’outil rtapi de NGINX

Votre API répond-elle aux requêtes en moins de 30 ms ? Si ce n’est pas le cas, il ne s’agit pas d’une API en temps réel offrant la faible latence exigée par la grande majorité des organisations. Mesurez la latence de votre API avec l’outil rtapi de NGINX et découvrez comment NGINX peut l’aider à offrir une réactivité en temps réel.

Un testeur d’expressions régulières pour NGINX et NGINX Plus
NGINX | 11/06/2019

Un testeur d’expressions régulières pour NGINX et NGINX Plus

Le testeur d’expressions régulières (regex) pour NGINX et NGINX Plus vous évite de tâtonner en vous indiquant si une expression régulière utilisée dans un bloc location ou map correspond aux valeurs comme prévu. Il génère la configuration appropriée et affiche les valeurs des groupes de capture.

Caches partagés avec les clusters de cache NGINX Plus, partie 1
NGINX | 24/01/2017

Caches partagés avec les clusters de cache NGINX Plus, partie 1

Optimisez la capacité de votre cache web en le répartissant entre plusieurs serveurs de cache web NGINX ou NGINX Plus. Découvrez comment procéder dans cet article.

Introduction aux microservices
NGINX | 19/05/2015

Introduction aux microservices

Les microservices suscitent actuellement beaucoup d’intérêt. Cet article de blog est le premier d’une série de sept consacrée à la conception, au développement et au déploiement de microservices.