nginx

La integración de nginx recopila métricas de conexión y registros de acceso. Las métricas de conexión capturan el estado actual de la conexión: activa, de lectura o en espera. Los registros de acceso se analizan para sus detalles de conexión, que incluyen campos asignados a una solicitud, un cliente, un servidor y un mensaje.

Para obtener más información sobre nginx, consulta la documentación de nginx.

Requisitos previos

Para recopilar la telemetría de nginx, debes instalar el agente de operaciones:

  • Para las métricas, instala la versión 2.1.0 o una posterior.
  • Para los registros, instala la versión 2.1.0 o una posterior.

Esta integración es compatible con las versiones 1.18 y 1.20 de nginx.

Configura tu instancia de nginx

Debes habilitar el módulo stub_status en el archivo de configuración nginx a fin de configurar una URL accesible de forma local, por ejemplo, http://www.example.com/nginx_status para la página de estado. Para habilitar el módulo stub_status, completa los siguientes pasos:

  1. Edita el archivo status.conf o créalo si no existe. Puedes buscar este archivo en el directorio de configuración de nginx, que se suele encontrar en /etc/nginx/conf.d.

  2. Agrega las siguientes líneas a la sección server:

    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
    }
    

    Tu archivo de configuración podría verse como el siguiente ejemplo:

    server {
       listen 80;
       server_name 127.0.0.1;
       location /nginx_status {
           stub_status on;
           access_log off;
           allow 127.0.0.1;
           deny all;
       }
       location / {
           root /dev/null;
       }
    }
    
  3. Vuelve a cargar la configuración de nginx.

    sudo service nginx reload
    

Puedes ejecutar el siguiente comando para automatizar los pasos anteriores. Crea un archivo status.conf si no existe o reemplaza el existente. El comando activa stub_status, vuelve a cargar nginx y verifica que la información esperada se exponga a través del extremo.

sudo tee /etc/nginx/conf.d/status.conf > /dev/null << EOF
server {
    listen 80;
    server_name 127.0.0.1;
    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
    }
    location / {
       root /dev/null;
    }
}
EOF
sudo service nginx reload
curl http://127.0.0.1:80/nginx_status

El resultado de la muestra es el siguiente:

Active connections: 1
server accepts handled requests
 23 23 74
Reading: 0 Writing: 1 Waiting: 0

Como alternativa, en lugar de usar un archivo status.conf separado, puedes incorporar directamente las líneas al archivo nginx.conf principal, que, por lo general, se encuentra en uno de los siguientes directorios: /etc/nginx , /usr/local/nginx/conf o /usr/local/etc/nginx.

Configura el agente de operaciones para nginx

Mediante la guía Configura el Agente de operaciones, agrega los elementos necesarios para recopilar telemetría de las instancias de nginx y reinicia el agente.

Configuración de ejemplo

Los siguientes comandos crean la configuración para recopilar y transferir la telemetría de nginx, y reinician el agente de operaciones.

# Configures Ops Agent to collect telemetry from the app and restart Ops Agent.

set -e

# Create a back up of the existing file so existing configurations are not lost.
sudo cp /etc/google-cloud-ops-agent/config.yaml /etc/google-cloud-ops-agent/config.yaml.bak

# Configure the Ops Agent.
sudo tee /etc/google-cloud-ops-agent/config.yaml > /dev/null << EOF
metrics:
  receivers:
    nginx:
      type: nginx
      stub_status_url: http://127.0.0.1:80/nginx_status
  service:
    pipelines:
      nginx:
        receivers:
          - nginx
logging:
  receivers:
    nginx_access:
      type: nginx_access
    nginx_error:
      type: nginx_error
  service:
    pipelines:
      nginx:
        receivers:
          - nginx_access
          - nginx_error
EOF

sudo service google-cloud-ops-agent restart
sleep 60

Configura la recopilación de registros

A fin de transferir registros desde nginx, debes crear receptores para los registros que nginx produce y, luego, crear una canalización para los receptores nuevos.

A fin de configurar un receptor para tus registros nginx_access, especifica los siguientes campos:

Campo Predeterminado Descripción
exclude_paths Una lista de patrones de ruta de acceso del sistema de archivos que se excluirán del conjunto que coincide con include_paths.
include_paths [/var/log/nginx/access.log] Una lista de rutas de acceso del sistema de archivos que se leerán a través de la visualización del final de cada archivo. Se puede usar un comodín (*) en las rutas.
record_log_file_path false Si se configura como true, la ruta al archivo específico desde el que se obtuvo el registro aparece en la entrada de registro de salida como el valor de la etiqueta agent.googleapis.com/log_file_path. Cuando se usa un comodín, solo se registra la ruta de acceso del archivo del que se obtuvo el registro.
type El valor debe ser nginx_access.
wildcard_refresh_interval 60s El intervalo en el que se actualizan las rutas de acceso de archivos comodín en include_paths. Se proporciona como una duración de tiempo que se puede analizar a través de time.ParseDuration, por ejemplo, 30s o 2m. Esta propiedad puede ser útil en el caso de una capacidad de procesamiento de registro alta en la que los archivos de registro se rotan más rápido que el intervalo predeterminado.

Para configurar un receptor para tus registros nginx_error, especifica los siguientes campos:

Campo Predeterminado Descripción
exclude_paths Una lista de patrones de ruta de acceso del sistema de archivos que se excluirán del conjunto que coincide con include_paths.
include_paths [/var/log/nginx/error.log] Una lista de rutas de acceso del sistema de archivos que se leerán a través de la visualización del final de cada archivo. Se puede usar un comodín (*) en las rutas.
record_log_file_path false Si se configura como true, la ruta al archivo específico desde el que se obtuvo el registro aparece en la entrada de registro de salida como el valor de la etiqueta agent.googleapis.com/log_file_path. Cuando se usa un comodín, solo se registra la ruta de acceso del archivo del que se obtuvo el registro.
type El valor debe ser nginx_error.
wildcard_refresh_interval 60s El intervalo en el que se actualizan las rutas de acceso de archivos comodín en include_paths. Se proporciona como una duración de tiempo que se puede analizar a través de time.ParseDuration, por ejemplo, 30s o 2m. Esta propiedad puede ser útil en el caso de una capacidad de procesamiento de registro alta en la que los archivos de registro se rotan más rápido que el intervalo predeterminado.

¿Qué se registra?

logName se deriva de los ID de receptor especificados en la configuración. Los campos detallados dentro de LogEntry son los siguientes.

Los registros nginx_access contienen los siguientes campos en LogEntry:

Campo Tipo Descripción
httpRequest objeto Consulta HttpRequest
jsonPayload.host string Contenido del encabezado del host (generalmente no es informado por nginx)
jsonPayload.level string Nivel de entrada de registro
jsonPayload.user string Nombre de usuario autenticado para la solicitud
severity string (LogSeverity) Nivel de entrada de registro (traducido).

Los registros nginx_error contienen los siguientes campos en LogEntry:

Campo Tipo Descripción
jsonPayload.client string Dirección IP de cliente (opcional)
jsonPayload.connection número ID de conexión
jsonPayload.host string Encabezado del host (opcional)
jsonPayload.level string Nivel de entrada de registro
jsonPayload.message string Mensaje del registro
jsonPayload.pid número El ID de proceso que emite el registro
jsonPayload.referer string Encabezado de referencia (opcional)
jsonPayload.request string Solicitud HTTP original (opcional)
jsonPayload.server string Nombre del servidor Nginx (opcional)
jsonPayload.subrequest string Subsolicitud Nginx (opcional)
jsonPayload.tid número ID de subproceso en el que se originó el registro
jsonPayload.upstream string URI de solicitud ascendente (opcional)
severity string (LogSeverity) Nivel de entrada de registro (traducido).

Configura la recopilación de métricas

Si deseas transferir métricas de nginx, debes crear un receptor para las métricas que este produce y, luego, crear una canalización para el receptor nuevo.

Este receptor no admite el uso de varias instancias en la configuración, por ejemplo, para supervisar varios extremos. Todas estas instancias escriben en las mismas series temporales, y Cloud Monitoring no tiene forma de distinguirlas.

Para configurar un receptor para las métricas de nginx, especifica los siguientes campos:

Campo Predeterminado Descripción
collection_interval 60s Un valor de duración de tiempo, como 30s o 5m.
server_status_url http://localhost/status La URL expuesta por el módulo de estado del stub de nginx.
type Este valor debe ser nginx.

Qué se supervisa

En la siguiente tabla, se proporciona una lista de métricas que el agente de operaciones recopila de la instancia nginx.

Tipo de métrica 
Categoría, tipo
Recursos supervisados
Etiquetas
workload.googleapis.com/nginx.connections_accepted
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/nginx.connections_current
GAUGEINT64
gce_instance
state
workload.googleapis.com/nginx.connections_handled
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/nginx.requests
CUMULATIVEINT64
gce_instance
 

Verifica la configuración

En esta sección, se describe cómo verificar que hayas configurado correctamente el receptor de nginx. El agente de operaciones puede tardar uno o dos minutos en comenzar a recopilar telemetría.

Para verificar que los registros de nginx se envíen a Cloud Logging, haz lo siguiente:

  1. En el panel de navegación de la consola de Google Cloud, selecciona Logging y, luego, Explorador de registros:

    Ir al Explorador de registros

  2. Ingresa la siguiente consulta en el editor y, luego, haz clic en Ejecutar consulta:
    resource.type="gce_instance"
    (log_id("nginx_access") OR log_id("nginx_error"))
    

Para verificar que las métricas de nginx se envíen a Cloud Monitoring, haz lo siguiente:

  1. En el panel de navegación de la consola de Google Cloud, selecciona Monitoring y, luego,  Explorador de métricas:

    Ir al Explorador de métricas

  2. En la barra de herramientas del panel del compilador de consultas, selecciona el botón cuyo nombre sea  MQL o  PromQL.
  3. Verifica que MQL esté seleccionado en el botón de activación Lenguaje. El botón de activación de lenguaje se encuentra en la misma barra de herramientas que te permite dar formato a tu consulta.
  4. Ingresa la siguiente consulta en el editor y, luego, haz clic en Ejecutar consulta:
    fetch gce_instance
    | metric 'workload.googleapis.com/nginx.requests'
    | every 1m
    

Ver panel

Para ver tus métricas de nginx, debes tener configurado un gráfico o un panel. La integración de nginx incluye uno o más paneles. Cualquier panel se instala de forma automática después de que configuras la integración y de que el agente de operaciones comienza a recopilar datos de métricas.

También puedes ver vistas previas estáticas de los paneles sin instalar la integración.

Para ver un panel instalado, haz lo siguiente:

  1. En el panel de navegación de la consola de Google Cloud, elige Monitoring y, luego,  Paneles:

    Ir a Paneles

  2. Selecciona la pestaña Lista de paneles y, luego, la categoría Integraciones.
  3. Haz clic en el nombre del panel que quiera ver.

Si configuraste una integración, pero el panel no se instaló, verifica que el agente de operaciones se esté ejecutando. Cuando no hay datos de métricas para un gráfico en el panel, la instalación del panel falla. Una vez que el agente de operaciones comienza a recopilar métricas, el panel se instalará por ti.

Para obtener una vista previa estática del panel, haz lo siguiente:

  1. En el panel de navegación de la consola de Google Cloud, elige Monitoring y, luego,  Integraciones:

    Ir a Integraciones

  2. Haz clic en el filtro de la plataforma de implementación Compute Engine.
  3. Busca la entrada de nginx y haz clic en Ver detalles.
  4. Selecciona la pestaña Paneles para ver una vista previa estática. Si el panel está instalado, haz clic en Ver panel para navegar a él.

Para obtener más información de los paneles en Cloud Monitoring, consulta Paneles y gráficos.

Para obtener más información del uso de la página Integraciones, consulta Administra integraciones.

Instala políticas de alertas

Las políticas de alertas le indican a Cloud Monitoring que te notifique cuando ocurren condiciones especificadas. La integración de nginx incluye una o más políticas de alertas para que uses. Puedes ver e instalar estas políticas de alertas desde la página Integraciones en Monitoring.

Para ver las descripciones de las políticas de alertas disponibles y, luego, instalarlas, haz lo siguiente:

  1. En el panel de navegación de la consola de Google Cloud, elige Monitoring y, luego,  Integraciones:

    Ir a Integraciones

  2. Busca la entrada de nginx y haz clic en Ver detalles.
  3. Selecciona la pestaña Alertas. En esta pestaña, se proporcionan descripciones de las políticas de alertas disponibles y una interfaz para instalarlas.
  4. Instala las políticas de alertas. Las políticas de alertas deben saber a dónde enviar notificaciones que la alerta se activó, por lo que requieren información de ti para la instalación. Para instalar las políticas de alertas, haz lo siguiente:
    1. En la lista de políticas de alertas disponibles, elige las que deseas instalar.
    2. En la sección Configura notificaciones, elige uno o más canales de notificaciones. Tienes la opción de inhabilitar el uso de los canales de notificación, pero si lo haces, las políticas de alertas se activarán de forma silenciosa. Puedes verificar su estado en Monitoring, pero no recibirás notificaciones.

      Para obtener más información de los canales de notificaciones, consulta Administra canales de notificaciones.

    3. Haz clic en Crear políticas.

Para obtener más información de las políticas de alertas en Cloud Monitoring, consulta Introducción a las alertas.

Para obtener más información del uso de la página Integraciones, consulta Administra integraciones.

Soluciona problemas

En la mayoría de las distribuciones, nginx incluye ngx_http_stub_status_module habilitado. Para verificar si el módulo está habilitado, ejecuta el siguiente comando:

sudo nginx -V 2>&1 | grep -o with-http_stub_status_module

El resultado esperado es with-http_stub_status_module, lo que significa que el módulo está habilitado. En casos excepcionales, si el comando no muestra ningún resultado, debes compilar nginx desde la fuente con el -with-http_stub_status_module después de la documentación pública de nginx.

¿Qué sigue?

Para obtener una explicación sobre cómo usar Ansible para instalar el agente de operaciones, configurar una aplicación de terceros y, luego, instalar un panel de muestra, consulta el video Instala el agente de operaciones para solucionar problemas de apps de terceros.