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).
¿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

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.