Como explicamos en «Cómo mejorar la visibilidad en Kubernetes», uno de los principales retos para los equipos de desarrollo y entrega de aplicaciones es obtener información sobre el rendimiento, la seguridad y la disponibilidad de las aplicaciones. Esta información ayuda a los equipos a solucionar problemas rápidamente y a prepararse de forma proactiva para los picos de tráfico.
Las herramientas de gestión del tráfico —como los balanceadores de carga, los proxies inversos, las puertas de enlace de API y los controladores de Ingress— generan una gran cantidad de información sobre el estado de su aplicación y su infraestructura. Puede consultar estas valiosas métricas en tiempo real en el panel de NGINX Plus, y NGINX Plus también puede enviar métricas a herramientas de monitorización de terceros para ofrecerle información adicional mediante visualizaciones del rendimiento a lo largo del tiempo. Dos de las herramientas más populares funcionan conjuntamente para proporcionarle estos gráficos de series temporales:
- Prometheus – Un proyecto de código abierto de la Cloud Native Computing Foundation (CNCF) para la monitorización y las alertas
- Grafana – Una herramienta de código abierto para la visualización y el análisis que genera gráficos y otras representaciones visuales a partir de bases de datos de series temporales como Prometheus
El módulo Prometheus-njs permite enviar fácilmente métricas de NGINX Plus a Prometheus y Grafana. Utiliza el módulo JavaScript de NGINX (NJS) y la API de NGINX Plus para exportar métricas de NGINX Plus al servidor de Prometheus.
En esta demostración en vídeo, explicamos todos los pasos para configurar NGINX Plus, Prometheus y Grafana, así como para crear gráficos en Grafana.
 
Para ayudarte a configurar tu propia implementación, resumimos los pasos en las siguientes secciones, vinculados a momentos concretos del vídeo:
- Requisitos previos
- Configurar el servidor NGINX Plus (1:20)
- Configurar el servidor Prometheus (5:30)
- Configurar el servidor de Grafana (9:15)
- Crear gráficos de NGINX Plus en Grafana (11:15)
Notas:
- Estas instrucciones dependen de la API de NGINX Plus, por lo que no funcionan con NGINX Open Source.
- Para usar Prometheus y Grafana con NGINX Ingress Controller, consulte nuestra documentación.
Requisitos previos
Antes de comenzar la demostración, cumplimos los siguientes requisitos previos.
- Instale NGINX Plus en el servidor NGINX Plus. Para esta demostración, realizaremos una instalación inicial limpia. Si utiliza un servidor NGINX Plus existente, es posible que tenga que adaptar los cambios realizados en los archivos de configuración durante la demostración.
- Instale el módulo JavaScript (njs) de NGINX en el servidor NGINX Plus.
- Instale la versión más reciente de Docker en el servidor de Prometheus. En la demostración, seguimos la práctica habitual y ejecutamos Prometheus en un segundo servidor, independiente de NGINX Plus.
- Instale la última versión de Docker en el servidor de Grafana (en la demostración, un tercer servidor).
Configurar el servidor NGINX Plus (1:20)
- Instale el módulo Prometheus-njs. En la demostración utilizamos Ubuntu 20.04, y este es el comando adecuado. Para otros sistemas operativos, consulte la documentación.
$ sudo apt-get install nginx-plus-module-prometheus- Con el editor de texto que prefiera, abra /etc/nginx/nginx.conf y añada la siguiente directiva
load_moduleen el contexto de nivel superior, fuera del bloquehttp.
load_module modules/ngx_http_js_module.so;
# existing top-level directives
http {
#...
}- (Opcional) Aumente el tamaño del búfer para almacenar los cuerpos de respuesta de las subsolicitudes (el tamaño predeterminado es de 4 KB u 8 KB, según la plataforma). Esto evita los errores
toobigsubrequestresponse, que aparecen en el registro de errores de NGINX. Añada la siguiente directivasubrequest_output_buffer_sizeen el bloquehttp.
http { #...
subrequest_output_buffer_size 32k;
}- Guarde nginx.conf y ejecute este comando para verificar que la configuración de NGINX sea sintácticamente correcta.
$ sudo nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful- Cambia al directorio conf.d y enumera los archivos.
$ cd conf.d$ ls
default.conf- El archivo default.conf define un servidor virtual que escucha en el puerto 80. El servidor virtual de Prometheus debe escuchar en ese puerto, así que elimina default.conf para dejarlo libre.
$ sudo rm default.conf- Con el editor de texto que prefiera, cree un archivo nuevo llamado prometheus.conf, con el siguiente contenido.
js_import /usr/share/nginx-plus-module-prometheus/prometheus.js;
server {
location = /metrics {
js_content prometheus.metrics;
}
location /api {
api;
}
}- La directiva
js_importespecifica la ubicación del código JavaScript de NGINX que convierte las métricas generadas por la API de NGINX Plus al formato requerido por Prometheus. (Tampoco es necesario añadir una directivaload_modulepara Prometheus-njs). El primer bloquelocationproporciona acceso a las métricas con formato de Prometheus. El segundo bloquelocationhabilita la API de NGINX Plus, que genera las métricas sin procesar y las expone a Prometheus. Nota: En entornos de producción, recomendamos encarecidamente restringir el acceso a la API de NGINX Plus tal como se describe en nuestra documentación. Para obtener más información sobre el módulo Prometheus-njs, consulte nuestra documentación. - Guarde prometheus.conf, compruebe que la sintaxis sea correcta como se indica en el paso 4 y ejecute este comando para iniciar NGINX Plus.
$ sudo nginxConfigurar el servidor de Prometheus (5:30)
- Cree un nuevo archivo de configuración de Prometheus con formato YAML llamado prometheus.yml en el directorio /etc/prometheus, con el siguiente contenido (basado en un archivo de configuración predeterminado del sitio web de Prometheus). Como se muestra, el único cambio que debe realizar es añadir la dirección IP y el puerto del servidor NGINX Plus en el campo de destinos.
global:
scrape_interval: 15s
external_labels:
monitor: 'codelab-monitor'
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['NGINX_Plus_IP_address:80']- Para obtener más información sobre la configuración de Prometheus, incluidas otras opciones que puede añadir al archivo de configuración, consulte la documentación de Prometheus.
- Guarde prometheus.yml y, a continuación, ejecute el siguiente comando. Este descarga Prometheus de Docker Hub y lo expone en el puerto 9090.
$ sudo docker run --network="host" -d -p 9090:9090 -v ~/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus- En un navegador, acceda a la dirección IP y al puerto del nuevo servidor de Prometheus. Una página como la siguiente confirma que el servidor está funcionando.

- Compruebe que Prometheus esté accediendo al flujo de métricas de NGINX Plus. Haga clic en el icono del globo situado a la izquierda del botón Ejecutar en la esquina superior derecha de la ventana. Aparecerá una lista de métricas como la siguiente.

Configurar el servidor de Grafana (9:15)
- Ejecuta este comando para descargar Grafana de Docker Hub y exponerlo en el puerto 3000:
[terminal]$ sudo docker run -d -p 3000:3000 grafana/grafana- Para consultar otros métodos de instalación, consulte la documentación de Grafana.
- En un navegador, acceda a la dirección IP y al puerto del nuevo servidor de Grafana. La página de inicio de sesión de Grafana confirma que el servidor funciona.

- Inicie sesión introduciendo admin tanto en el campo Correo electrónico o nombre de usuario como en el campo Contraseña. Le recomendamos encarecidamente que establezca una nueva contraseña segura cuando se le solicite, pero en la demostración omitimos ese paso para ahorrar tiempo.
- En la página de inicio de Grafana que aparece, registre Prometheus como fuente de datos siguiendo las instrucciones de la documentación de Grafana. El vídeo muestra los pasos en la interfaz gráfica de Grafana. Nota: En el paso 5 de las instrucciones de Grafana, en lugar de la URL de ejemplo que se muestra (http://localhost:9090), introduzca la dirección IP de su servidor Prometheus (y el puerto 9090). Después de hacer clic en el botón Guardar y probar en el paso 7 de las instrucciones de Grafana, el recuadro verde con una marca de verificación y el mensaje La fuente de datos funciona indican que Grafana se ha conectado correctamente al servidor Prometheus.


Crear gráficos de NGINX Plus en Grafana (11:15)
Aunque Prometheus resulta útil para consultar una sola métrica, Grafana permite visualizar fácilmente un conjunto de métricas en un único gráfico.
Para crear un gráfico de Grafana:
- Haga clic en el signo más (+) de la barra de navegación situada en el lado izquierdo de la página (consulte la captura de pantalla del paso 4 de la sección anterior). Seleccione Panel en el menú desplegable Crear.
- Haz clic en el cuadro «Añadir un panel vacío».
- En la página Nuevo panel/Editar panel que aparece, compruebe que Prometheus figure en el campo Fuente de datos de la pestaña Consulta situada en la mitad inferior de la página. Si no es así, seleccione Prometheus en el menú desplegable.
- Introduzca
nginxen el campo Explorador de métricas >. Aparecerá una lista de métricas de NGINX Plus.A continuación se ofrecen breves descripciones para que se haga una idea de la información que proporcionan.
nginxplus_connections_accepted– Conexiones de clientes aceptadasnginxplus_connections_active– Conexiones de clientes activasnginxplus_connections_dropped– Conexiones de clientes descartadasnginxplus_connections_idle– Conexiones de clientes inactivasnginxplus_http_requests_current– Solicitudes HTTP actualesnginxplus_http_requests_total– Total de solicitudes HTTPnginxplus_nginx_meta– Metainformación de NGINXnginxplus_processes_respawned– Número total de procesos secundarios finalizados de forma anómala y reiniciadosnginxplus_ssl_handshakes– Negociaciones SSL correctasnginxplus_ssl_handshakes_failed– Negociaciones SSL fallidasnginxplus_ssl_session_reuses– Reutilizaciones de sesión durante el protocolo de enlace SSLnginxplus_workers_mem_private– Memoria privada utilizada por los procesos de trabajo de NGINX; no incluye las bibliotecas compartidasnginxplus_workers_mem_rss– Memoria utilizada por los procesos de trabajo de NGINX
- Seleccione una métrica de la lista (en la demostración, seleccionamos
nginxplus_connections_active). Para seleccionar otra métrica, haga clic en el botón « + Consulta» y seleccione otra métrica en el nuevo campo « Explorador de métricas >» (en la demostración, seleccionamosnginxplus_connections_idle). - Haga clic en el icono «Actualizar» (dos flechas que forman un círculo), situado encima del gráfico en la mitad superior de la página, y los resultados empezarán a aparecer en el gráfico.

Extra: información y análisis unificados para todas sus implementaciones de NGINX Plus
Quizá se pregunte: «¿Qué ocurre si tengo un despliegue de NGINX de gran tamaño que incluye muchas instancias de NGINX Plus?» o «¿Cómo puedo actualizar la configuración de mis instancias a partir de la información y los análisis de Prometheus y Grafana?». NGINX Controller, nuestra solución de plano de control y gestión para despliegues de NGINX, le ayuda a resolver estas y muchas otras cuestiones.
Aunque Prometheus y Grafana son soluciones excelentes para la supervisión, las alertas y la visualización, no permiten actualizar configuraciones ni políticas. Para tomar medidas a partir de esta información, sigue siendo necesario iniciar sesión en cada instancia de NGINX Plus y realizar los cambios, lo que puede llevar mucho tiempo y dar lugar a errores, especialmente en implementaciones de NGINX Plus grandes y complejas.

NGINX Controller ofrece información detallada y análisis de las más de 200 métricas de NGINX Plus, incluidas las solicitudes por segundo, el uso de la CPU, los errores 4xx y 5xx, los fallos de las comprobaciones de estado y mucho más, todo ello presentado en una plataforma intuitiva, unificada y centrada en las aplicaciones. A continuación, puede analizar los datos en profundidad, exportarlos en informes y realizar los cambios necesarios en la configuración y las políticas mediante flujos de trabajo automatizados y específicos para cada rol, diseñados por expertos de NGINX para ocultar la complejidad.
Con NGINX Controller, puede mantenerse al tanto del estado de las implementaciones de sus aplicaciones y controlar a gran escala las instancias de NGINX Plus y los objetos de configuración (por ejemplo, entornos, puertas de enlace y aplicaciones). Además, no tiene que renunciar a sus soluciones favoritas de supervisión y alertas; el diseño de Controller, centrado en las API, hace que la integración con soluciones de terceros sea muy sencilla y directa.
 
Empieza a utilizar NGINX Plus y NGINX Controller
Si aún no ha probado NGINX Plus, le animamos a hacerlo, ya sea como equilibrador de carga, proxy inverso y puerta de enlace de API, o como servidor web con soporte completo y API avanzadas de supervisión y gestión. Empiece hoy mismo con una prueba gratuita de 30 días o póngase en contacto con nosotros para hablar sobre sus casos de uso.
Y si cree que NGINX Controller puede ser la solución para visualizar y supervisar su flota de NGINX Plus, pruebe la prueba gratuita de 30 días que incluye los módulos Application Delivery y API Management, además de Controller App Security.
Sobre el autor
Artículos relacionados del blog
Únete a F5 NGINX en AppWorld 2024
Descubre las numerosas razones para asistir al evento insignia de F5, que incluirá un emocionante anuncio sobre la cartera de productos NGINX.
Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source
La función de diccionario compartido permite configurar NGINX sin necesidad de reiniciarlo al renovar los certificados SSL/TLS.
Exposición de APIs en Kubernetes
La unidad 2 de Microservices March 2022 se centra en cómo exponer tus API en Kubernetes. Aquí tienes enlaces a los recursos que necesitas: la retransmisión en directo del 14 de marzo, artículos de blog y otros recursos de preparación, y el laboratorio práctico «Protege las API de Kubernetes mediante la limitación de solicitudes».
NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto
Hoy, en NGINX Sprint 2.0, anunciamos cómo respaldaremos nuestra visión del futuro de las aplicaciones modernas con una mayor presencia en la comunidad de código abierto, incluida la participación en el proyecto comunitario Kubernetes, nuevos proyectos de software de código abierto y la arquitectura de referencia para aplicaciones modernas.
Presentamos NGINX Plus R22
NGINX Plus R22 incorpora nuevas funcionalidades, como la compatibilidad con OCSP para verificar la revocación de certificados en TLS mutuo, el uso de varios proveedores de identidad OIDC en una configuración, el seguimiento en tiempo real de la limitación de solicitudes y conexiones en el panel de NGINX Plus y mejoras en NGINX JavaScript.
Presentamos NGINX Plus R17
NGINX Plus R17 incorpora compatibilidad con la limitación de velocidad en dos fases y con TLS 1.3, la versión más reciente del protocolo Transport Layer Security. La configuración de OpenID Connect es más sencilla y NGINX ModSecurity WAF es el doble de rápido que antes. También se ha actualizado el módulo JavaScript de NGINX.