Saltar a contenido

traffic-accounting: Monitorear las métricas de tráfico entrante y saliente en tiempo real para NGINX

Instalación

Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:

  • RedHat Enterprise Linux 7, 8, 9 y 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 y Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-traffic-accounting
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-traffic-accounting

Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:

load_module modules/ngx_http_accounting_module.so;

Este documento describe nginx-module-traffic-accounting v2.0.4 lanzado el 16 de mayo de 2022.


Monitorea las métricas de tráfico entrante y saliente en tiempo real para NGINX.

Una solución de monitoreo de tráfico y códigos de estado en tiempo real para NGINX, que necesita menos memoria y CPU que otras soluciones de análisis de registros en tiempo real. Útil para la contabilidad de tráfico basada en la lógica de configuración de NGINX (por ubicación / servidor / variables definidas por el usuario).

FOSSA Status Financial Contributors on Open Collective

¿Por qué?

Las soluciones de análisis de registros en tiempo real, que requieren múltiples máquinas para almacenamiento y análisis, son demasiado pesadas para el monitoreo de aplicaciones.

Se necesita una solución rentable para monitorear las métricas/status de las solicitudes de la aplicación. Esta solución debe ser precisa, sensible, robusta, lo suficientemente ligera y no verse afectada por picos de tráfico.

¿Cómo funciona?

Este módulo mantiene una lista de métricas identificadas por accounting_id en su contexto.

Cuando una nueva solicitud llega al servidor, el módulo intentará encontrar su accounting_id, calcular estadísticas y agregarlas en las métricas correspondientes por accounting_id.

Para cada período de tiempo (definido por interval), se activa un evento de temporizador, esas métricas se rotan y se exportan a archivos de registro o se envían a servidores de registro remotos.

Tablero

Tablero - Visualizar con Grafana Accounting Dashboard

Configuración

Edita tu nginx.conf.

Ejemplo:

http {
    # activar la función de contabilidad
    accounting  on;
    accounting_log  logs/http-accounting.log;
    ...
    server {
        server_name example.com;

        accounting_id  $http_host;  # establecer la cadena accounting_id por variable

        location / {
            accounting_id  accounting_id_str;  # establecer la cadena accounting_id por ubicación

            ...
        }

        location /api {
            accounting_id  API_PC;   # para pc

            if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') {
                accounting_id  API_MOBILE;   # para móvil
            }

            ...
        }
    }

}

Directivas

accounting

sintaxis: accounting on | off

predeterminado: accounting off

contexto: http

accounting_log

sintaxis: accounting_log \ [level]

predeterminado: -

contexto: http

Configura el registro.

Soporta tanto la ruta de file local, como stderr, o syslog:. El segundo parámetro es el nivel de registro. Para más detalles sobre los parámetros soportados, consulta esta página de nginx.org.

Si no se especifica, el registro de contabilidad se escribirá en /dev/log.

accounting_id

sintaxis: accounting_id \

predeterminado: accounting_id default

contexto: http, server, location, if in location

Establece la cadena accounting_id por variable definida por el usuario.

Esta cadena se utiliza para determinar a qué métricas debe agregarse una solicitud/sesión.

accounting_interval

sintaxis: accounting_interval \

predeterminado: accounting_interval 60

contexto: http

Especifica el intervalo de reporte. Por defecto es de 60 segundos.

accounting_perturb

sintaxis: accounting_perturb on | off

predeterminado: accounting_perturb off

contexto: http

Desfase aleatoriamente el intervalo de reporte en un 20% del tiempo habitual.

Uso

Este módulo puede configurarse para escribir métricas en un archivo local, servidor de registro remoto o dispositivo syslog local.

El software de agregación de registros de código abierto como logstash también soporta la entrada syslog, lo que te ayudará a establecer un servidor de registro central. Consulta samples/logstash/ para ejemplos. [Recomendado]

Para recolectar registros con syslog local, consulta Lax/ngx_http_accounting_module-utils para una configuración de muestra / utilidades.

docker / docker-compose

Para demostrar con docker-compose, ejecuta

docker-compose build
docker-compose up -d

Abre Grafana (dirección: http://localhost:3000) en tu navegador.

Crea y configura la fuente de datos de elasticsearch con las opciones:

Type: elasticsearch
URL: http://elasticsearch:9200
Version: 5.6+
Min time interval: 1m

Luego importa el tablero de contabilidad desde samples/accounting-dashboard-grafana.json.

Formato de registro de métricas

## HTTP
2018/05/14 14:18:18 [notice] 5#0: pid:5|from:1526278638|to:1526278659|accounting_id:HTTP_ECHO_HELLO|requests:4872|bytes_in:438480|bytes_out:730800|latency_ms:0|upstream_latency_ms:0|200:4872
2018/05/14 14:18:18 [notice] 5#0: pid:5|from:1526278638|to:1526278659|accounting_id:INDEX|requests:4849|bytes_in:421863|bytes_out:1857167|latency_ms:0|upstream_latency_ms:0|301:4849

## Stream
2018/05/14 14:18:22 [notice] 5#0: pid:5|from:1526278642|to:1526278659|accounting_id:TCP_PROXY_ECHO|sessions:9723|bytes_in:860343|bytes_out:2587967|latency_ms:4133|upstream_latency_ms:3810|200:9723

Cada línea de la salida del registro contiene métricas para un accounting_id particular, que contiene una lista de clave-valor.

nombre de clave significados de los valores
pid pid del proceso trabajador de nginx
from / to la métrica fue recolectada del período entre estas marcas de tiempo
accounting_id identificador para la unidad de contabilidad, establecido por la directiva accounting_id
requests conteo de solicitudes totales procesadas en el período actual (solo módulo HTTP)
sessions conteo de sesiones totales procesadas en el período actual (solo módulo Stream)
bytes_in total de bytes recibidos por el servidor
bytes_out total de bytes enviados por el servidor
latency_ms suma de todos los $session_time de solicitudes/sesiones, en milisegundos
upstream_latency_ms suma de $upstream_response_time, en milisegundos
200 / 302 / 400 / 404 / 500 ... conteo de solicitudes/sesiones con código de estado 200/302/400/404/500, etc. Nota las diferencias entre códigos http y códigos de stream

Ejemplo de configuración

http {
  accounting        on;
  accounting_log    logs/http-accounting.log;
  accounting_id     $hostname;

  ...
}

stream {
  accounting        on;
  accounting_log    logs/stream-accounting.log;
  accounting_id     $hostname;

  ...
}

Visualización

La visualización con Kibana o Grafana es fácil. Consulta samples/ para ejemplos.

Ramas

  • master : rama principal de desarrollo.
  • tag v0.1 o v2-freeze-20110526 : lanzamiento legado. funciona con versiones de nginx (0.7.xx, 0.8.xx), nginx 0.9 no ha sido probado. no funcionó con nginx por encima de 1.0.x.

GitHub

Puedes encontrar consejos adicionales de configuración y documentación para este módulo en el repositorio de GitHub para nginx-module-traffic-accounting.