Saltar a contenido

vts: Módulo de estado de 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
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-vts
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:

load_module modules/ngx_http_vhost_traffic_status_module.so;

Este documento describe nginx-module-vts v0.2.5 lanzado el 28 de diciembre de 2025.


CI License

Módulo de estado de tráfico de host virtual de NGINX

Prueba

Ejecuta sudo prove -r t después de haber instalado este módulo. El sudo es necesario porque la prueba requiere 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 antigua.

Primero, se requiere la directiva vhost_traffic_status_zone, 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 que restablezca o elimine 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 es un milisegundo.
  • connections
  • Conexiones totales y solicitudes (igual que stub_status_module en 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. Las redirecciones internas (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 inexactitudes. 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 desactivado". Al usar varios dominios, se establece en el primer dominio (izquierda) de la directiva server_name. Si no deseas esto, 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 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 instante

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

Para obtener zonas completas

  • 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 mainZones son 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 instante

Restablece los valores de las zonas especificadas a 0.

Para restablecer zonas completas

  • /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 instante

Elimina las zonas especificadas en la memoria compartida.

Para eliminar zonas completas

  • /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/[email protected]: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 solicitudes de conexiones de cliente.
  • 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 obsoletas.
    • updating
    • El número de cachés en actualización.
    • revalidated
    • El número de cachés revalidadas.
    • 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 cubo 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 solicitudes.
  • 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 cubo 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 solicitudes incluyendo upstream.
  • responseMsecCounter
    • El número de tiempo de procesamiento de respuestas solo upstream acumulado en milisegundos.
  • responseMsec
    • El promedio de los tiempos de procesamiento de respuestas solo upstream en milisegundos.
  • responseMsecs
    • times
    • Los tiempos en milisegundos en los tiempos de procesamiento.
    • msecs
    • Los tiempos de procesamiento de respuestas solo upstream en milisegundos.
  • responseBuckets
    • msecs
    • Los valores de cubo 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 respuestas 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 de que el servidor del ngx_http_upstream_module está caído (por ejemplo, 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é especificado en la configuración. Si max_size en la directiva proxy_cache_path no se especifica, 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 maxSize anterior.
  • 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 obsoletas.
    • updating
    • El número de cachés en actualización.
    • revalidated
    • El número de cachés revalidadas.
    • 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 obsoletas.
  • $vts_cache_updating_counter
  • El número de cachés en actualización.
  • $vts_cache_revalidated_counter
  • El número de cachés revalidadas.
  • $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 modificable.

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 se habilita la directiva vhost_traffic_status_filter_by_host.

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 que ingresa 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@[email protected]:80 in:512G;
            vhost_traffic_status_limit_traffic_by_set_key UG@[email protected]:80 in:1024G;
            proxy_pass http://backend;
        }

        ...

    }
}
  • Limitar el tráfico total que ingresa al 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 estadísticas individuales definidas por el usuario utilizando la directiva vhost_traffic_status_filter_by_set_key.

Para calcular el tráfico por 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 por país individual de grupos de servidores totales.
  • Calcular el tráfico por país individual de cada grupo de servidores.

Básicamente, la imagen de la bandera del país está incorporada en HTML. La imagen de la bandera del país 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 por 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 por volumen de almacenamiento individual que coincida con la expresión regular de la directiva location.

Para calcular el tráfico por 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 por http_user_agent individual

Para calcular el tráfico por código de estado http detallado

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 por código de estado http detallado

Advertencias: $status variable 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 DNS A, puedes calcular el tráfico para IPs individuales del 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 del dominio elb.example.org. Si elb.example.org tiene múltiples registros DNS A, 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 DNS A se almacenan en caché en memoria. Por lo tanto, los registros DNS A no cambian en memoria incluso si los registros DNS A 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 del dominio elb.example.org. Si el registro DNS A de elb.example.org cambia, se mostrarán tanto la antigua IP como la nueva IP en ::nogroups. A diferencia de la primera configuración del grupo upstream, la segunda configuración funciona bien incluso si los registros DNS A 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 instala 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 compilación añadiendo --add-module=/path/to/nginx-module-vts

  4. Compila el binario de nginx.

  5. Instala el binario de nginx.

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 (por ejemplo, el número total de códigos de país es de 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 ruta es una ubicación para volcar los datos de estadísticas. (por ejemplo, /var/log/nginx/vts.db) El periodo es un tiempo de ciclo de respaldo. (Predeterminado: 60s) Se respalda inmediatamente independientemente del ciclo de respaldo si nginx se cierra 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 JSON de serverZones. 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 funciones 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 nombres o un nombre comodín que comienza 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 clave es una cadena clave para calcular el tráfico. El nombre es una cadena de grupo para calcular el tráfico. La clave y el nombre pueden contener variables como $host, $server_name. El grupo del nombre pertenece a filterZones si se especifica. El grupo de la clave pertenece a serverZones si no se especifica el segundo argumento nombre. 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 número y cadena especificados. Si se excede el número, se eliminan los nodos existentes mediante el algoritmo LRU. El argumento número 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 cadena 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 cadena, 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 funciones 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 miembro especificado. El miembro es una cadena de miembro para limitar el tráfico. El tamaño es un tamaño (k/m/g) para limitar el tráfico. El código es un código para devolver en respuesta a solicitudes rechazadas. (Predeterminado: 503)

Las cadenas de miembro 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 obsoletas. * cache_updating * El número de cachés en actualización. * cache_revalidated * El número de cachés revalidadas. * 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 clave es una cadena clave para limitar el tráfico. El miembro es una cadena de miembro para limitar el tráfico. El tamaño es un tamaño (k/m/g) para limitar el tráfico. El código 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 obsoletas. * cache_updating * El número de cachés en actualización. * cache_revalidated * El número de cachés revalidadas. * cache_hit * El número de aciertos de caché. * cache_scarce * El número de escasez de caché.

El miembro 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 (miembro | key + miembro) 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.

  • grupo
  • server
  • filter
  • upstream@alone
  • upstream@group
  • cache
  • zona
  • server
    • name
  • filter
    • filter_group@name
  • upstream@group
    • upstream_group@name
  • upstream@alone
    • @name
  • cache
    • name
  • nombre
  • 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 respuestas solo upstream acumulado en milisegundos.
  • responseMsec
    • El promedio de los tiempos de procesamiento de respuestas 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é especificado 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 obsoletas.
  • cacheUpdating
    • El número de cachés en actualización.
  • cacheRevalidated
    • El número de cachés revalidadas.
  • 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 nombre es sensible a mayúsculas y minú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/[email protected]: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 respuestas. El periodo es un tiempo efectivo de los valores utilizados para el cálculo del promedio. (Predeterminado: 60s) Si se establece periodo en 0, se ignora el tiempo efectivo. En este caso, se muestra el último valor promedio incluso si no hay solicitudes y después del transcurso del 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, primero debes eliminar 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 funciones 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 funciones 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 funciones 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 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 hacer 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 el lanzamiento en las GitHub Releases.

Vea también

GitHub

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