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 surveiller un ensemble dynamique de services. Vous définissez les services surveillés à l’aide des sélecteurs d’étiquettes Kubernetes. Cela vous permet d’instaurer des conventions sur la manière d’exposer les métriques. En suivant ces conventions, vous découvrez automatiquement les nouveaux services et Prometheus commence à collecter les métriques sans avoir à reconfigurer le système. ServiceMonitor fait partie de l’Opérateur Prometheus. Ces ressources décrivent et gèrent les cibles de surveillance que Prometheus doit scruter. La ressource Prometheus se connecte à ServiceMonitor grâce au champ Sélecteur ServiceMonitor. Prometheus identifie facilement les cibles prévues pour le scraping. Vous bénéficiez d’un contrôle et d’une flexibilité accrus pour utiliser les ressources ServiceMonitor dans votre cluster Kubernetes afin de superviser des solutions comme NGINX Ingress Controller. Pour simplifier le processus et fournir des métriques prêtes à l’emploi pour NGINX Ingress Controller, nous avons récemment intégré la possibilité d’utiliser Prometheus ServiceMonitor dans notre chart Helm. Cela vous permet d’activer facilement les métriques pour que Prometheus commence à scraper dès le déploiement de NGINX Ingress Controller. Pour exploiter cette fonctionnalité, vous devez ajouter un second service créé spécifiquement pour la collecte des métriques, auquel ServiceMonitor se « connectera ». Cela informe l’opérateur Prometheus sur le service à surveiller (via les étiquettes dans les métadonnées), déterminant ainsi quoi et où scraper. Voici un exemple de ce à quoi ressemblerait un service pour NGINX Ingress Controller dans les fichiers de déploiement ou Helm :


apiVersion: v1
kind: Service
metadata:
  name: nginx-ingress-servicemonitor
  labels:
    app: nginx-ingress-servicemonitor
spec:
  ports:
  - name: prometheus
    protocol: TCP
    port: 9113
    targetPort: 9113
  selector:
    app: 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

Vous devez créer une ressource Prometheus configurée pour rechercher les ressources serviceMonitor, ce qui permet à Prometheus d’identifier rapidement et facilement les points de terminaison à collecter pour les métriques. Dans notre exemple ci-dessous, cette ressource indique à Prometheus les éléments à surveiller dans la spécification. Ici, nous surveillons spec.serviceMonitorSelector.matchLabels:. On voit que Prometheus recherche des matchLabels avec app.nginx-ingress-servicemonitor dans tous les namespaces. Cela correspond à la ressource serviceMonitor déployée par les Helm charts du NGINX Ingress Controller.


apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  name: prometheus
  labels:
    prometheus: prometheus
spec:
  replicas: 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éez et installez la ressource Prometheus

Une fois Prometheus et les CRDs Prometheus installés dans le cluster, vous pouvez créer votre ressource Prometheus. En déployant cela à l'avance, vous préconfigurez votre setup Prometheus avec les labels utilisés dans le chart Helm. Avec cette méthode, Prometheus commencera automatiquement à rechercher le contrôleur NGINX Ingress et à collecter les métriques. Nous déployons la ressource Prometheus avant d’installer le contrôleur NGINX Ingress. Cela permet à prometheus-operator d’identifier et de collecter automatiquement les métriques du contrôleur NGINX Ingress dès son déploiement.


apiVersion: monitoring.coreos.com/v1
kind : Prometheus
metadata :
  name : prometheus
  namespace : default
  labels :
    prometheus : monitoring
spec :
  replicas : 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 examiner le fichier values.yaml du chart Helm. Concentrons-nous sur la section Prometheus, car elle contient les éléments essentiels pour activer Prometheus, créer le service requis, et générer une ressource serviceMonitor. Dans cette section Prometheus, vous trouverez plusieurs paramètres : prometheus.service prometheus.serviceMonitor. Nous allons activer ces deux paramètres pour créer automatiquement le service et le serviceMonitor lors du déploiement avec le chart Helm. Voici le passage précis où nous activons le service, le serviceMonitor et où nous définissons les labels 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, vous devez créer le serviceMonitor. En paramétrant sur vrai et en ajoutant les bonnes étiquettes, vous créez et ajoutez celles 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 .

Après avoir modifié notre values.yaml, vous pouvez installer le contrôleur NGINX Ingress avec la commande helm install nic01 -n nginx-ingress --create-namespace -f values.yaml . Une fois NGINX Ingress Controller déployé, ouvrez le tableau de bord Prometheus et allez dans le menu statut. Vous pourrez y consulter les vues des cibles et de la découverte des services. Dès que Prometheus détectera notre nouvelle ressource ServiceMonitor, il commencera à interroger le point de terminaison et à collecter des métriques visibles immédiatement sur le tableau de bord.

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