Saltar a contenido

sts: Módulo de estado del tráfico del servidor de transmisión 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-sts
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-sts

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

load_module modules/ngx_http_stream_server_traffic_status_module.so;

Este documento describe nginx-module-sts v0.1.1 lanzado el 04 de julio de 2018.


Licencia

Módulo de estado del tráfico del servidor de transmisión de Nginx

Capturas de pantalla

nginx-module-sts screenshot

Sinopsis

http {
    stream_server_traffic_status_zone;

    ...

    server {

        ...

        location /status {
            stream_server_traffic_status_display;
            stream_server_traffic_status_display_format html;
        }
    }
}

stream {
    server_traffic_status_zone;

    ...

    server {
        ...
    }
}

Descripción

Este es un módulo de Nginx que proporciona acceso a la información del estado del tráfico del servidor de transmisión. Esta es una versión porting del nginx-module-vts al subsistema "stream" de NGINX para soportar las mismas características en nginx-module-vts. Contiene el estado actual, como servidores, upstreams, y filtros definidos por el usuario.

Primero que nada, se requiere tanto la directiva server_traffic_status_zone en el bloque de stream como stream_server_traffic_status_zone en el bloque http, y luego si la directiva stream_server_traffic_status_display está configurada, 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 tableros en vivo y herramientas de monitoreo de terceros.
  • /status/format/html
  • Si solicitas /status/format/html, responderá con el tablero 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 tableros 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": ...,
    "nginxVersion": ...,
    "loadMsec": ...,
    "nowMsec": ...,
    "connections": {
        "active":...,
        "reading":...,
        "writing":...,
        "waiting":...,
        "accepted":...,
        "handled":...,
        "requests":...
    },
    "sharedZones": {
        "name":...,
        "maxSize":...,
        "usedSize":...,
        "usedNode":...
    },
    "streamServerZones": {
        "...":{
            "port":...,
            "protocol":...,
            "connectCounter":...,
            "inBytes":...,
            "outBytes":...,
            "responses":{
                "1xx":...,
                "2xx":...,
                "3xx":...,
                "4xx":...,
                "5xx":...,
            },
            "sessionMsecCounter":...,
            "sessionMsec":...,
            "sessionMsecs":{
                "times":[...],
                "msecs":[...]
            },
            "sessionBuckets":{
                "msecs":[...],
                "counters":[...]
            }
        }
        ...
    },
    "streamFilterZones": {
        "...":{
            "...":{

                "port":...,
                "protocol":...,
                "connectCounter":...,
                "inBytes":...,
                "outBytes":...,
                "responses":{
                    "1xx":...,
                    "2xx":...,
                    "3xx":...,
                    "4xx":...,
                    "5xx":...,
                },
                "sessionMsecCounter":...,
                "sessionMsec":...,
                "sessionMsecs":{
                    "times":[...],
                    "msecs":[...]
                },
                "sessionBuckets":{
                    "msecs":[...],
                    "counters":[...]
                }
            },
            ...
        },
        ...
    },
    "streamUpstreamZones": {
        "...":[
            {
                "server":...,
                "connectCounter":...,
                "inBytes":...,
                "outBytes":...,
                "responses":{
                    "1xx":...,
                    "2xx":...,
                    "3xx":...,
                    "4xx":...,
                    "5xx":...
                },
                "sessionMsecCounter":...,
                "sessionMsec":...,
                "sessionMsecs":{
                    "times":[...],
                    "msecs":[...]
                },
                "sessionBuckets":{
                    "msecs":[...]
                    "counters":[...]
                },
                "uSessionMsecCounter":...,
                "uSessionMsec":...,
                "uSessionMsecs":{
                    "times":[...],
                    "msecs":[...]
                },
                "uSessionBuckets":{
                    "msecs":[...]
                    "counters":[...]
                },
                "uConnectMsecCounter":...,
                "uConnectMsec":...,
                "uConnectMsecs":{
                    "times":[...],
                    "msecs":[...]
                },
                "uConnectBuckets":{
                    "msecs":[...]
                    "counters":[...]
                },
                "uFirstByteMsecCounter":...,
                "uFirstByteMsec":...,
                "uFirstByteMsecs":{
                    "times":[...],
                    "msecs":[...]
                },
                "uFirstByteBuckets":{
                    "msecs":[...]
                    "counters":[...]
                },
                "weight":...,
                "maxFails":...,
                "failTimeout":...,
                "backup":...,
                "down":...
            }
            ...
        ],
        ...
    }
}
  • main
  • Versión básica, tiempo de actividad((nowMsec - loadMsec)/1000)
  • nowMsec, loadMsec es un milisegundo.
  • connections
  • Total de conexiones y solicitudes (igual que stub_status_module en NGINX)
  • streamServerZones
  • Tráfico (entrada/salida) y conteos de solicitudes y respuestas y estado (1xx, 2xx...) tasa de aciertos 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
  • streamFilterZones
  • Tráfico (entrada/salida) y conteos de solicitudes y respuestas y estado (1xx, 2xx...) tasa de aciertos por cada zona de servidor filtrada a través de la directiva server_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 server_traffic_status_filter_by_set_key
  • streamUpstreamZones
  • Tráfico (entrada/salida) y conteos de solicitudes y respuestas por servidor en cada grupo upstream
  • Configuraciones actuales (peso, maxfails, failtimeout...) en nginx.conf

La directiva stream_server_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:

  • streamServerZones
  • in += requested_bytes
  • out += sent_bytes
  • streamFilterZones
  • in += requested_bytes a través del filtro
  • out += sent_bytes a través del filtro
  • streamUpstreamZones
  • in += requested_bytes a través de los ServerZones
  • out += sent_bytes a través de los ServerZones

Todos los cálculos se realizan en la fase de procesamiento de registros de Nginx.

Advertencias: este módulo depende del sistema de registro de nginx (NGX_STREAM_LOG_PHASE: última fase del stream de nginx), por lo que el tráfico puede ser en ciertas circunstancias diferente al tráfico real de ancho de banda. Websocket, descargas canceladas pueden ser causa de inexactitudes. El funcionamiento del módulo no importa en absoluto si la directiva access_log está "on" o "off". Nuevamente, este módulo funciona bien con "access_log off".

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 {

    stream_server_traffic_status_zone;

    ...

    server {

        server_name example.org;

        ...

        location /status {
            stream_server_traffic_status_display;
            stream_server_traffic_status_display_format html;
        }
    }                                                                                                                                                                                           }
}

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

    server_traffic_status_zone;

    server_traffic_status_filter_by_set_key $geoip_country_code country::*;

    server {

        ...

    }

    ...

}

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 recrean. * group=\<server|filter|upstream@alone|upstream@group|*> * server * filter * upstream@alone * upstream@group * * * zone=name * server * name * filter * filter_group@name * upstream@group * upstream_group@name * upstream@alone * @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 todas las zonas

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

Para obtener zonas de grupo

  • streamServerZones
  • /status/control?cmd=status&group=server&zone=*
  • streamFilterZones
  • /status/control?cmd=status&group=filter&zone=*
  • streamUpstreamZones
  • /status/control?cmd=status&group=upstream@group&zone=*
  • streamUpstreamZones::nogroups
  • /status/control?cmd=status&group=upstream@alone&zone=*

Para obtener cada zona

  • zona única en streamServerZones
  • /status/control?cmd=status&group=server&zone=name
  • zona única en streamFilterZones
  • /status/control?cmd=status&group=filter&zone=filter_group@name
  • zona única en streamUpstreamZones
  • /status/control?cmd=status&group=upstream@group&zone=upstream_group@name
  • zona única en streamUpstreamZones::nogroups
  • /status/control?cmd=status&group=upstream@alone&zone=name

Para restablecer zonas de tráfico al instante

Restablece los valores de las zonas especificadas a 0.

Para restablecer todas las zonas

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

Para restablecer zonas de grupo

  • streamServerZones
  • /status/control?cmd=reset&group=server&zone=*
  • streamFilterZones
  • /status/control?cmd=reset&group=filter&zone=*
  • streamUpstreamZones
  • /status/control?cmd=reset&group=upstream@group&zone=*
  • streamUpstreamZones::nogroups
  • /status/control?cmd=reset&group=upstream@alone&zone=*

Para restablecer cada zona

  • zona única en streamServerZones
  • /status/control?cmd=reset&group=server&zone=name
  • zona única en streamFilterZones
  • /status/control?cmd=reset&group=filter&zone=filter_group@name
  • zona única en streamUpstreamZones
  • /status/control?cmd=reset&group=upstream@group&zone=upstream_group@name
  • zona única en streamUpstreamZones::nogroups
  • /status/control?cmd=reset&group=upstream@alone&zone=name

Para eliminar zonas de tráfico al instante

Elimina las zonas especificadas en la memoria compartida.

Para eliminar todas las zonas

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

Para eliminar zonas de grupo

  • streamServerZones
  • /status/control?cmd=delete&group=server&zone=*
  • streamFilterZones
  • /status/control?cmd=delete&group=filter&zone=*
  • streamUpstreamZones
  • /status/control?cmd=delete&group=upstream@group&zone=*
  • streamUpstreamZones::nogroups
  • /status/control?cmd=delete&group=upstream@alone&zone=*

Para eliminar cada zona

  • zona única en streamServerZones
  • /status/control?cmd=delete&group=server&zone=name
  • zona única en streamFilterZones
  • /status/control?cmd=delete&group=filter&zone=filter_group@name
  • zona única en streamUpstreamZones
  • /status/control?cmd=delete&group=upstream@group&zone=upstream_group@name
  • zona única en streamUpstreamZones::nogroups
  • /status/control?cmd=delete&group=upstream@alone&zone=name

JSON

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

Json utilizado por el estado

/{status_uri}/format/json

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

  • hostName
  • Nombre del host.
  • nginxVersion
  • Versión de NGINX proporcionada.
  • 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: stream_server_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 que utilizan la memoria compartida. Se puede obtener un tamaño aproximado para un nodo con la siguiente fórmula: (usedSize / usedNode)
  • streamServerZones
  • connectCounter
    • 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.
  • sessionMsecCounter
    • El número de tiempo acumulado de procesamiento de solicitudes en milisegundos.
  • sessionMsec
    • El promedio de los tiempos de procesamiento de solicitudes en milisegundos.
  • sessionMsecs
    • times
    • Los tiempos en milisegundos en los tiempos de procesamiento de solicitudes.
    • msecs
    • Los tiempos de procesamiento de solicitudes en milisegundos.
  • sessionBuckets
    • msecs
    • Los valores de los cubos del histograma establecidos por la directiva server_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.
  • streamFilterZones
  • Proporciona los mismos campos que streamServerZones excepto que incluye nombres de grupo.
  • streamUpstreamZones
  • server
    • Una dirección del servidor.
  • connectCounter
    • 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.
  • sessionMsecCounter
    • El número de tiempos acumulados de procesamiento de solicitudes en milisegundos incluyendo upstream.
  • sessionMsec
    • El promedio de los tiempos de procesamiento de solicitudes en milisegundos incluyendo upstream.
  • sessionMsecs
    • times
    • Los tiempos en milisegundos en los tiempos de procesamiento de solicitudes.
    • msecs
    • Los tiempos de procesamiento de solicitudes en milisegundos incluyendo upstream.
  • sessionBuckets
    • msecs
    • Los valores de los cubos del histograma establecidos por la directiva server_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.
  • uSessionMsecCounter
    • El número de tiempos acumulados en milisegundos de la duración de la sesión al servidor upstream.
  • uSessionMsec
    • El promedio de los tiempos de duración de la sesión en milisegundos al servidor upstream.
  • uSessionMsecs
    • times
    • Los tiempos en milisegundos en los tiempos de procesamiento de solicitudes.
    • msecs
    • Los tiempos de duración de la sesión en milisegundos al servidor upstream.
  • uSessionBuckets
    • msecs
    • Los valores de los cubos del histograma establecidos por la directiva server_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 duración de la sesión al servidor upstream.
  • uConnectMsecCounter
    • El número de tiempos acumulados en milisegundos para conectarse al servidor upstream.
  • uConnectMsec
    • El promedio de los tiempos en milisegundos para conectarse al servidor upstream (1.11.4).
  • uConnectMsecs
    • times
    • Los tiempos en milisegundos en los tiempos de procesamiento de solicitudes.
    • msecs
    • Los tiempos en milisegundos para conectarse al servidor upstream.
  • uConnectBuckets
    • msecs
    • Los valores de los cubos del histograma establecidos por la directiva server_traffic_status_histogram_buckets.
    • counters
    • Los valores acumulativos por la razón de que cada valor de cubo es mayor o igual al tiempo para conectarse al servidor upstream.
  • uFirstByteMsecCounter
    • El número de tiempos acumulados en milisegundos para recibir el primer byte de datos.
  • uFirstByteMsec
    • El promedio de los tiempos en milisegundos para recibir el primer byte de datos (1.11.4).
  • uFirstByteMsecs
    • times
    • Los tiempos en milisegundos en los tiempos de procesamiento de solicitudes.
    • msecs
    • Los tiempos en milisegundos para recibir el primer byte de datos (1.11.4).
  • uFirstByteBuckets
    • msecs
    • Los valores de los cubos del histograma establecidos por la directiva server_traffic_status_histogram_buckets.
    • counters
    • Los valores acumulativos por la razón de que cada valor de cubo es mayor o igual al tiempo para recibir el primer byte de datos.
  • 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.

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 embebidas se proporcionan en el bloque stream:

  • $sts_connect_counter
  • El número total de solicitudes de cliente recibidas de los clientes.
  • $sts_in_bytes
  • El número total de bytes recibidos de los clientes.
  • $sts_out_bytes
  • El número total de bytes enviados a los clientes.
  • $sts_1xx_counter
  • El número de respuestas con códigos de estado 1xx.
  • $sts_2xx_counter
  • El número de respuestas con códigos de estado 2xx.
  • $sts_3xx_counter
  • El número de respuestas con códigos de estado 3xx.
  • $sts_4xx_counter
  • El número de respuestas con códigos de estado 4xx.
  • $sts_5xx_counter
  • El número de respuestas con códigos de estado 5xx.
  • $sts_session_time
  • El promedio de los tiempos de procesamiento de solicitudes.

Límite

Es posible limitar el tráfico total por cada servidor utilizando la directiva server_traffic_status_limit_traffic. También es posible limitar todo el tráfico utilizando la directiva server_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

stream {

    server_traffic_status_zone;

    ...

    server {

        listen 1981;

        server_traffic_status_limit_traffic in:64G;
        server_traffic_status_limit_traffic out:1024G;

        ...
    }
}
  • Limitar el tráfico total de entrada/salida en el 1981/tcp a 64G y 1024G respectivamente.

Para limitar el tráfico para el filtro

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

    server_traffic_status_zone;

    ...

    server {

        listen 1981;

        server_traffic_status_filter_by_set_key $geoip_country_code country::$server_addr;
        server_traffic_status_limit_traffic_by_set_key FG@country::$server_addr@US out:1024G;
        server_traffic_status_limit_traffic_by_set_key FG@country::$server_addr@CN out:2048G;

        ...

    }
}
  • Limitar el tráfico total que va hacia los EE. UU. y CN en el example.org a 1024G y 2048G respectivamente.

Para limitar el tráfico para upstream

stream {

    server_traffic_status_zone;

    ...

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

    server {

        listen 1981;

        server_traffic_status_limit_traffic_by_set_key UG@[email protected]:80 in:512G;
        server_traffic_status_limit_traffic_by_set_key UG@[email protected]:80 in:1024G;
        proxy_pass backend;

        ...

    }
}
  • Limitar el tráfico total que va hacia el backend upstream en el 1981/tcp 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 server_traffic_status_filter_by_set_key.

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

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

    server_traffic_status_zone;
    server_traffic_status_filter_by_set_key $geoip_country_code country::*;

    ...

    server {

        ...

        server_traffic_status_filter_by_set_key $geoip_country_code country::$server_addr:$server_port;

    }
}
  • 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 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 server_traffic_status_filter_by_set_key.

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 comience con /status (excepto /status.html) es
           # procesado por el manejador de estado
           location /status {
               stream_server_traffic_status_display;
               stream_server_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_stream_server_traffic_status_module_html.h de la siguiente manera:

    shell> cd util
    shell> ./tplToDefine.sh ../share/status.template.html > ../src/ngx_http_stream_server_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-sts
    --add-module=/path/to/nginx-module-stream-sts
    

  4. Construye el binario de nginx.

  5. Instala el binario de nginx.

Directivas

stream_server_traffic_status

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

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

stream_server_traffic_status_zone

- -
Sintaxis stream_server_traffic_status_zone [shared:name]
Predeterminado shared:stream_server_traffic_status
Contexto http

Descripción: Establece parámetros para una zona de memoria compartida especificada por la directiva server_traffic_status_zone en el bloque de stream. Advertencias: El name debe ser el mismo que el especificado por server_traffic_status_zone.

stream_server_traffic_status_display

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

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

stream_server_traffic_status_display_format

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

Descripción: Establece el formato de salida del manejador de visualización. Si configuras json, responderá con un documento JSON. Si configuras html, responderá con el tablero en vivo incorporado en HTML. Si configuras jsonp, responderá con una función de callback JSONP (predeterminado: ngx_http_stream_server_traffic_status_jsonp_callback). Si configuras prometheus, responderá con un documento prometheus.

stream_server_traffic_status_display_jsonp

- -
Sintaxis stream_server_traffic_status_display_jsonp callback
Predeterminado ngx_http_stream_server_traffic_status_jsonp_callback
Contexto http, server, location

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

stream_server_traffic_status_average_method

- -
Sintaxis stream_server_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 period es un tiempo efectivo de los valores utilizados para el cálculo del promedio. (Predeterminado: 60s) Si period se establece en 0, se ignora el tiempo efectivo. En este caso, se muestra el último valor promedio incluso si no hay solicitudes y después de que transcurre el tiempo. Los valores correspondientes son sessionMsec, uSessionMsec, uConnectMsec, uFirstByteMsec en JSON.

server_traffic_status

- -
Sintaxis server_traffic_status \<on|off>
Predeterminado off
Contexto stream, server

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

server_traffic_status_zone

- -
Sintaxis server_traffic_status_zone [shared:name:size]
Predeterminado shared:stream_server_traffic_status:1m
Contexto stream

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.

server_traffic_status_filter

- -
Sintaxis server_traffic_status_filter \<on|off>
Predeterminado on
Contexto stream, server

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

server_traffic_status_filter_by_set_key

- -
Sintaxis server_traffic_status_filter_by_set_key key [name]
Predeterminado -
Contexto stream, server

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

stream {

      ...

      server {
          listen 1981;
          server_traffic_status_filter_by_set_key $geoip_country_code country::$server_addr:$server_port;

          ...

      }
}
  ...
  "streamServerZones": {
  ...
  },
  "streamFilterZones": {
      "country::example.org": {
          "KR": {
              "port":...,
              "protocol":...,
              "connectCounter":...,
              "inBytes":...,
              "outBytes":...,
              "responses":{
                  "1xx":...,
                  "2xx":...,
                  "3xx":...,
                  "4xx":...,
                  "5xx":...,
              },
              "sessionMsec":...
              "sessionMsecs":{
                  "times":[...],
                  "msecs":[...]
              },
            },
          },
          "US": {
          ...
          },
          ...
      },
      ...
  },
  ...

server_traffic_status_filter_check_duplicate

- -
Sintaxis server_traffic_status_filter_check_duplicate \<on|off>
Predeterminado on
Contexto stream, server

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

server_traffic_status_limit

- -
Sintaxis server_traffic_status_limit \<on|off>
Predeterminado on
Contexto stream, server

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

server_traffic_status_limit_traffic

- -
Sintaxis server_traffic_status_limit_traffic member:size [code]
Predeterminado -
Contexto stream, server

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: * connect * El número total de conexiones 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.

server_traffic_status_limit_traffic_by_set_key

- -
Sintaxis server_traffic_status_limit_traffic_by_set_key key member:size [code]
Predeterminado -
Contexto stream, server

Descripción: Habilita el límite de tráfico para el key y member especificados. El 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 group disponibles son las siguientes: * NO * El grupo de servidor. * UA * El grupo de upstream solo. * UG * El grupo de upstream (usar subgroup). * FG * El grupo de filtro (usar subgroup).

Las cadenas member disponibles son las siguientes: * connect * 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.

El member es el mismo que la directiva server_traffic_status_limit_traffic.

server_traffic_status_limit_check_duplicate

- -
Sintaxis server_traffic_status_limit_check_duplicate \<on|off>
Predeterminado on
Contexto stream, server

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

server_traffic_status_average_method

- -
Sintaxis server_traffic_status_average_method \<AMM|WMA> [period]
Predeterminado AMM 60s
Contexto stream, server

Descripción: Establece el método que es una fórmula que calcula el promedio de los tiempos de procesamiento de respuestas. El period es un tiempo efectivo de los valores utilizados para el cálculo del promedio. (Predeterminado: 60s) Si period se establece en 0, se ignora el tiempo efectivo. En este caso, el último valor promedio se muestra incluso si no hay solicitudes y después de que transcurre el tiempo. El valor correspondiente es solo la variable $sts_session_time.

Advertencias: La variable $sts_session_time es el valor calculado en el momento de la última solicitud. No se calcula al usar variables.

server_traffic_status_histogram_buckets

- -
Sintaxis server_traffic_status_histogram_buckets second ...
Predeterminado -
Contexto stream

Descripción: Establece los cubos de observación que se utilizarán en los histogramas. Por defecto, si no configuras 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_STREAM_SERVER_TRAFFIC_STATUS_DEFAULT_BUCKET_LEN en el nginx-mdule-stream-sts/src/ngx_stream_server_traffic_status_node.h y el NGX_HTTP_STREAM_SERVER_TRAFFIC_STATUS_DEFAULT_BUCKET_LEN en el nginx-module-sts/src/ngx_http_stream_server_traffic_status_node.h.

Por ejemplos: * server_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 1s 5s 10s]. * server_traffic_status_histogram_buckets 0.005 0.01 0.05 0.1 * Los cubos de observación son [5ms 10ms 50ms 1s].

Advertencias: Por defecto, si no configuras esta directiva, las estadísticas del histograma no funcionan.

Ver 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-sts.