BLOG | NGINX

Cómo visualizar NGINX Plus con Prometheus y Grafana

NGINX - Parte de F5 - horizontal, negro, tipo RGB
Miniatura de Monica Thorne
Mónica Thorne
Publicado el 23 de septiembre de 2021

Como comentamos en Cómo mejorar la visibilidad en Kubernetes , uno de los principales desafíos para los equipos de desarrollo y entrega de aplicaciones es obtener información sobre el rendimiento, la seguridad y la disponibilidad de las aplicaciones. Estos conocimientos ayudan a los equipos a solucionar problemas rápidamente y prepararse de forma proactiva para los picos de tráfico.

Las herramientas de gestión de tráfico, como balanceadores de carga, servidores proxy inversos, puertas de enlace de API y controladores de ingreso, generan una gran cantidad de información sobre el estado de su aplicación y su infraestructura. Puede realizar un seguimiento de estas valiosas métricas en tiempo real en el panel de NGINX Plus , y NGINX Plus también puede alimentar métricas a herramientas de monitoreo de terceros para brindarle información adicional a partir de visualizaciones del rendimiento a lo largo del tiempo. Dos de las herramientas más populares trabajan juntas para brindarle estos gráficos de series de tiempo:

  • Prometheus : un proyecto de código abierto de la Cloud Native Computing Foundation (CNCF) para monitorizar y alertar
  • Grafana : una herramienta de visualización y análisis de código abierto que genera gráficos y otras visualizaciones a partir de bases de datos de series temporales como Prometheus

El módulo Prometheus-njs facilita la alimentación de métricas NGINX Plus a Prometheus y Grafana. Utiliza el módulo JavaScript NGINX (NJS) y la API NGINX Plus para exportar métricas desde NGINX Plus al servidor Prometheus.

En esta demostración en video, cubrimos los pasos completos para configurar NGINX Plus, Prometheus y Grafana, y crear gráficos de Grafana.

Para ayudarlo a configurar su propia implementación, resumimos los pasos en las siguientes secciones, mapeados a puntos de tiempo en el video:

Notas:

  • Estas instrucciones se basan en la API NGINX Plus y, por lo tanto, no funcionan con NGINX Open Source.
  • Para utilizar Prometheus y Grafana con NGINX Ingress Controller, consulte nuestra documentación .

Requisitos previos

Antes de comenzar la demostración, cumplimos los siguientes requisitos previos.

  1. Instalar NGINX Plus en el servidor NGINX Plus. Para los fines de la demostración, realizaremos una instalación inicial limpia. Si está utilizando un servidor NGINX Plus existente, es posible que deba modificar los cambios realizados en los archivos de configuración durante la demostración.
  2. Instale el módulo NGINX JavaScript (njs) en el servidor NGINX Plus.
  3. Instale la última versión de Docker en el servidor Prometheus. En la demostración, seguimos la práctica común y ejecutamos Prometheus en un segundo servidor, separado de NGINX Plus.
  4. Instale la última versión de Docker en el servidor Grafana (en la demostración, un tercer servidor).

Configurar el servidor NGINX Plus (1:20)

  1. Instalar el módulo Prometheus-njs . Estamos usando Ubuntu 20.04 en la demostración y este es el comando apropiado. Para otros sistemas operativos, consulte la documentación .

    $ sudo apt-get install nginx-plus-module-prometheus
    
  2. Usando su editor de texto preferido, abra /etc/nginx/nginx.conf y agregue la siguiente directiva load_module en el contexto de nivel superior, fuera del bloque http .

    load_module modules/ngx_http_js_module.so;
    # directivas de nivel superior existentes
    
    http {
    #...
    }
    
  3. (Opcional) Aumente el tamaño del búfer para almacenar los cuerpos de respuesta de las subsolicitudes (el tamaño predeterminado es 4 KB u 8 KB , según la plataforma). Esto evita errores de respuesta de subsolicitud demasiado grandes , que aparecen en el registro de errores de NGINX . Agregue la siguiente directiva subrequest_output_buffer_size en el bloque http .

    http { #...
    tamaño del búfer de salida de la subsolicitud 32k;
    
  4. Guarde nginx.conf y ejecute este comando para verificar que la configuración de NGINX sea sintácticamente correcta.

    $ sudo nginx -t nginx: la sintaxis del archivo de configuración /etc/nginx/nginx.conf es correcta nginx: la prueba del archivo de configuración /etc/nginx/nginx.conf es exitosa
    
  5. Cambie el directorio a conf.d y enumere los archivos.

    $ cd conf.d $ ls predeterminado.conf
    
  6. El archivo default.conf define un servidor virtual que escucha en el puerto 80. El servidor virtual de Prometheus necesita escuchar en ese puerto, así que elimine default.conf para liberarlo.

    $ sudo rm default.conf
    
  7. Usando su editor de texto preferido, cree un nuevo archivo llamado prometheus.conf , con el siguiente contenido.

    js_import /usr/share/nginx-plus-module-prometheus/prometheus.js;
    
    servidor {
    ubicación = /métricas {
    js_content prometheus.métricas;
    }
    
    ubicación /api {
    api;
    } 
    }
    

    La directiva js_import especifica 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 agregar una directiva load_module para Prometheus-njs ).

    El primer bloque de ubicación proporciona acceso a las métricas con formato Prometheus. El segundo bloque de ubicación habilita la API 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 NGINX Plus como se describe en nuestra documentación .

    Para obtener más información sobre el módulo Prometheus-njs , consulte nuestra documentación .

  8. Guarde prometheus.conf , verifique la sintaxis correcta como en el Paso 4 y ejecute este comando para iniciar NGINX Plus.

    $ sudo nginx
    

Configurar el servidor Prometheus (5:30)

  1. Cree un nuevo archivo de configuración de Prometheus con formato YAML llamado prometheus.yml en el directorio /etc/prometheus , con este contenido (basado en un archivo de configuración predeterminado del sitio web de Prometheus). Como se muestra, el único cambio a realizar es agregar la dirección IP y el puerto del servidor NGINX Plus en el campo de objetivos.

    global: intervalo_de_raspado: 15 s etiquetas_externas: monitor: 'codelab-monitor' configuraciones_scrape: - nombre_trabajo: 'prometheus' intervalo_scrape: 5s static_configs: - objetivos: [' NGINX_Plus_IP_address :80']
    

    Para obtener detalles sobre la configuración de Prometheus, incluidas más opciones que puede incluir en el archivo de configuración, consulte la documentación de Prometheus .

  2. Guarde prometheus.yml y luego ejecute el siguiente comando. Extrae 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
    
  3. En un navegador, navegue hasta la dirección IP y el puerto del nuevo servidor Prometheus. Una página como la siguiente confirma que el servidor está funcionando.

  4. Verifique que Prometheus esté accediendo a la fuente de métricas de NGINX Plus. Haga clic en el icono del globo terráqueo a la izquierda del botón Ejecutar en la esquina superior derecha de la ventana. Aparece una lista de métricas como la siguiente.

Configurar el servidor Grafana (9:15)

  1. Ejecute este comando para extraer Grafana de Docker Hub y exponerlo en el puerto 3000:

    [terminal]$ sudo docker run -d -p 3000:3000 grafana/grafana
    

    Para otros métodos de instalación, consulte la documentación de Grafana .

  2. En un navegador, navegue hasta la dirección IP y el puerto del nuevo servidor Grafana. La página de inicio de sesión de Grafana confirma que el servidor está funcionando.

  3. Inicie sesión ingresando admin en los campos de correo electrónico o nombre de usuario y contraseña . Le recomendamos encarecidamente que establezca una nueva contraseña segura cuando se le solicite, pero omitimos ese paso en la demostración por cuestiones de tiempo.

  4. 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 GUI de Grafana.

    Nota:  En el paso 5 de las instrucciones de Grafana, en lugar del ejemplo de URL que se muestra ( http://localhost:9090 ), ingrese 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 cuadro verde con una marca de verificación y el mensaje La fuente de datos está funcionando indican que Grafana se ha conectado exitosamente al servidor Prometheus.

Crear gráficos NGINX Plus en Grafana (11:15)

Si bien Prometheus es útil para observar solo una métrica, Grafana facilita la observación de una colección de métricas en un solo gráfico.

Para construir un gráfico de Grafana:

  1. Haga clic en el signo más ( + ) en la barra de navegación en el lado izquierdo de la página (vea la captura de pantalla en el Paso 4 de la sección anterior). Seleccione Panel de control en el menú desplegable Crear .

  2. Haga clic en el cuadro Agregar un panel vacío .

  3. En la página Nuevo panel/Editar panel que aparece, verifique que Prometheus aparezca en el campo Fuente de datos de la pestaña Consulta en la mitad inferior de la página. En caso contrario, seleccione Prometeo en el menú desplegable.

  4. Ingrese nginx en el campo Navegador de métricas . Aparece una lista de métricas de NGINX Plus.

    A continuación se presentan breves descripciones para darle una idea de qué información proporcionan.

    • nginxplus_connections_accepted – Conexiones de cliente aceptadas
    • nginxplus_connections_active – Conexiones de cliente activas
    • nginxplus_connections_dropped – Conexiones de cliente interrumpidas
    • nginxplus_connections_idle – Conexiones de cliente inactivas
    • nginxplus_http_requests_current – Solicitudes HTTP actuales
    • nginxplus_http_requests_total – Total de solicitudes HTTP
    • nginxplus_nginx_meta – metainformación de NGINX
    • nginxplus_processes_respawned : Número total de procesos secundarios terminados y regenerados de forma anormal
    • nginxplus_ssl_handshakes : Protocolos de enlace SSL exitosos
    • nginxplus_ssl_handshakes_failed – Protocolos de enlace SSL fallidos
    • nginxplus_ssl_session_reuses : reutilizaciones de sesiones durante el protocolo de enlace SSL
    • nginxplus_workers_mem_private : memoria privada utilizada por los trabajadores de NGINX, no incluye bibliotecas compartidas
    • nginxplus_workers_mem_rss : memoria utilizada por los procesos de trabajo de NGINX
  5. 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 Navegador de métricas (en la demostración, seleccionamos nginxplus_connections_idle ).

  6. Haga clic en el icono "actualizar" (dos flechas que forman un círculo) sobre el gráfico en la mitad superior de la página, y los resultados comenzarán a aparecer en el gráfico.

Bono: Información y análisis unificados para todas sus implementaciones de NGINX Plus

Quizás se pregunte "¿Qué pasa si tengo una implementación grande de NGINX, incluidas muchas instancias de NGINX Plus?" o "¿Cómo puedo actualizar la configuración de mis instancias en función 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 implementaciones de NGINX, lo ayuda a abordar esas preguntas y muchas más.

Si bien Prometheus y Grafana son excelentes soluciones para monitorear, alertar y visualizar, no brindan una manera de actualizar configuraciones y políticas. Para tomar medidas basadas en estos conocimientos aún es necesario iniciar sesión en instancias individuales de NGINX Plus para realizar cambios, lo que puede consumir mucho tiempo y ser propenso a errores, especialmente para implementaciones grandes y complejas de NGINX Plus.

NGINX Controller ofrece información detallada y análisis de más de 200 métricas NGINX Plus, incluidas las solicitudes por segundo y el uso de la CPU, 4xx y 5xx errores, fallas de verificación de estado y mucho más, todo presentado en una plataforma unificada, intuitiva y centrada en la aplicación. Luego, puede analizar en profundidad los datos, exportarlos en informes y realizar los cambios de configuración y políticas necesarios aprovechando flujos de trabajo automatizados y específicos para cada rol que fueron diseñados por expertos de NGINX para eliminar la complejidad.

Con NGINX Controller, puede estar al tanto de las implementaciones de su aplicación y tomar el control de las instancias de NGINX Plus y los objetos de configuración (por ejemplo, entornos, puertas de enlace y aplicaciones) a escala. Y no tiene que sacrificar el uso de sus soluciones de monitoreo y alerta favoritas; el diseño API-first de Controller hace que la integración con soluciones de terceros sea muy simple y directa.

Comience a usar NGINX Plus y el controlador NGINX

Si aún no ha probado NGINX Plus, le recomendamos que lo pruebe: como equilibrador de carga, proxy inverso y puerta de enlace API, o como servidor web totalmente compatible con API de administración y monitoreo mejoradas. Comience hoy mismo con una prueba gratuita de 30 días o contáctenos para analizar sus casos de uso .

Y si está pensando que NGINX Controller podría ser la forma de visualizar y monitorear su flota NGINX Plus, consulte la prueba gratuita de 30 días que incluye los módulos de Entrega de aplicação y Administración de API con Controller App Security.


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