BLOG | NGINX

Controlador de ingreso F5 NGINX con operador Prometheus para métricas preconfiguradas

NGINX - Parte de F5 - horizontal, negro, tipo RGB
Miniatura de Jason Williams
Jason Williams
Publicado el 3 de abril de 2024

El controlador de ingreso NGINX de F5 NGINX combinado con el operador Prometheus ServiceMonitor CRD hace que la recopilación de métricas de las implementaciones del controlador de ingreso NGINX sea mucho más fácil y rápida utilizando Helm. El gráfico de Helm del controlador de ingreso NGINX ahora admite la capacidad de aprovechar de inmediato su infraestructura existente de Prometheus y prometheus-operator, lo que le permite implementar NIC y tener métricas listas para usar aprovechando Prometheus ServiceMonitor . Este artículo le explica qué es ServiceMonitor , cómo instalarlo y cómo usar el gráfico de Helm del controlador de ingreso NGINX para definir estas configuraciones específicas.

Monitor de servicios Prometheus

La definición de recurso personalizado (CRD) de Prometheus ServiceMonitor le permite definir de manera declarativa cómo se debe monitorear un conjunto dinámico de servicios. Los servicios monitoreados se definen utilizando selectores de etiquetas de Kubernetes. Esto permite que una organización introduzca convenciones que rijan cómo se exponen las métricas. Siguiendo estas convenciones, se descubren automáticamente nuevos servicios y Prometheus comienza a recopilar métricas sin la necesidad de reconfigurar el sistema. ServiceMonitor es parte del operador Prometheus. Estos recursos describen y administran los objetivos de monitoreo que Prometheus debe rastrear. El recurso Prometheus se conecta a ServiceMonitor mediante un campo Selector de ServiceMonitor . Prometheus puede identificar fácilmente qué objetivos han sido marcados para ser raspados. Esto le brinda más control y flexibilidad para aprovechar los recursos de ServiceMonitor en su clúster de Kubernetes para monitorear soluciones como NGINX Ingress Controller. Para facilitar las cosas y proporcionar métricas listas para usar para NGINX Ingress Controller, recientemente agregamos la capacidad de usar Prometheus ServiceMonitor a nuestro gráfico de Helm. Esto hace que sea bastante fácil habilitar métricas para que Prometheus comience a rastrear inmediatamente después de implementar NGINX Ingress Controller. Para utilizar esta función, necesitamos agregar un segundo servicio creado específicamente para la recopilación de métricas al que ServiceMonitor se “adjuntará”. Esto le indicará al operador de Prometheus qué servicio debe monitorear (usando las etiquetas en los metadatos) para que sepa qué y dónde raspar. Ejemplo de cómo se vería un servicio para NGINX Ingress Controller si fuera parte de los archivos de implementación o de Helm:


Versión de API: v1
Tipo: Servicio
Metadatos:
Nombre: nginx-ingress-servicemonitor
Etiquetas:
Aplicación: nginx-ingress-servicemonitor
Especificaciones:
Puertos:
Nombre: prometheus
Protocolo: Puerto TCP: 9113
Puerto de destino: 9113
Selector:
Aplicación: nginx-ingress

Lo anterior será parte del despliegue. La etiqueta, aplicación: nginx-ingress-servicemonitor “se conecta” al serviceMonitor para el raspado de métricas de Prometheus. A continuación se muestra un ejemplo de serviceMonitor que se vincularía al servicio anterior llamado nginx-ingress-servicemonitor :


Versión de API: monitoring.coreos.com/v1
Tipo: Monitor de servicio
Metadatos:
Nombre: nginx-ingress-servicemonitor
Etiquetas:
Aplicación: nginx-ingress-servicemonitor
Especificación:
Selector:
Etiquetas de coincidencia:
Aplicación: nginx-ingress-servicemonitor
Puntos finales:
Puerto: Prometheus

Es necesario crear un recurso Prometheus, que esté configurado para buscar los recursos de serviceMonitor , lo que permite que Prometheus sepa de manera rápida y sencilla qué puntos finales debe analizar para obtener métricas. En nuestro ejemplo a continuación, este recurso le dice a Prometheus qué elementos monitorear según la especificación. A continuación, monitoreamos spec.serviceMonitorSelector.matchLabels: . Podemos ver que Prometheus está buscando matchLabels con app.nginx-ingress-servicemonitor en cualquier espacio de nombres. Esto coincide con el recurso serviceMonitor que será implementado por los gráficos de Helm y Helm del controlador de ingreso NGINX.


Versión de API: monitoring.coreos.com/v1
Tipo: Prometeo
Metadatos:
Nombre: Prometeo
Etiquetas:
Prometeo: Prometeo
Especificaciones:
Réplicas: 1
NombreDeCuentaDeServicio: prometheus
SelectorDeEspacioDeNombresDeMonitorDeServicio: {}
SelectorDeMonitorDeServicio:
EtiquetasDeCoincidencia:
aplicación: nginx-ingress-servicemonitor
recursos:
solicitudes:
memoria: 500 millas

Aquí hay un diagrama que conecta las diferentes piezas: Diagrama de ServiceMonitor Figura 1: Relación entre el objeto de servicio y el monitor

Instalación de Prometheus, prometheus-operator y Grafana

Utilizaremos prometheus-community/kube-prometheus-stack para instalar la implementación completa. Esto instalará prometheus, prometheus-operator y Grafana. También vamos a especificar que queremos instalar esto en el espacio de nombres de monitoreo para el aislamiento. Así es como podemos instalar con Helm: helm install metrics01 prometheus-community/kube-prometheus-stack -n monitoring --create-namespace

Crear e instalar el recurso Prometheus

Una vez que Prometheus y los CRD de Prometheus estén instalados en el clúster, podemos crear nuestro recurso Prometheus. Al implementar esto con anticipación, podemos “pre-preinstalar” nuestra configuración de Prometheus con las etiquetas que usaremos en el gráfico del timón. Con este enfoque, podemos hacer que Prometheus comience a buscar automáticamente el controlador de ingreso NGINX y a extraer métricas. Nuestro recurso Prometheus se implementará antes de instalar NGINX Ingress Controller. Esto permitirá que el operador prometheus recoja y rastree automáticamente nuestro controlador NGINX Ingress después de la implementación, brindando métricas rápidamente.


Versión de API: monitoring.coreos.com/v1
Tipo: Prometheus
Metadatos:
Nombre: Prometheus
Espacio de nombres: Predeterminado
Etiquetas:
Prometheus: Monitoreo
Especificaciones:
Réplicas: 1
NombreDeCuentaDeServicio: prometheus
SelectorDeEspacioDeNombresDeMonitorDeServicio: {}
SelectorDeMonitorDeServicio:
EtiquetasDeCoincidencia:
aplicación: nginx-ingress-servicemonitor
recursos:
solicitudes:
memoria: 500 millas

Nuestro ejemplo anterior es un ejemplo básico. La parte clave es el valor spec.serviceMonitorSelector.matchLabels que especificamos. Este valor es el que vamos a utilizar cuando implementemos el controlador NGINX Ingress con el gráfico Helm. Queremos proporcionar métricas de Prometheus listas para usar. Para ello, vamos a utilizar el gráfico Helm del controlador de ingreso NGINX.

Cambios en los valores .yaml del controlador de ingreso de NGINX

Podemos revisar el archivo values.yaml para el gráfico de Helm. Hay una sección de Prometheus en la que queremos centrarnos, ya que tiene las piezas necesarias para habilitar Prometheus, crear el servicio requerido y crear un recurso serviceMonitor . En la sección Prometheus, deberíamos ver varias configuraciones: prometheus.service prometheus.serviceMonitor Vamos a habilitar ambas configuraciones anteriores para generar el servicio y serviceMonitor requeridos al usar el gráfico de Helm. Aquí está la sección específica donde habilitamos el servicio, habilitamos serviceMonitor y definimos las etiquetas en la sección serviceMonitor :


Recientemente se añadió compatibilidad con `servicemonitor` al gráfico de Helm del controlador de NGINX Ingress.
prometheus:
## Exponer las métricas de NGINX o NGINX Plus en formato Prometheus.
create: true

## Configura el puerto para extraer las métricas.
port: 9113

secreto: ""

## Configura el esquema HTTP utilizado.
esquema: http

servicio:
## Requiere prometheus.create=true
crear: verdadero

serviceMonitor:
crear: verdadero
etiquetas: { app: nginx-ingress-servicemonitor } 

Desglosando los valores de lo anterior:


Prometheus:
## Exponer métricas de NGINX o NGINX Plus en formato Prometheus.
create: true

Le dice a Helm que desea habilitar el punto final NIC Prometheus. También puede definir un puerto, un esquema y un secreto si es necesario. Al establecer el valor de prometheus.service.create en verdadero, Helm creará automáticamente el servicio NIC ServiceMonitor.


Servicio:
## Crea un servicio ClusterIP para exponer las métricas de Prometheus internamente.
## Requiere prometheus.create=true.
create: true

Por último, necesitamos crear el serviceMonitor . Si establece esto como verdadero y agrega las etiquetas correctas, se crearán y agregarán las etiquetas que coincidan con nuestro recurso Prometheus.


serviceMonitor:
## Crea un serviceMonitor para mostrar estadísticas sobre los pods de Kubernetes.
create: true
## Etiquetas de objeto de Kubernetes para asociar al objeto serviceMonitor.
labels: { app: nginx-ingress-servicemonitor } 

La etiqueta se vincula al nombre del servicio.etiquetas: { app: nginx-ingress-servicemointor } Para resumir. Habilite Prometheus para habilitar la función de exportación de Prometheus de NIC. Defina un objeto de servicio; así es como Prometheus ServiceMonitor detecta los endpoints de exportación de Prometheus de NIC. Define un objeto serviceMonitor. Esto le dice a Prometheus ServiceMonitor que monitoree esto.

Ahora podemos instalar NGINX Ingress Controller con helm .

Una vez que hayamos modificado nuestro values.yaml , podemos proceder a instalar el controlador NGINX Ingress. helm install nic01 -n nginx-ingress --create-namespace -f values.yaml . Después de implementar NGINX Ingress Controller, podemos abrir el panel de Prometheus y navegar al menú de estado. Desde allí podemos navegar hasta los objetivos y las vistas de descubrimiento de servicios. Una vez que Prometheus localiza nuestro nuevo recurso ServiceMonitor, comenzará a rastrear el punto final y a recopilar métricas que se recogen inmediatamente en el panel de Prometheus.

Descubrimiento de servicios de Prometheus Figura 2: Descubrimiento de servicios de Prometheus

Objetivo de Prometeo Figura 3: Objetivo de Prometeo

Consulta NGINX de Prometheus Figura 4: Consulta NGINX de Prometheus

Podemos ver que al usar herramientas nativas de Kubernetes como Helm y Prometheus, NGINX Ingress Controller puede hacer que la recopilación de métricas al inicio de la implementación sea mucho más fácil, brindando métricas listas para usar. Aquí hay documentos de referencia para instalar prometheus-operator : https://prometheus-operator.dev/ https://github.com/prometheus-operator/prometheus-operator


"Esta publicación de blog puede hacer referencia a productos que ya no están disponibles o que ya no reciben soporte. Para obtener la información más actualizada sobre los productos y soluciones F5 NGINX disponibles, explore nuestra familia de productos NGINX . NGINX ahora es parte de F5. Todos los enlaces anteriores de NGINX.com redirigirán a contenido similar de NGINX en F5.com.