Saltar a contenido

vts

# *vts*: Módulo de estado del tráfico de host virtual de 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

=== "CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023+"

    ```bash
    dnf -y install https://extras.getpagespeed.com/release-latest.rpm
    dnf -y install nginx-module-vts
    ```

=== "CentOS/RHEL 7 y Amazon Linux 2"

    ```bash
    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-vts
    ```

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

```nginx
load_module modules/ngx_http_vhost_traffic_status_module.so;

Este documento describe nginx-module-vts v0.2.6 lanzado el 29 de julio de 2026.


CI License

Módulo de estado del tráfico de host virtual de Nginx

Prueba

Ejecuta sudo prove -r t después de haber instalado este módulo. Se requiere sudo porque la prueba necesita que Nginx escuche en el puerto 80.

Capturas de pantalla

screenshot-vts-0

screenshot-vts-1

Sinopsis

http {
    vhost_traffic_status_zone;

    ...

    server {

        ...

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

Descripción

Este es un módulo de Nginx que proporciona acceso a la información de estado del host virtual. Contiene el estado actual, como servidores, upstreams, cachés. Esto es similar al monitoreo de actividad en vivo de nginx plus. El HTML incorporado también se toma de la página de demostración de la versión anterior.

Primero, la directiva vhost_traffic_status_zone es requerida, y luego, si se establece la directiva vhost_traffic_status_display, se puede acceder de la siguiente manera:

  • /status/format/json
  • Si solicitas /status/format/json, responderá con un documento JSON que contiene los datos de actividad actuales para usar en paneles de control en vivo y herramientas de monitoreo de terceros.
  • /status/format/html
  • Si solicitas /status/format/html, responderá con el panel de control en vivo incorporado en HTML que solicita internamente a /status/format/json.
  • /status/format/jsonp
  • Si solicitas /status/format/jsonp, responderá con una función de callback JSONP que contiene los datos de actividad actuales para usar en paneles de control en vivo y herramientas de monitoreo de terceros.
  • /status/format/prometheus
  • Si solicitas /status/format/prometheus, responderá con un documento prometheus que contiene los datos de actividad actuales.
  • /status/control
  • Si solicitas /status/control, responderá con un documento JSON después de restablecer o eliminar zonas a través de una cadena de consulta. Consulta el Control.

El documento JSON contiene lo siguiente:

{
    "hostName": ...,
    "moduleVersion": ...,
    "nginxVersion": ...,
    "loadMsec": ...,
    "nowMsec": ...,
    "connections": {
        "active":...,
        "reading":...,
        "writing":...,
        "waiting":...,
        "accepted":...,
        "handled":...,
        "requests":...
    },
    "sharedZones": {
        "name":...,
        "maxSize":...,
        "usedSize":...,
        "usedNode":...
    },
    "serverZones": {
        "...":{
            "requestCounter":...,
            "inBytes":...,
            "outBytes":...,
            "responses":{
                "1xx":...,
                "2xx":...,
                "3xx":...,
                "4xx":...,
                "5xx":...,
                "miss":...,
                "bypass":...,
                "expired":...,
                "stale":...,
                "updating":...,
                "revalidated":...,
                "hit":...,
                "scarce":...
            },
            "requestMsecCounter":...,
            "requestMsec":...,
            "requestMsecs":{
                "times":[...],
                "msecs":[...]
            },
            "requestBuckets":{
                "msecs":[...],
                "counters":[...]
            },
        }
        ...
    },
    "filterZones": {
        "...":{
            "...":{
                "requestCounter":...,
                "inBytes":...,
                "outBytes":...,
                "responses":{
                    "1xx":...,
                    "2xx":...,
                    "3xx":...,
                    "4xx":...,
                    "5xx":...,
                    "miss":...,
                    "bypass":...,
                    "expired":...,
                    "stale":...,
                    "updating":...,
                    "revalidated":...,
                    "hit":...,
                    "scarce":...
                },
                "requestMsecCounter":...,
                "requestMsec":...,
                "requestMsecs":{
                    "times":[...],
                    "msecs":[...]
                },
                "requestBuckets":{
                    "msecs":[...],
                    "counters":[...]
                },
            },
            ...
        },
        ...
    },
    "upstreamZones": {
        "...":[
            {
                "server":...,
                "requestCounter":...,
                "inBytes":...,
                "outBytes":...,
                "responses":{
                    "1xx":...,
                    "2xx":...,
                    "3xx":...,
                    "4xx":...,
                    "5xx":...
                },
                "requestMsecCounter":...,
                "requestMsec":...,
                "requestMsecs":{
                    "times":[...],
                    "msecs":[...]
                },
                "requestBuckets":{
                    "msecs":[...],
                    "counters":[...]
                },
                "responseMsecCounter":...,
                "responseMsec":...,
                "responseMsecs":{
                    "times":[...],
                    "msecs":[...]
                },
                "responseBuckets":{
                    "msecs":[...],
                    "counters":[...]
                },
                "weight":...,
                "maxFails":...,
                "failTimeout":...,
                "backup":...,
                "down":...
            }
            ...
        ],
        ...
    }
    "cacheZones": {
        "...":{
            "maxSize":...,
            "usedSize":...,
            "inBytes":...,
            "outBytes":...,
            "responses":{
                "miss":...,
                "bypass":...,
                "expired":...,
                "stale":...,
                "updating":...,
                "revalidated":...,
                "hit":...,
                "scarce":...
            }
        },
        ...
    }
}
  • main
  • Versión básica, tiempo de actividad((nowMsec - loadMsec)/1000)
  • nowMsec, loadMsec son milisegundos.
  • connections
  • Conexiones totales y solicitudes (igual que en el módulo stub_status de NGINX)
  • sharedZones
  • La información de memoria compartida utilizada en nginx-module-vts.
  • serverZones
  • Tráfico (entrada/salida) y conteos de solicitudes y respuestas y tasa de aciertos de caché por cada zona de servidor
  • Tráfico total (entrada/salida) y conteos de solicitudes y respuestas (el nombre de la zona es *) y tasa de aciertos
  • filterZones
  • Tráfico (entrada/salida) y conteos de solicitudes y respuestas y tasa de aciertos de caché por cada zona de servidor filtrada a través de la directiva vhost_traffic_status_filter_by_set_key
  • Tráfico total (entrada/salida) y conteos de solicitudes y respuestas (el nombre de la zona es *) y tasa de aciertos filtrada a través de la directiva vhost_traffic_status_filter_by_set_key
  • upstreamZones
  • Tráfico (entrada/salida) y conteos de solicitudes y respuestas por servidor en cada grupo upstream
  • Configuraciones actuales (peso, maxfails, failtimeout...) en nginx.conf
  • cacheZones
  • Tráfico (entrada/salida) y tamaño (capacidad/utilizado) y tasa de aciertos por cada zona de caché al usar la directiva proxy_cache.

Los objetos overCounts en el documento JSON son principalmente para sistemas de 32 bits y se incrementarán en 1 si su valor se desborda. La directiva vhost_traffic_status_display_format establece el formato de salida predeterminado que es uno de json, jsonp, html, prometheus. (Predeterminado: json)

El cálculo del tráfico es el siguiente:

  • ServerZones
  • in += requested_bytes
  • out += sent_bytes
  • FilterZones
  • in += requested_bytes a través del filtro
  • out += sent_bytes a través del filtro
  • UpstreamZones
  • in += requested_bytes a través de las ServerZones
  • out += sent_bytes a través de las ServerZones
  • cacheZones
  • in += requested_bytes a través de las ServerZones
  • out += sent_bytes a través de las ServerZones

Todos los cálculos se realizan en la fase de procesamiento de registros de Nginx. Los redireccionamientos internos (X-Accel-Redirect o error_page) no se calculan en las UpstreamZones.

Advertencias: este módulo depende del sistema de registro de nginx (NGX_HTTP_LOG_PHASE: última fase del http de nginx), por lo que el tráfico puede ser en ciertas circunstancias diferente al tráfico de ancho de banda real. Websocket, descargas canceladas pueden ser causa de imprecisiones. El funcionamiento del módulo no importa en absoluto si la directiva access_log está "activada" o "desactivada". Nuevamente, este módulo funciona bien con "access_log off". Al usar varios dominios, se establece para ser el primer dominio (izquierda) de la directiva server_name. Si no lo deseas, consulta la directiva vhost_traffic_status_filter_by_host, vhost_traffic_status_filter_by_set_key.

Consulta los siguientes módulos para las estadísticas de tráfico stream: * nginx-module-sts * nginx-module-stream-sts

Cálculos e Intervalos

Promedios

Todos los promedios se calculan actualmente como AMM (Media Aritmética) sobre los últimos 64 valores.

Control

Es posible restablecer o eliminar zonas de tráfico a través de una cadena de consulta. La solicitud responde con un documento JSON.

  • Sintaxis de URI
  • /{status_uri}/control?cmd={command}&group={group}&zone={name}
http {

    geoip_country /usr/share/GeoIP/GeoIP.dat;

    vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_set_key $geoip_country_code country::*;

    ...

    server {

        server_name example.org;

        ...

        vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

Si se establece como arriba, entonces la URI de control es como example.org/status/control.

Los argumentos de solicitud disponibles son los siguientes: * cmd=\<status|reset|delete> * status * Devuelve el estado de las zonas de tráfico en formato json como status/format/json. * reset * Restablece las zonas de tráfico sin eliminar nodos en la memoria compartida. (= inicializa a 0) * delete * Elimina las zonas de tráfico en la memoria compartida. cuando se vuelve a solicitar se recrea. * group=\<server|filter|upstream@alone|upstream@group|cache|*> * server * filter * upstream@alone * upstream@group * cache * * * zone=name * server * name * filter * filter_group@name * upstream@group * upstream_group@name * upstream@alone * @name * cache * name

Para obtener el estado de las zonas de tráfico al vuelo

Esto es similar a status/format/json excepto que puede obtener cada zona.

Para obtener todas las zonas

  • Es exactamente lo mismo que status/format/json.
  • /status/control?cmd=status&group=*

Para obtener zonas de grupo

  • mainZones
  • /status/control?cmd=status&group=server&zone=::main
  • serverZones
  • /status/control?cmd=status&group=server&zone=*
  • filterZones
  • /status/control?cmd=status&group=filter&zone=*
  • upstreamZones
  • /status/control?cmd=status&group=upstream@group&zone=*
  • upstreamZones::nogroups
  • /status/control?cmd=status&group=upstream@alone&zone=*
  • cacheZones
  • /status/control?cmd=status&group=cache&zone=*

Los valores de mainZones son los valores de estado predeterminados que incluyen hostName, moduleVersion, nginxVersion, loadMsec, nowMsec, connections.

Para obtener cada zona

  • zona única en serverZones
  • /status/control?cmd=status&group=server&zone=name
  • zona única en filterZones
  • /status/control?cmd=status&group=filter&zone=filter_group@name
  • zona única en upstreamZones
  • /status/control?cmd=status&group=upstream@group&zone=upstream_group@name
  • zona única en upstreamZones::nogroups
  • /status/control?cmd=status&group=upstream@alone&zone=name
  • zona única en cacheZones
  • /status/control?cmd=status&group=cache&zone=name

Para restablecer zonas de tráfico al vuelo

Restablece los valores de las zonas especificadas a 0.

Para restablecer todas las zonas

  • /status/control?cmd=reset&group=*

Para restablecer zonas de grupo

  • serverZones
  • /status/control?cmd=reset&group=server&zone=*
  • filterZones
  • /status/control?cmd=reset&group=filter&zone=*
  • upstreamZones
  • /status/control?cmd=reset&group=upstream@group&zone=*
  • upstreamZones::nogroups
  • /status/control?cmd=reset&group=upstream@alone&zone=*
  • cacheZones
  • /status/control?cmd=reset&group=cache&zone=*

Para restablecer cada zona

  • zona única en serverZones
  • /status/control?cmd=reset&group=server&zone=name
  • zona única en filterZones
  • /status/control?cmd=reset&group=filter&zone=filter_group@name
  • zona única en upstreamZones
  • /status/control?cmd=reset&group=upstream@group&zone=upstream_group@name
  • zona única en upstreamZones::nogroups
  • /status/control?cmd=reset&group=upstream@alone&zone=name
  • zona única en cacheZones
  • /status/control?cmd=reset&group=cache&zone=name

Para eliminar zonas de tráfico al vuelo

Elimina las zonas especificadas en la memoria compartida.

Para eliminar todas las zonas

  • /status/control?cmd=delete&group=*

Para eliminar zonas de grupo

  • serverZones
  • /status/control?cmd=delete&group=server&zone=*
  • filterZones
  • /status/control?cmd=delete&group=filter&zone=*
  • upstreamZones
  • /status/control?cmd=delete&group=upstream@group&zone=*
  • upstreamZones::nogroups
  • /status/control?cmd=delete&group=upstream@alone&zone=*
  • cacheZones
  • /status/control?cmd=delete&group=cache&zone=*

Para eliminar cada zona

  • zona única en serverZones
  • /status/control?cmd=delete&group=server&zone=name
  • zona única en filterZones
  • /status/control?cmd=delete&group=filter&zone=filter_group@name
  • zona única en upstreamZones
  • /status/control?cmd=delete&group=upstream@group&zone=upstream_group@name
  • zona única en upstreamZones::nogroups
  • /status/control?cmd=delete&group=upstream@alone&zone=name
  • zona única en cacheZones
  • /status/control?cmd=delete&group=cache&zone=name

Establecer

Se pueden obtener los valores de estado en la configuración de nginx por separado utilizando la directiva vhost_traffic_status_set_by_filter. Se pueden adquirir casi todos los valores de estado y el valor obtenido se almacena en una variable definida por el usuario que es el primer argumento.

  • Sintaxis de la Directiva
  • vhost_traffic_status_set_by_filter $variable group/zone/name
http {

    geoip_country /usr/share/GeoIP/GeoIP.dat;

    vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_set_key $geoip_country_code country::*;

    ...
    upstream backend {
        10.10.10.11:80;
        10.10.10.12:80;
    }

    server {

        server_name example.org;

        ...

        vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;

        vhost_traffic_status_set_by_filter $requestCounter server/example.org/requestCounter;
        vhost_traffic_status_set_by_filter $requestCounterKR filter/country::example.org@KR/requestCounter;

        location /backend {
            vhost_traffic_status_set_by_filter $requestCounterB1 upstream@group/backend@10.10.10.11:80/requestCounter;
            proxy_pass http://backend;
        }
    }
}

La configuración anterior es la siguiente:

  • $requestCounter
  • serverZones -> example.org -> requestCounter
  • $requestCounterKR
  • filterZones -> country::example.org -> KR -> requestCounter
  • $requestCounterB1
  • upstreamZones -> backend -> 10.0.10.11:80 -> requestCounter

Consulta la directiva vhost_traffic_status_set_by_filter para un uso detallado.

JSON

La siguiente información de estado se proporciona en formato JSON:

Json utilizado por estado

/{status_uri}/format/json

/{status_uri}/control?cmd=status&...

  • hostName
  • Nombre del host.
  • moduleVersion
  • Versión del módulo en formato {version}(|.dev.{commit}).
  • nginxVersion
  • Versión del proporcionado.
  • loadMsec
  • Tiempo de proceso cargado en milisegundos.
  • nowMsec
  • Hora actual en milisegundos
  • connections
  • active
    • El número actual de conexiones de cliente activas.
  • reading
    • El número total de conexiones de cliente en lectura.
  • writing
    • El número total de conexiones de cliente en escritura.
  • waiting
    • El número total de conexiones de cliente en espera.
  • accepted
    • El número total de conexiones de cliente aceptadas.
  • handled
    • El número total de conexiones de cliente manejadas.
  • requests
    • El número total de conexiones de cliente solicitadas.
  • sharedZones
  • name
    • El nombre de la memoria compartida especificada en la configuración. (predeterminado: vhost_traffic_status)
  • maxSize
    • El límite en el tamaño máximo de la memoria compartida especificada en la configuración.
  • usedSize
    • El tamaño actual de la memoria compartida.
  • usedNode
    • El número actual de nodos utilizados en la memoria compartida. Se puede obtener un tamaño aproximado para un nodo con la siguiente fórmula: (usedSize / usedNode)
  • serverZones
  • requestCounter
    • El número total de solicitudes de cliente recibidas de los clientes.
  • inBytes
    • El número total de bytes recibidos de los clientes.
  • outBytes
    • El número total de bytes enviados a los clientes.
  • responses
    • 1xx, 2xx, 3xx, 4xx, 5xx
    • El número de respuestas con códigos de estado 1xx, 2xx, 3xx, 4xx y 5xx.
    • miss
    • El número de fallos de caché.
    • bypass
    • El número de omisiones de caché.
    • expired
    • El número de cachés expirados.
    • stale
    • El número de cachés obsoletos.
    • updating
    • El número de cachés actualizando.
    • revalidated
    • El número de cachés revalidados.
    • hit
    • El número de aciertos de caché.
    • scarce
    • El número de escasez de caché.
  • requestMsecCounter
    • El número de tiempo de procesamiento de solicitudes acumulado en milisegundos.
  • requestMsec
    • El promedio de los tiempos de procesamiento de solicitudes en milisegundos.
  • requestMsecs
    • times
    • Los tiempos en milisegundos en los tiempos de procesamiento de solicitudes.
    • msecs
    • Los tiempos de procesamiento de solicitudes en milisegundos.
  • requestBuckets
    • msecs
    • Los valores de los cubos del histograma establecidos por la directiva vhost_traffic_status_histogram_buckets.
    • counters
    • Los valores acumulativos por la razón de que cada valor de cubo es mayor o igual al tiempo de procesamiento de la solicitud.
  • filterZones
  • Proporciona los mismos campos que serverZones excepto que incluye nombres de grupo.
  • upstreamZones
  • server
    • Una dirección del servidor.
  • requestCounter
    • El número total de conexiones de cliente reenviadas a este servidor.
  • inBytes
    • El número total de bytes recibidos de este servidor.
  • outBytes
    • El número total de bytes enviados a este servidor.
  • responses
    • 1xx, 2xx, 3xx, 4xx, 5xx
    • El número de respuestas con códigos de estado 1xx, 2xx, 3xx, 4xx y 5xx.
  • requestMsecCounter
    • El número de tiempo de procesamiento de solicitudes acumulado incluyendo upstream en milisegundos.
  • requestMsec
    • El promedio de los tiempos de procesamiento de solicitudes incluyendo upstream en milisegundos.
  • requestMsecs
    • times
    • Los tiempos en milisegundos en los tiempos de procesamiento de solicitudes.
    • msecs
    • Los tiempos de procesamiento de solicitudes incluyendo upstream en milisegundos.
  • requestBuckets
    • msecs
    • Los valores de los cubos del histograma establecidos por la directiva vhost_traffic_status_histogram_buckets.
    • counters
    • Los valores acumulativos por la razón de que cada valor de cubo es mayor o igual al tiempo de procesamiento de la solicitud incluyendo upstream.
  • responseMsecCounter
    • El número de tiempo de procesamiento de respuesta acumulado solo upstream en milisegundos.
  • responseMsec
    • El promedio de los tiempos de procesamiento de respuesta solo upstream en milisegundos.
  • responseMsecs
    • times
    • Los tiempos en milisegundos en los tiempos de procesamiento de solicitudes.
    • msecs
    • Los tiempos de procesamiento de respuestas solo upstream en milisegundos.
  • responseBuckets
    • msecs
    • Los valores de los cubos del histograma establecidos por la directiva vhost_traffic_status_histogram_buckets.
    • counters
    • Los valores acumulativos por la razón de que cada valor de cubo es mayor o igual al tiempo de procesamiento de respuesta solo upstream.
  • weight
    • Configuración actual de weight del servidor.
  • maxFails
    • Configuración actual de max_fails del servidor.
  • failTimeout
    • Configuración actual de fail_timeout del servidor.
  • backup
    • Configuración actual de backup del servidor.
  • down
    • Configuración actual de down del servidor. Básicamente, esto es solo una marca del servidor caído del ngx_http_upstream_module (ej. server backend3.example.com down), no el estado real del servidor upstream. Cambiará a estado real si habilitas la directiva de zona upstream.
  • cacheZones
  • maxSize
    • El límite en el tamaño máximo de la caché especificada en la configuración. Si max_size en la directiva proxy_cache_path no está especificado, se asigna el valor dependiente del sistema NGX_MAX_OFF_T_VALUE por defecto. En otras palabras, este valor es de nginx, no lo que especifiqué.
  • usedSize
    • El tamaño actual de la caché. Este valor se toma de nginx como el valor anterior maxSize.
  • inBytes
    • El número total de bytes recibidos de la caché.
  • outBytes
    • El número total de bytes enviados desde la caché.
  • responses
    • miss
    • El número de fallos de caché.
    • bypass
    • El número de omisiones de caché.
    • expired
    • El número de cachés expirados.
    • stale
    • El número de cachés obsoletos.
    • updating
    • El número de cachés actualizando.
    • revalidated
    • El número de cachés revalidados.
    • hit
    • El número de aciertos de caché.
    • scarce
    • El número de escasez de caché.

Json utilizado por control

/{status_uri}/control?cmd=reset&...

/{status_uri}/control?cmd=delete&...

  • processingReturn
  • El resultado de verdadero o falso.
  • processingCommandString
  • La cadena de comando solicitada.
  • processingGroupString
  • La cadena de grupo solicitada.
  • processingZoneString
  • La cadena de zona solicitada.
  • processingCounts
  • El número de procesamiento real.

Variables

Las siguientes variables integradas se proporcionan:

  • $vts_request_counter
  • El número total de solicitudes de cliente recibidas de los clientes.
  • $vts_in_bytes
  • El número total de bytes recibidos de los clientes.
  • $vts_out_bytes
  • El número total de bytes enviados a los clientes.
  • $vts_1xx_counter
  • El número de respuestas con códigos de estado 1xx.
  • $vts_2xx_counter
  • El número de respuestas con códigos de estado 2xx.
  • $vts_3xx_counter
  • El número de respuestas con códigos de estado 3xx.
  • $vts_4xx_counter
  • El número de respuestas con códigos de estado 4xx.
  • $vts_5xx_counter
  • El número de respuestas con códigos de estado 5xx.
  • $vts_cache_miss_counter
  • El número de fallos de caché.
  • $vts_cache_bypass_counter
  • El número de omisiones de caché.
  • $vts_cache_expired_counter
  • El número de cachés expirados.
  • $vts_cache_stale_counter
  • El número de cachés obsoletos.
  • $vts_cache_updating_counter
  • El número de cachés actualizando.
  • $vts_cache_revalidated_counter
  • El número de cachés revalidados.
  • $vts_cache_hit_counter
  • El número de aciertos de caché.
  • $vts_cache_scarce_counter
  • El número de escasez de caché.
  • $vts_request_time_counter
  • El número de tiempo de procesamiento de solicitudes acumulado.
  • $vts_request_time
  • El promedio de los tiempos de procesamiento de solicitudes.

Límite

Es posible limitar el tráfico total por cada host utilizando la directiva vhost_traffic_status_limit_traffic. También es posible limitar todo el tráfico utilizando la directiva vhost_traffic_status_limit_traffic_by_set_key. Cuando se excede el límite, el servidor devolverá el error 503 (Service Temporarily Unavailable) en respuesta a una solicitud. El código de retorno puede ser variable.

Para limitar el tráfico para el servidor

http {

    vhost_traffic_status_zone;

    ...

    server {

        server_name *.example.org;

        vhost_traffic_status_limit_traffic in:64G;
        vhost_traffic_status_limit_traffic out:1024G;

        ...
    }
}
  • Limitar el tráfico total de entrada/salida en el *.example.org a 64G y 1024G respectivamente. Funciona individualmente por cada dominio si la directiva vhost_traffic_status_filter_by_host está habilitada.

Para limitar el tráfico para el filtro

http {
    geoip_country /usr/share/GeoIP/GeoIP.dat;

    vhost_traffic_status_zone;

    ...

    server {

        server_name example.org;

        vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;
        vhost_traffic_status_limit_traffic_by_set_key FG@country::$server_name@US out:1024G;
        vhost_traffic_status_limit_traffic_by_set_key FG@country::$server_name@CN out:2048G;

        ...

    }
}
  • Limitar el tráfico total de entrada a EE.UU. y CN en el example.org a 1024G y 2048G respectivamente.

Para limitar el tráfico para upstream

http {

    vhost_traffic_status_zone;

    ...

    upstream backend {
        server 10.10.10.17:80;
        server 10.10.10.18:80;
    }

    server {

        server_name example.org;

        location /backend {
            vhost_traffic_status_limit_traffic_by_set_key UG@backend@10.10.10.17:80 in:512G;
            vhost_traffic_status_limit_traffic_by_set_key UG@backend@10.10.10.18:80 in:1024G;
            proxy_pass http://backend;
        }

        ...

    }
}
  • Limitar el tráfico total de entrada en el backend upstream en el example.org a 512G y 1024G por cada par.

Advertencias: El tráfico es la transferencia acumulativa o contador, no un ancho de banda.

Casos de uso

Es posible calcular las estadísticas individuales definidas por el usuario utilizando la directiva vhost_traffic_status_filter_by_set_key.

Para calcular el tráfico para un país individual utilizando GeoIP

http {
    geoip_country /usr/share/GeoIP/GeoIP.dat;

    vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_set_key $geoip_country_code country::*;

    ...

    server {

        ...

        vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}
  • Calcular el tráfico para un país individual de todos los grupos de servidores.
  • Calcular el tráfico para un país individual de cada grupo de servidores.

Básicamente, la imagen de las banderas de los países está incorporada en HTML. La imagen de las banderas de los países se habilita si la cadena country está incluida en el nombre del grupo que es el segundo argumento de la directiva vhost_traffic_status_filter_by_set_key.

Para calcular el tráfico para un volumen de almacenamiento individual

http {
    vhost_traffic_status_zone;

    ...

    server {

        ...

        location ~ ^/storage/(.+)/.*$ {
            set $volume $1;
            vhost_traffic_status_filter_by_set_key $volume storage::$server_name;
        }

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}
  • Calcular el tráfico para un volumen de almacenamiento individual coincidente con la expresión regular de la directiva location.

Para calcular el tráfico para un agente de usuario individual

http {
    vhost_traffic_status_zone;

    map $http_user_agent $filter_user_agent {
        default 'unknown';
        ~iPhone ios;
        ~Android android;
        ~(MSIE|Mozilla) windows;
    }

    vhost_traffic_status_filter_by_set_key $filter_user_agent agent::*;

    ...

    server {

        ...

        vhost_traffic_status_filter_by_set_key $filter_user_agent agent::$server_name;

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}
  • Calcular el tráfico para un http_user_agent individual.

Para calcular el tráfico para códigos de estado http detallados

http {
    vhost_traffic_status_zone;

    server {

        ...

        vhost_traffic_status_filter_by_set_key $status $server_name;

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}
  • Calcular el tráfico para códigos de estado http detallados.

Advertencias: La variable $status está disponible en nginx-(1.3.2, 1.2.2).

Para calcular el tráfico para dns dinámico

Si el dominio tiene múltiples registros A de DNS, puedes calcular el tráfico para IPs individuales para el dominio utilizando la función de filtro o una variable en proxy_pass.

http {
    vhost_traffic_status_zone;

    upstream backend {
        elb.example.org:80;
    }

    ...

    server {

        ...

        location /backend {
            vhost_traffic_status_filter_by_set_key $upstream_addr upstream::backend;
            proxy_pass backend;
        }
    }
}
  • Calcular el tráfico para IPs individuales para el dominio elb.example.org. Si elb.example.org tiene múltiples registros A de DNS, se mostrarán todas las IPs en filterZones. En la configuración anterior, cuando NGINX se inicia o recarga su configuración, consulta a un servidor DNS para resolver el dominio y los registros A de DNS se almacenan en caché en la memoria. Por lo tanto, los registros A de DNS no cambian en la memoria incluso si los registros A de DNS son cambiados por el administrador de DNS a menos que NGINX se reinicie o recargue.
http {
    vhost_traffic_status_zone;

    resolver 10.10.10.53 valid=10s

    ...

    server {

        ...

        location /backend {
            set $backend_server elb.example.org;
            proxy_pass http://$backend_server;
        }
    }
}
  • Calcular el tráfico para IPs individuales para el dominio elb.example.org. Si el registro A de DNS de elb.example.org cambia, se mostrarán tanto la IP antigua como la nueva en ::nogroups. A diferencia de la configuración del primer grupo upstream, la segunda configuración funciona bien incluso si los registros A de DNS son cambiados por el administrador de DNS.

Advertencias: Para más detalles sobre NGINX DNS, consulta el dns-service-discovery-nginx-plus.

Para calcular el tráfico excepto por la página de estado

http {
    vhost_traffic_status_zone;

    ...

    server {

        ...

        location /status {
            vhost_traffic_status_bypass_limit on;
            vhost_traffic_status_bypass_stats on;
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

Para mantener los datos de estadísticas de forma permanente

http {
    vhost_traffic_status_zone;
    vhost_traffic_status_dump /var/log/nginx/vts.db;

    ...

    server {

        ...

    }
}
  • La directiva vhost_traffic_status_dump mantiene los datos de estadísticas de forma permanente incluso si el sistema se reinicia o nginx se reinicia. Consulta la directiva vhost_traffic_status_dump para un uso detallado.

Personalización

Para personalizar después de que se instale el módulo

  1. Necesitas cambiar la cadena {{uri}} a tu URI de estado en status.template.html de la siguiente manera:

    shell> vi share/status.template.html
    
    var vtsStatusURI = "yourStatusUri/format/json", vtsUpdateInterval = 1000;
    

  2. Y luego, personaliza y copia status.template.html al directorio raíz del servidor de la siguiente manera:

    shell> cp share/status.template.html /usr/share/nginx/html/status.html
    

  3. Configura nginx.conf

       server {
           server_name example.org;
           root /usr/share/nginx/html;
    
           # Redirigir solicitudes para / a /status.html
           location = / {
               return 301 /status.html;
           }
    
           location = /status.html {}
    
           # Todo lo que comienza con /status (excepto /status.html) es
           # procesado por el controlador de estado
           location /status {
               vhost_traffic_status_display;
               vhost_traffic_status_display_format json;
           }
       }
    

  4. Accede a tu html.

    http://example.org/status.html
    

Para personalizar antes de que se instale el módulo

  1. Modifica share/status.template.html (No cambies la cadena {{uri}})

  2. Recrea el ngx_http_vhost_traffic_status_module_html.h de la siguiente manera:

    shell> cd util
    shell> ./tplToDefine.sh ../share/status.template.html > ../src/ngx_http_vhost_traffic_status_module_html.h
    

  3. Agrega el módulo a la configuración de construcción añadiendo --add-module=/path/to/nginx-module-vts

  4. Construye el binario de nginx.

  5. Instala el binario de nginx.

Dashboard de React

Un dashboard alternativo basado en React está disponible en el directorio front/. Obtiene datos de la API existente /status/format/json y renderiza las mismas tablas que la página HTML incorporada.

Requisitos previos

  • Node.js >= 20.19 (o >= 22.12)
  • npm

Servir a través de nginx

Agrega el siguiente bloque location junto a la configuración existente de /status:

location = /status/dashboard {
    return 301 /status/dashboard/;
}

location /status/dashboard/ {
    alias /path/to/nginx-module-vts/front/dist/;
    index index.html;
}

Después de recargar nginx, el dashboard de React estará disponible en /status/dashboard.

Desarrollo

shell> make front-dev

El servidor de desarrollo Vite proxy las solicitudes /status/format/json a http://localhost:80 para que el dashboard pueda desarrollarse contra una instancia de nginx en ejecución.

Limpiar

shell> make front-clean

Elimina front/dist/ y front/node_modules/.

Directivas

draw_io_vts_diagram

vhost_traffic_status

- -
Sintaxis vhost_traffic_status \<on|off>
Predeterminado off
Contexto http, server, location

Descripción: Habilita o deshabilita el funcionamiento del módulo. Si estableces la directiva vhost_traffic_status_zone, se habilita automáticamente.

vhost_traffic_status_zone

- -
Sintaxis vhost_traffic_status_zone [shared:name:size]
Predeterminado shared:vhost_traffic_status:1m
Contexto http

Descripción: Establece parámetros para una zona de memoria compartida que mantendrá estados para varias claves. La caché se comparte entre todos los procesos de trabajo. En la mayoría de los casos, el tamaño de memoria compartida utilizado por nginx-module-vts no aumenta mucho. El tamaño de memoria compartida aumenta bastante al usar la directiva vhost_traffic_status_filter_by_set_key pero si las claves del filtro son fijas (ej. el número total de códigos de país es aproximadamente 240) no aumenta continuamente.

Si usas la directiva vhost_traffic_status_filter_by_set_key, configúralo de la siguiente manera:

  • Establece un tamaño de memoria compartida de más de 32M por defecto. (vhost_traffic_status_zone shared:vhost_traffic_status:32m)
  • Si el mensaje ("ngx_slab_alloc() failed: no memory in vhost_traffic_status_zone") se imprime en error_log, aumenta a más de (usedSize * 2).

vhost_traffic_status_dump

- -
Sintaxis vhost_traffic_status_dump path [period]
Predeterminado -
Contexto http

Descripción: Habilita el volcado y la restauración de datos de estadísticas. La path es una ubicación para volcar los datos de estadísticas. (ej. /var/log/nginx/vts.db) El period es un tiempo de ciclo de respaldo. (Predeterminado: 60s) Se respalda inmediatamente independientemente del ciclo de respaldo si nginx sale por señal (SIGKILL).

vhost_traffic_status_display

- -
Sintaxis vhost_traffic_status_display
Predeterminado -
Contexto http, server, location

Descripción: Habilita o deshabilita el controlador de visualización del módulo.

vhost_traffic_status_display_format

- -
Sintaxis vhost_traffic_status_display_format \<json|html|jsonp|prometheus>
Predeterminado json
Contexto http, server, location

Descripción: Establece el formato de salida del controlador de visualización. Si estableces json, responderá con un documento JSON. Si estableces html, responderá con el panel de control en vivo incorporado en HTML. Si estableces jsonp, responderá con una función de callback JSONP (predeterminado: ngx_http_vhost_traffic_status_jsonp_callback). Si estableces prometheus, responderá con un documento prometheus.

vhost_traffic_status_display_jsonp

- -
Sintaxis vhost_traffic_status_display_jsonp callback
Predeterminado ngx_http_vhost_traffic_status_jsonp_callback
Contexto http, server, location

Descripción: Establece el nombre de callback para el JSONP.

vhost_traffic_status_display_sum_key

- -
Sintaxis vhost_traffic_status_display_sum_key name
Predeterminado *
Contexto http, server, location

Descripción: Establece la cadena de clave de suma en el campo serverZones del JSON. La cadena de clave de suma predeterminada es el "*".

vhost_traffic_status_filter

- -
Sintaxis vhost_traffic_status_filter \<on|off>
Predeterminado on
Contexto http, server, location

Descripción: Habilita o deshabilita las características de filtro.

vhost_traffic_status_filter_by_host

- -
Sintaxis vhost_traffic_status_filter_by_host \<on|off>
Predeterminado off
Contexto http, server, location

Descripción: Habilita o deshabilita las claves por el campo de encabezado Host. Si estableces on y la directiva server_name de nginx establece varios o nombres comodín comenzando con un asterisco, por ejemplo, “.example.org” y se solicita al servidor con un nombre de host como (a|b|c).example.org o .example.org entonces json serverZones se imprime de la siguiente manera:

server {
  server_name *.example.org;
  vhost_traffic_status_filter_by_host on;

  ...

}
  ...
  "serverZones": {
      "a.example.org": {
      ...
      },
      "b.example.org": {
      ...
      },
      "c.example.org": {
      ...
      }
      ...
   },
   ...

Proporciona la misma función que establece vhost_traffic_status_filter_by_set_key $host.

vhost_traffic_status_filter_by_set_key

- -
Sintaxis vhost_traffic_status_filter_by_set_key key [name]
Predeterminado -
Contexto http, server, location

Descripción: Habilita las claves por variable definida por el usuario. La key es una cadena clave para calcular el tráfico. La name es una cadena de grupo para calcular el tráfico. La key y name pueden contener variables como $host, $server_name. El grupo de name pertenece a filterZones si se especifica. El grupo de key pertenece a serverZones si no se especifica el segundo argumento name. El ejemplo con el módulo geoip es el siguiente:

server {
  server_name example.org;
  vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;

  ...

}
  ...
  "serverZones": {
  ...
  },
  "filterZones": {
      "country::example.org": {
          "KR": {
              "requestCounter":...,
              "inBytes":...,
              "outBytes":...,
              "responses":{
                  "1xx":...,
                  "2xx":...,
                  "3xx":...,
                  "4xx":...,
                  "5xx":...,
                  "miss":...,
                  "bypass":...,
                  "expired":...,
                  "stale":...,
                  "updating":...,
                  "revalidated":...,
                  "hit":...,
                  "scarce":...
              },
              "requestMsecCounter":...,
              "requestMsec":...,
              "requestMsecs":{
                  "times":[...],
                  "msecs":[...]
              },
          },
          "US": {
          ...
          },
          ...
      },
      ...
  },
  ...

vhost_traffic_status_filter_check_duplicate

- -
Sintaxis vhost_traffic_status_filter_check_duplicate \<on|off>
Predeterminado on
Contexto http, server, location

Descripción: Habilita o deshabilita la deduplicación de vhost_traffic_status_filter_by_set_key. Se procesa solo uno de los valores duplicados (key + name) en cada directiva (http, server, location) si esta opción está habilitada.

vhost_traffic_status_filter_max_node

- -
Sintaxis vhost_traffic_status_filter_max_node number [string ...]
Predeterminado 0
Contexto http

Descripción: Habilita el límite del tamaño del filtro utilizando los valores de number y string especificados. Si se excede el number, se eliminan los nodos existentes mediante el algoritmo LRU. El argumento number es el tamaño del nodo que se limitará. El valor predeterminado 0 no limita los filtros. Un nodo es un objeto en filterZones en el documento JSON. Los argumentos de string son los valores de cadena coincidentes para el valor de cadena de grupo establecido por la directiva vhost_traffic_status_filter_by_set_key. Incluso si solo la primera parte coincide, la coincidencia es exitosa como la expresión regular /^string.*/. Por defecto, si no estableces argumentos de string, se aplicará a todos los filtros.

Por ejemplos:

$ vi nginx.conf

http {

    geoip_country /usr/share/GeoIP/GeoIP.dat;

    vhost_traffic_status_zone;

    # Todos los filtros están limitados a un total de 16 nodos.
    # vhost_traffic_status_filter_max_node 16

    # Los patrones de cadena de grupo `/^uris.*/` y `/^client::ports.*/` están limitados a un total de 64 nodos.
    vhost_traffic_status_filter_max_node 16 uris client::ports;

    ...

    server {

        server_name example.org;

        ...

        vhost_traffic_status_filter_by_set_key $uri uris::$server_name;
        vhost_traffic_status_filter_by_set_key $remote_port client::ports::$server_name;
        vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;

    }
}

$ for i in {0..1000}; do curl -H 'Host: example.org' -i "http://localhost:80/test$i"; done

screenshot-vts-filter-max-node

En el ejemplo anterior, los patrones de cadena de grupo /^uris.*/ y /^client::ports.*/ están limitados a un total de 16 nodos. Los otros filtros como country::.* no están limitados.

vhost_traffic_status_limit

- -
Sintaxis vhost_traffic_status_limit \<on|off>
Predeterminado on
Contexto http, server, location

Descripción: Habilita o deshabilita las características de límite.

vhost_traffic_status_limit_traffic

- -
Sintaxis vhost_traffic_status_limit_traffic member:size [code]
Predeterminado -
Contexto http, server, location

Descripción: Habilita el límite de tráfico para el member especificado. El member es una cadena de miembro para limitar el tráfico. El size es un tamaño (k/m/g) para limitar el tráfico. El code es un código para devolver en respuesta a solicitudes rechazadas. (Predeterminado: 503)

Las cadenas member disponibles son las siguientes: * request * El número total de solicitudes de cliente recibidas de los clientes. * in * El número total de bytes recibidos de los clientes. * out * El número total de bytes enviados a los clientes. * 1xx * El número de respuestas con códigos de estado 1xx. * 2xx * El número de respuestas con códigos de estado 2xx. * 3xx * El número de respuestas con códigos de estado 3xx. * 4xx * El número de respuestas con códigos de estado 4xx. * 5xx * El número de respuestas con códigos de estado 5xx. * cache_miss * El número de fallos de caché. * cache_bypass * El número de omisiones de caché. * cache_expired * El número de cachés expirados. * cache_stale * El número de cachés obsoletos. * cache_updating * El número de cachés actualizando. * cache_revalidated * El número de cachés revalidados. * cache_hit * El número de aciertos de caché. * cache_scarce * El número de escasez de caché.

vhost_traffic_status_limit_traffic_by_set_key

- -
Sintaxis vhost_traffic_status_limit_traffic_by_set_key key member:size [code]
Predeterminado -
Contexto http, server, location

Descripción: Habilita el límite de tráfico para el key y member especificados. La key es una cadena clave para limitar el tráfico. El member es una cadena de miembro para limitar el tráfico. El size es un tamaño (k/m/g) para limitar el tráfico. El code es un código para devolver en respuesta a solicitudes rechazadas. (Predeterminado: 503)

La sintaxis de key es la siguiente: * group@[subgroup@]name

Las cadenas de group disponibles son las siguientes: * NO * El grupo de servidores. * UA * El grupo de upstream solo. * UG * El grupo de upstream (usa subgroup). * CC * El grupo de caché. * FG * El grupo de filtro (usa subgroup).

Las cadenas de member disponibles son las siguientes: * request * El número total de solicitudes de cliente recibidas de los clientes. * in * El número total de bytes recibidos de los clientes. * out * El número total de bytes enviados a los clientes. * 1xx * El número de respuestas con códigos de estado 1xx. * 2xx * El número de respuestas con códigos de estado 2xx. * 3xx * El número de respuestas con códigos de estado 3xx. * 4xx * El número de respuestas con códigos de estado 4xx. * 5xx * El número de respuestas con códigos de estado 5xx. * cache_miss * El número de fallos de caché. * cache_bypass * El número de omisiones de caché. * cache_expired * El número de cachés expirados. * cache_stale * El número de cachés obsoletos. * cache_updating * El número de cachés actualizando. * cache_revalidated * El número de cachés revalidados. * cache_hit * El número de aciertos de caché. * cache_scarce * El número de escasez de caché.

El member es el mismo que la directiva vhost_traffic_status_limit_traffic.

vhost_traffic_status_limit_check_duplicate

- -
Sintaxis vhost_traffic_status_limit_check_duplicate \<on|off>
Predeterminado on
Contexto http, server, location

Descripción: Habilita o deshabilita la deduplicación de vhost_traffic_status_limit_by_set_key. Se procesa solo uno de los valores duplicados (member | key + member) en cada directiva (http, server, location) si esta opción está habilitada.

vhost_traffic_status_set_by_filter

- -
Sintaxis vhost_traffic_status_set_by_filter $variable group/zone/name
Predeterminado -
Contexto http, server, location, if

Descripción: Obtiene el valor de estado especificado almacenado en memoria compartida. Puede adquirir casi todos los valores de estado y el valor obtenido se almacena en $variable que es el primer argumento.

  • group
  • server
  • filter
  • upstream@alone
  • upstream@group
  • cache
  • zone
  • server
    • name
  • filter
    • filter_group@name
  • upstream@group
    • upstream_group@name
  • upstream@alone
    • @name
  • cache
    • name
  • name
  • requestCounter
    • El número total de solicitudes de cliente recibidas de los clientes.
  • requestMsecCounter
    • El número de tiempo de procesamiento de solicitudes acumulado en milisegundos.
  • requestMsec
    • El promedio de los tiempos de procesamiento de solicitudes en milisegundos.
  • responseMsecCounter
    • El número de tiempo de procesamiento de respuesta acumulado solo upstream en milisegundos.
  • responseMsec
    • El promedio de los tiempos de procesamiento de respuesta solo upstream en milisegundos.
  • inBytes
    • El número total de bytes recibidos de los clientes.
  • outBytes
    • El número total de bytes enviados a los clientes.
  • 1xx, 2xx, 3xx, 4xx, 5xx
    • El número de respuestas con códigos de estado 1xx, 2xx, 3xx, 4xx y 5xx.
  • cacheMaxSize
    • El límite en el tamaño máximo de la caché especificada en la configuración.
  • cacheUsedSize
    • El tamaño actual de la caché.
  • cacheMiss
    • El número de fallos de caché.
  • cacheBypass
    • El número de omisiones de caché.
  • cacheExpired
    • El número de cachés expirados.
  • cacheStale
    • El número de cachés obsoletos.
  • cacheUpdating
    • El número de cachés actualizando.
  • cacheRevalidated
    • El número de cachés revalidados.
  • cacheHit
    • El número de aciertos de caché.
  • cacheScarce
    • El número de escasez de caché.
  • weight
    • Configuración actual de peso del servidor.
  • maxFails
    • Configuración actual de max_fails del servidor.
  • failTimeout
    • Configuración actual de fail_timeout del servidor.
  • backup
    • Configuración actual de backup del servidor. (0|1)
  • down
    • Configuración actual de down del servidor. (0|1)

Advertencias: El name es sensible a mayúsculas. Todos los valores devueltos son de tipo entero.

Por ejemplos: * requestCounter en serverZones * vhost_traffic_status_set_by_filter $requestCounter server/example.org/requestCounter * requestCounter en filterZones * vhost_traffic_status_set_by_filter $requestCounter filter/country::example.org@KR/requestCounter * requestCounter en upstreamZones * vhost_traffic_status_set_by_filter $requestCounter upstream@group/backend@10.10.10.11:80/requestCounter * requestCounter en upstreamZones::nogroups * vhost_traffic_status_set_by_filter $requestCounter upstream@alone/10.10.10.11:80/requestCounter * cacheHit en cacheZones * vhost_traffic_status_set_by_filter $cacheHit cache/my_cache_name/cacheHit

vhost_traffic_status_average_method

- -
Sintaxis vhost_traffic_status_average_method \<AMM|WMA> [period]
Predeterminado AMM 60s
Contexto http, server, location

Descripción: Establece el método que es una fórmula que calcula el promedio de los tiempos de procesamiento de respuesta. El period es un tiempo efectivo de los valores utilizados para el cálculo del promedio. (Predeterminado: 60s) Si se establece period a 0, se ignora el tiempo efectivo. En este caso, se mostrará el último valor promedio incluso si no hay solicitudes y después de que transcurra el tiempo. Los valores correspondientes son requestMsec y responseMsec en JSON.

vhost_traffic_status_histogram_buckets

- -
Sintaxis vhost_traffic_status_histogram_buckets second ...
Predeterminado -
Contexto http, server, location

Descripción: Establece los cubos de observación que se utilizarán en los histogramas. Por defecto, si no estableces esta directiva, no funcionará. El second puede expresarse en decimales con un valor mínimo de 0.001 (1ms). El tamaño máximo de los cubos es 32. Si este valor es insuficiente para ti, cambia el NGX_HTTP_VHOST_TRAFFIC_STATUS_DEFAULT_BUCKET_LEN en el src/ngx_http_vhost_traffic_status_node.h

Por ejemplos: * vhost_traffic_status_histogram_buckets 0.005 0.01 0.05 0.1 0.5 1 5 10 * Los cubos de observación son [5ms 10ms 50ms 100ms 500ms 1s 5s 10s]. * vhost_traffic_status_histogram_buckets 0.005 0.01 0.05 0.1 * Los cubos de observación son [5ms 10ms 50ms 100ms].

Advertencias: Por defecto, si no estableces esta directiva, las estadísticas del histograma no funcionan. Los histogramas restaurados por la directiva vhost_traffic_status_dump no se ven afectados por los cambios en los cubos por la directiva vhost_traffic_status_histogram_buckets. Por lo tanto, debes eliminar primero la zona o el archivo de volcado antes de cambiar los cubos por la directiva vhost_traffic_status_histogram_buckets. Similar a lo anterior, elimina el archivo de volcado cuando uses el histograma por primera vez.

vhost_traffic_status_bypass_limit

- -
Sintaxis vhost_traffic_status_bypass_limit \<on|off>
Predeterminado off
Contexto http, server, location

Descripción: Habilita o deshabilita el bypass de las directivas vhost_traffic_status_limit. Las características de límite se omiten si esta opción está habilitada. Esto es útil si deseas conectar la página web de estado como /status independientemente de las directivas vhost_traffic_status_limit de la siguiente manera:

http {
    vhost_traffic_status_zone;

    ...

    server {

        ...

        location /status {
            vhost_traffic_status_bypass_limit on;
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

vhost_traffic_status_bypass_stats

- -
Sintaxis vhost_traffic_status_bypass_stats \<on|off>
Predeterminado off
Contexto http, server, location

Descripción: Habilita o deshabilita el bypass de vhost_traffic_status. Las características de estadísticas de estado de tráfico se omiten si esta opción está habilitada. En otras palabras, se excluye de las estadísticas de estado de tráfico. Esto es útil si deseas ignorar tu solicitud en la página web de estado como /status de la siguiente manera:

http {
    vhost_traffic_status_zone;

    ...

    server {

        ...

        location /status {
            vhost_traffic_status_bypass_stats on;
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

vhost_traffic_status_stats_by_upstream

- -
Sintaxis vhost_traffic_status_stats_by_upstream \<on|off>
Predeterminado on
Contexto http

Descripción: Habilita o deshabilita las estadísticas de upstreamZone. La upstreamZone en las características de estadísticas de estado de tráfico se omite si esta opción está deshabilitada. En otras palabras, se excluye de las estadísticas de estado de tráfico. Esto es útil si deseas deshabilitar la recopilación de estadísticas para servidores upstream para reducir la carga de CPU.

http {
    vhost_traffic_status_zone;
    vhost_traffic_status_stats_by_upstream off;

    proxy_cache_path /var/cache/nginx keys_zone=zone1:1m max_size=1g inactive=24h;
    upstream backend {
       ...
    }
    ...

    server {

        ...

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
        location /backend {
            proxy_cache zone1;
            proxy_pass http://backend;
        }
    }
}

vhost_traffic_status_measure_status_codes

Permite rastrear códigos de estado HTTP específicos o todos los códigos de estado en el módulo de estado de tráfico de Vhost.

- -
Sintaxis vhost_traffic_status_measure_status_codes [all] [status_code1] [status_code2] ...
Predeterminado off
Contexto http

Parámetros

  • status_code1, status_code2, ...: Códigos de estado HTTP específicos a rastrear (100-599)
  • all: Rastrear todos los códigos de estado HTTP

Ejemplos

Rastrear códigos de estado específicos:

vhost_traffic_status_measure_status_codes 200 404 500;

Rastrear todos los códigos de estado:

vhost_traffic_status_measure_status_codes all;

Descripción

  • Por defecto, no se habilita el rastreo de códigos de estado específicos.
  • Los códigos de estado deben estar en orden ascendente.
  • Solo se aceptan códigos de estado HTTP válidos entre 100 y 599.
  • Al usar all, se rastreará cada código de estado.

Lanzamientos

Para realizar un lanzamiento, crea una entrada de changelog PR con git-chglog

version="v0.2.0"
git checkout -b "cut-${version}"
git-chglog -o CHANGELOG.md --next-tag "${version}"
git add CHANGELOG.md
sed -i "s/NGX_HTTP_VTS_MODULE_VERSION \".*/NGX_HTTP_VTS_MODULE_VERSION \"${version}\"/" src/ngx_http_vhost_traffic_status_module.h
git add src/ngx_http_vhost_traffic_status_module.h
git-chglog -t .chglog/RELNOTES.tmpl --next-tag "${version}" "${version}" | git commit -F-

Después de que el PR sea fusionado, crea la nueva etiqueta y lanzamiento en las GitHub Releases.

Véase también