BLOG | NGINX

Comment visualiser NGINX Plus avec Prometheus et Grafana

NGINX-Partie-de-F5-horiz-black-type-RGB
Monica Thorne Miniature
Monica Thorne
Publié le 23 septembre 2021

Comme nous l'avons vu dans Comment améliorer la visibilité dans Kubernetes , l'un des principaux défis pour les équipes de développement et de livraison d'applications est d'obtenir un aperçu des performances, de la sécurité et de la disponibilité des applications. Ces informations aident les équipes à résoudre rapidement les problèmes et à 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 API et les contrôleurs d’entrée, génèrent une multitude d’informations sur l’état de votre application et de votre infrastructure. Vous pouvez suivre ces précieuses mesures en temps réel sur le tableau de bord NGINX Plus , et NGINX Plus peut également transmettre des mesures à des outils de surveillance tiers pour vous donner un aperçu supplémentaire à partir de 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) pour la surveillance et l'alerte
  • Grafana – Un outil de visualisation et d’analyse open source qui génère des graphiques et d’autres visualisations à partir de bases de données de séries chronologiques telles que Prometheus

Le module Prometheus-njs permet de transmettre facilement les métriques 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 vidéo de démonstration, nous couvrons les étapes complètes de configuration de NGINX Plus, Prometheus et Grafana, ainsi que de création de graphiques Grafana.

Pour vous aider à configurer votre propre implémentation, nous résumons les étapes dans les sections suivantes, mappées sur des points temporels dans la vidéo :

Remarques :

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

Prérequis

Avant de commencer la démo, nous avons satisfait aux prérequis suivants.

  1. Installez NGINX Plus sur le serveur NGINX Plus. Pour les besoins de la démonstration, nous effectuons une installation initiale propre. Si vous utilisez un serveur NGINX Plus existant, vous devrez peut-être modifier les modifications apportées aux fichiers de configuration pendant la démonstration.
  2. Installez le module NGINX JavaScript (njs) sur le serveur NGINX Plus.
  3. Installez la dernière version de Docker sur le serveur Prometheus. Dans la démonstration, nous suivons la pratique courante et exécutons Prometheus sur un deuxième serveur, distinct de NGINX Plus.
  4. Installez la dernière version de Docker sur le serveur Grafana (dans la démo, un troisième serveur).

Configurer le serveur NGINX Plus (1:20)

  1. Installez le module Prometheus-njs . Nous utilisons Ubuntu 20.04 dans la démo, et c'est la commande appropriée. Pour les autres systèmes d'exploitation, consultez la documentation .

    $ sudo apt-get install nginx-plus-module-prometheus
    
  2. À 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 de niveau supérieur, en dehors du bloc http .

    load_module modules/ngx_http_js_module.so;
    # directives de niveau supérieur existantes
    
    http {
    #...
    }
    
  3. (Facultatif) Augmentez la taille de la mémoire tampon pour 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 de réponse de sous-requête trop importantes , qui apparaissent dans le journal des erreurs NGINX . Ajoutez la directive subrequest_output_buffer_size suivante dans le bloc http .

    http { #...
    taille_tampon_de_sortie_de_la_sous-requête 32 ko ;
    }
    
  4. Enregistrez nginx.conf et exécutez cette commande pour vérifier que la configuration NGINX est syntaxiquement correcte.

    $ sudo nginx -t nginx : la syntaxe du fichier de configuration /etc/nginx/nginx.conf est correcte nginx : le test du fichier de configuration /etc/nginx/nginx.conf est réussi
    
  5. Changez le répertoire vers conf.d et répertoriez les fichiers.

    $ cd conf.d $ ls default.conf
    
  6. Le fichier default.conf définit un serveur virtuel qui écoute sur le port 80. Le serveur virtuel pour Prometheus doit écouter sur ce port, supprimez donc default.conf pour le libérer.

    $ sudo rm default.conf
    
  7. À l’aide de votre éditeur de texte préféré, créez un nouveau fichier appelé prometheus.conf , avec le contenu suivant.

    js_import /usr/share/nginx-plus-module-prometheus/prometheus.js;
    
    serveur {
    emplacement = /metrics {
    js_content prometheus.metrics;
    }
    
    emplacement /api {
    api;
    } 
    }
    

    La directive js_import spécifie 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. (Vous n'avez pas non plus besoin d'ajouter une directive load_module pour Prometheus-njs .)

    Le premier bloc d'emplacement donne accès aux métriques au format Prometheus. Le deuxième bloc d’emplacement active l’ API NGINX Plus , qui génère les métriques brutes et les expose à Prometheus.

    Note: Dans les environnements de production, nous recommandons fortement de restreindre l'accès à l' API NGINX Plus comme décrit dans notre documentation .

    Pour plus d'informations sur le module Prometheus-njs , consultez notre documentation .

  8. Enregistrez prometheus.conf , vérifiez la syntaxe correcte comme à l'étape 4 et 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 appelé prometheus.yml dans le répertoire /etc/prometheus , avec ce contenu (basé sur un fichier de configuration par défaut du site Web Prometheus). Comme indiqué, la seule modification à apporter consiste à ajouter l’adresse IP et le port du serveur NGINX Plus dans le champ des cibles.

    global : intervalle_de_scrap : 15 s external_labels : moniteur : « codelab-monitor » scrape_configs : - job_name : « prometheus » scrape_interval : 5s static_configs : - cibles : [' adresse IP NGINX_Plus : 80']
    

    Pour plus de détails sur la configuration de Prometheus, y compris d'autres options que vous pouvez inclure dans le fichier de configuration, consultez la documentation Prometheus .

  2. Enregistrez prometheus.yml , puis exécutez la commande suivante. Il extrait Prometheus de Docker Hub et l'expose sur le port 9090.

    $ sudo docker run --network="hôte" -d -p 9090:9090 -v ~/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
    
  3. Dans un navigateur, accédez à l’adresse IP et au port du nouveau serveur Prometheus. Une page comme celle-ci confirme que le serveur fonctionne.

  4. Vérifiez que Prometheus accède au flux des métriques NGINX Plus. Cliquez sur l’icône en forme de globe à gauche du bouton Exécuter dans le coin supérieur droit de la fenêtre. Une liste de mesures comme celle-ci apparaît.

Configurer le serveur Grafana (9:15)

  1. Exécutez cette commande pour extraire Grafana de Docker Hub et l'exposer sur le port 3000 :

    [terminal]$ sudo docker run -d -p 3000:3000 grafana/grafana
    

    Pour d'autres méthodes d'installation, consultez la documentation 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 E-mail ou nom d'utilisateur et Mot de passe . Nous vous recommandons fortement de définir un nouveau mot de passe sécurisé lorsque vous y êtes invité, mais nous ignorons cette étape dans la démo pour des raisons de temps.

  4. Sur la page d'accueil de Grafana qui apparaît, enregistrez Prometheus comme source de données en suivant les instructions de la documentation Grafana . La vidéo montre les étapes de l'interface graphique Grafana.

    Note: À l’étape 5 des instructions Grafana, au lieu de l’exemple d’URL affiché ( http://localhost:9090 ), entrez l’adresse IP de votre serveur Prometheus (et le port 9090).

    Après avoir cliqué sur le bouton Enregistrer et tester à l’étape 7 des instructions de Grafana, la case verte avec une coche et le message La source de données fonctionne indiquent que Grafana s’est connecté avec succès au serveur Prometheus.

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

Alors que Prometheus est utile pour examiner une seule métrique, Grafana permet d'examiner facilement une collection de métriques sur un seul graphique.

Pour construire un graphe Grafana :

  1. Cliquez sur le signe plus ( + ) dans la barre de navigation sur le côté gauche de la page (voir la capture d’écran à 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/panneau d’édition qui s’affiche, vérifiez que Prometheus apparaît dans le champ Source de données de l’onglet Requête dans la moitié inférieure de la page. Sinon, sélectionnez Prometheus dans le menu déroulant.

  4. Entrez nginx dans le champ Navigateur de métriques > . Une liste des métriques NGINX Plus apparaît.

    Voici quelques brèves descriptions pour vous donner une idée des informations qu’ils fournissent.

    • nginxplus_connections_accepted – Connexions client acceptées
    • nginxplus_connections_active – Connexions client actives
    • nginxplus_connections_dropped – Les connexions client abandonnées ont été abandonnées
    • nginxplus_connections_idle – Connexions client inactives
    • nginxplus_http_requests_current – Requêtes HTTP actuelles
    • nginxplus_http_requests_total – Nombre total de requêtes HTTP
    • nginxplus_nginx_meta – Méta-informations NGINX
    • nginxplus_processes_respawned – Nombre total de processus enfants anormalement terminés et régénérés
    • nginxplus_ssl_handshakes – Poignées de main SSL réussies
    • nginxplus_ssl_handshakes_failed – Échec des négociations SSL
    • nginxplus_ssl_session_reuses – Réutilisation de session lors de la négociation SSL
    • nginxplus_workers_mem_private – Mémoire privée utilisée par les workers NGINX, n'inclut pas les 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émo, 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 Navigateur de métriques (dans la démo, nous sélectionnons nginxplus_connections_idle ).

  6. Cliquez sur l'icône « Actualiser » (deux flèches formant un cercle) au-dessus du graphique dans la moitié supérieure de la page, et les résultats commencent à apparaître sur le graphique.

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

Vous vous demandez peut-être « Que faire si j'ai un déploiement NGINX important, comprenant de nombreuses instances NGINX Plus ? » ou « Comment puis-je mettre à jour la configuration de mes instances en fonction des informations et des analyses de Prometheus et Grafana ? » NGINX Controller , notre solution de plan 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 fournissent pas de moyen de mettre à jour les configurations et les politiques. Pour prendre des mesures sur la base de ces informations, il faut toujours se connecter à des instances NGINX Plus individuelles pour apporter des modifications, ce qui peut prendre du temps et être sujet aux erreurs, en particulier pour les déploiements NGINX Plus volumineux et complexes.

NGINX Controller offre des informations et des analyses approfondies sur plus de 200 métriques NGINX Plus, notamment les requêtes par seconde, l'utilisation du processeur, 4xx et 5xx erreurs, échecs de contrôle de santé et bien plus encore – le tout présenté dans une plateforme centrée sur les applications, intuitive et unifiée. Vous pouvez ensuite approfondir les données, les exporter dans des rapports et apporter les modifications de configuration et de politique nécessaires en tirant parti de flux de travail automatisés et spécifiques aux rôles, conçus par des experts NGINX pour éliminer la complexité.

Avec NGINX Controller, vous pouvez garder le doigt sur le pouls de vos déploiements d'applications et prendre le contrôle des instances NGINX Plus et des objets de configuration (par exemple, les environnements, les passerelles et les applications) à grande échelle. Et vous n’avez pas à sacrifier l’utilisation de vos solutions de surveillance et d’alerte préférées ; la conception API-first de Controller rend l’intégration avec des solutions tierces très simple et directe.

Premiers pas avec NGINX Plus et NGINX Controller

Si vous n'avez pas essayé NGINX Plus, nous vous encourageons à l'essayer - en tant qu'équilibreur de charge, proxy inverse et passerelle API, ou en tant que serveur Web entièrement pris en charge avec des API de surveillance et de gestion améliorées. 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 le moyen de visualiser et de surveiller votre flotte NGINX Plus, consultez l' essai gratuit de 30 jours qui comprend les modules Application Delivery et API Management avec Controller App Security.


« Cet article de blog peut faire référence à des produits qui ne sont plus disponibles et/ou qui ne sont plus pris en charge. Pour obtenir les informations les plus récentes sur les produits et solutions F5 NGINX disponibles, explorez notre famille de produits NGINX . NGINX fait désormais partie de F5. Tous les liens NGINX.com précédents redirigeront vers un contenu NGINX similaire sur F5.com."