BLOG | NGINX

Contrôleur d'entrée F5 NGINX avec opérateur Prometheus pour des mesures prêtes à l'emploi

NGINX-Partie-de-F5-horiz-black-type-RGB
Vignette de Jason Williams
Jason Williams
Publié le 03 avril 2024

NGINX Ingress Controller de F5 NGINX combiné à l'opérateur Prometheus ServiceMonitor CRD rend la collecte des métriques à partir des déploiements NGINX Ingress Controller beaucoup plus facile et beaucoup plus rapide à l'aide de Helm. Le graphique de gestion NGINX Ingress Controller prend désormais en charge la possibilité de tirer immédiatement parti de votre infrastructure Prometheus et prometheus-operator existante, vous permettant de déployer une carte réseau et de disposer de mesures prêtes à l'emploi exploitant Prometheus ServiceMonitor . Cet article vous explique ce qu'est ServiceMonitor , comment vous pouvez l'installer et comment vous pouvez utiliser le graphique de gestion NGINX Ingress Controller pour définir ces paramètres spécifiques.

Moniteur de service Prometheus

La définition de ressource personnalisée (CRD) Prometheus ServiceMonitor vous permet de définir de manière déclarative comment un ensemble dynamique de services doit être surveillé. Les services surveillés sont définis à l’aide des sélecteurs d’étiquettes Kubernetes. Cela permet à une organisation d’introduire des conventions régissant la manière dont les métriques sont exposées. En suivant ces conventions, les nouveaux services sont automatiquement découverts et Prometheus commence à collecter des métriques sans qu'il soit nécessaire de reconfigurer le système. ServiceMonitor fait partie de l'opérateur Prometheus. Ces ressources décrivent et gèrent les cibles de surveillance à supprimer par Prometheus. La ressource Prometheus se connecte à ServiceMonitor à l’aide d’un champ Sélecteur ServiceMonitor . Prometheus peut facilement identifier les cibles qui ont été marquées pour le scraping. Cela vous donne plus de contrôle et de flexibilité pour exploiter les ressources ServiceMonitor dans votre cluster Kubernetes pour surveiller des solutions telles que NGINX Ingress Controller. Pour simplifier les choses et fournir des mesures prêtes à l'emploi pour NGINX Ingress Controller, nous avons récemment ajouté la possibilité d'utiliser Prometheus ServiceMonitor à notre graphique Helm. Cela facilite grandement l’activation des métriques pour que Prometheus commence le scraping juste après le déploiement de NGINX Ingress Controller. Pour utiliser cette fonctionnalité, nous devons ajouter un deuxième service spécifiquement créé pour la collecte de métriques auquel ServiceMonitor se « rattachera ». Cela indiquera à l'opérateur Prometheus quel service il doit surveiller (en utilisant les étiquettes dans les métadonnées) afin qu'il sache quoi et où récupérer. Exemple de ce à quoi ressemblerait un service pour NGINX Ingress Controller s'il faisait partie des fichiers de déploiement ou de gestion :


apiVersion : v1
type : Service
métadonnées :
nom : nginx-ingress-servicemonitor
étiquettes :
application : nginx-ingress-servicemonitor
spécifications :
ports :
- nom : prometheus
protocole : TCP
port : 9113
targetPort : 9113
sélecteur :
application : nginx-ingress

Ce qui précède fera partie du déploiement. L'étiquette, app: nginx-ingress-servicemonitor « se connecte » au serviceMonitor pour le scraping des métriques Prometheus. Vous trouverez ci-dessous un exemple de serviceMonitor qui serait lié au service ci-dessus nommé nginx-ingress-servicemonitor :


apiVersion : monitoring.coreos.com/v1
type : ServiceMonitor
métadonnées :
nom : nginx-ingress-servicemonitor
étiquettes :
application : nginx-ingress-servicemonitor
spécification :
sélecteur :
matchLabels :
application : nginx-ingress-servicemonitor
points de terminaison :
- port : prometheus

Il est nécessaire de créer une ressource Prometheus, configurée pour rechercher les ressources serviceMonitor , permettant à Prometheus de savoir rapidement et facilement quels points de terminaison récupérer pour les métriques. Dans notre exemple ci-dessous, cette ressource indique à Prometheus quels éléments surveiller selon la spécification. Ci-dessous, nous surveillons spec.serviceMonitorSelector.matchLabels : . Nous pouvons voir que Prometheus recherche des matchLabels avec app.nginx-ingress-servicemonitor dans n'importe quel espace de noms. Cela correspond à la ressource serviceMonitor qui sera déployée par les graphiques Helm et NGINX Ingress Controller.


apiVersion : monitoring.coreos.com/v1
type : Prométhée
métadonnées :
nom : prometheus
étiquettes :
prometheus : prometheus
spécification :
répliques : 1
serviceAccountName : prometheus
serviceMonitorNamespaceSelector : {}
serviceMonitorSelector :
matchLabels :
app : nginx-ingress-servicemonitor
resources :
requests :
memory : 500Mi

Voici un schéma qui relie les différentes pièces : Diagramme ServiceMonitor Figure 1 : relation entre l'objet service et l'objet moniteur

Installation de Prometheus, prometheus-operator et Grafana

Nous allons utiliser prometheus-community/kube-prometheus-stack pour installer le déploiement complet. Cela installera prometheus, prometheus-operator et Grafana. Nous allons également spécifier que nous souhaitons l’installer dans l’espace de noms de surveillance pour l’isolation. Voici comment nous pouvons installer avec helm : helm install metrics01 prometheus-community/kube-prometheus-stack -n monitoring --create-namespace

Créer et installer la ressource Prometheus

Une fois Prometheus et les CRD Prometheus installés dans le cluster, nous pouvons créer notre ressource Prometheus. En déployant cela à l’avance, nous pouvons « pré-plomber » notre configuration Prometheus avec les étiquettes que nous utiliserons dans le graphique de barre. Avec cette approche, nous pouvons automatiquement demander à Prometheus de commencer à rechercher NGINX Ingress Controller et à rechercher des métriques. Notre ressource Prometheus sera déployée avant l'installation de NGINX Ingress Controller. Cela permettra à l' opérateur prometheus de récupérer et de récupérer automatiquement notre contrôleur NGINX Ingress après le déploiement, fournissant ainsi des métriques rapidement.


apiVersion : monitoring.coreos.com/v1
type : Prometheus
métadonnées :
nom : prometheus
espace de noms : par défaut
étiquettes :
prometheus : surveillance
spécification :
répliques : 1
serviceAccountName : prometheus
serviceMonitorNamespaceSelector : {}
serviceMonitorSelector :
matchLabels :
app : nginx-ingress-servicemonitor
resources :
requests :
memory : 500Mi

Notre exemple ci-dessus est un exemple de base. L'élément clé est la valeur spec.serviceMonitorSelector.matchLabels que nous avons spécifiée. Cette valeur est celle que nous allons utiliser lorsque nous déploierons le contrôleur NGINX Ingress avec le graphique Helm. Nous souhaitons fournir des métriques Prometheus prêtes à l'emploi. Pour ce faire, nous allons utiliser le graphique de gestion NGINX Ingress Controller.

Modifications des valeurs du fichier yaml du contrôleur d'entrée NGINX

Nous pouvons consulter le fichier values.yaml pour le graphique helm. Il y a une section Prometheus sur laquelle nous voulons nous concentrer car elle contient les éléments requis pour activer Prometheus, créer le service requis et créer une ressource serviceMonitor . Sous la section Prometheus, nous devrions voir plusieurs paramètres : prometheus.service prometheus.serviceMonitor Nous allons activer les deux paramètres ci-dessus pour générer le service et le serviceMonitor requis lors de l'utilisation du graphique Helm. Voici la section spécifique où nous activons le service, activons serviceMonitor et définissons les étiquettes dans la section serviceMonitor :


La prise en charge de `servicemonitor` a récemment été ajoutée au graphique de gestion du contrôleur NGINX Ingress. 
prometheus :
## Exposez les métriques NGINX ou NGINX Plus au format Prometheus.
create : true

## Configure le port pour récupérer les métriques.
port : 9113

secret : ""

## Configure le schéma HTTP utilisé.
scheme : http

service :
## Nécessite prometheus.create=true
create : true

serviceMonitor :
create : true
labels : { app : nginx-ingress-servicemonitor } 

Décomposer les valeurs ci-dessus :


prometheus :
## Exposez les métriques NGINX ou NGINX Plus au format Prometheus.
create : true

Indique à Helm que vous souhaitez activer le point de terminaison NIC Prometheus. Vous pouvez également définir un port, un schéma et un secret si nécessaire. En définissant la valeur de prometheus.service.create sur true, Helm créera automatiquement le service NIC ServiceMonitor.


service :
## Crée un service ClusterIP pour exposer les métriques Prometheus en interne
## Nécessite prometheus.create=true
create : true

Enfin, nous devons créer le serviceMonitor . Définir cette option sur vrai et ajouter les étiquettes correctes créera et ajoutera les étiquettes qui correspondent à notre ressource Prometheus.


serviceMonitor :
## Crée un serviceMonitor pour exposer des statistiques sur les pods Kubernetes.
create : true
## Étiquettes d'objet Kubernetes à attacher à l'objet serviceMonitor.
labels : { app : nginx-ingress-servicemonitor } 

L'étiquette renvoie au nom du service.labels : { app: nginx-ingress-servicemomentor } Pour résumer. Activez Prometheus, cela expose la capacité d'exportation Prometheus de la carte réseau. Définissez un objet Service, c'est ainsi que Prometheus ServiceMonitor découvre les points de terminaison d'exportation Prometheus de la carte réseau. Définissez un objet serviceMonitor. Cela indique à Prometheus ServiceMonitor de surveiller cet élément.

Nous pouvons maintenant installer NGINX Ingress Controller avec helm .

Une fois que nous avons modifié notre values.yaml , nous pouvons ensuite procéder à l'installation du contrôleur NGINX Ingress. helm install nic01 -n nginx-ingress --create-namespace -f values.yaml . Après avoir déployé NGINX Ingress Controller, nous pouvons ouvrir le tableau de bord Prometheus et accéder au menu d’état. À partir de là, nous pouvons accéder aux cibles et aux vues de découverte de services. Une fois que Prometheus aura localisé notre nouvelle ressource ServiceMonitor, il commencera à gratter le point de terminaison et à collecter des métriques qui seront immédiatement récupérées dans le tableau de bord Prometheus.

Découverte de services Prometheus Figure 2 : Découverte de services Prometheus

Cible Prométhée Figure 3 : Cible Prométhée

Requête Prometheus NGINX Figure 4 : Requête Prometheus NGINX

Nous pouvons voir qu’en utilisant des outils Kubernetes natifs comme Helm et Prometheus, NGINX Ingress Controller peut rendre la collecte de métriques au début du déploiement beaucoup plus facile, en fournissant des « métriques prêtes à l’emploi ». Voici les documents de référence pour l'installation de prometheus-operator : https://prometheus-operator.dev/ https://github.com/prometheus-operator/prometheus-operator


« 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."