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.
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: Figura 1: Relación entre el objeto de servicio y el monitor
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
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.
los valores .yaml
del controlador de ingreso de NGINXPodemos 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.
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.
Figura 2: Descubrimiento de servicios de Prometheus
Figura 3: Objetivo de Prometeo
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.