Pular para conteúdo

vts: Módulo de status de tráfego de host virtual do NGINX

Instalação

Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:

  • RedHat Enterprise Linux 7, 8, 9 e 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 e 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

Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:

load_module modules/ngx_http_vhost_traffic_status_module.so;

Este documento descreve o nginx-module-vts v0.2.5 lançado em 28 de dezembro de 2025.


CI License

Módulo de status de tráfego de host virtual do NGINX

Teste

Execute sudo prove -r t após instalar este módulo. O sudo é necessário porque o teste requer que o NGINX escute na porta 80.

Capturas de tela

screenshot-vts-0

screenshot-vts-1

Sinopse

http {
    vhost_traffic_status_zone;

    ...

    server {

        ...

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

Descrição

Este é um módulo do NGINX que fornece acesso a informações de status de host virtual. Ele contém o status atual, como servidores, upstreams e caches. Isso é semelhante ao monitoramento de atividade em tempo real do NGINX Plus. O HTML embutido também é retirado da página de demonstração da versão antiga.

Primeiramente, a diretiva vhost_traffic_status_zone é necessária, e então, se a diretiva vhost_traffic_status_display estiver definida, pode ser acessada da seguinte forma:

  • /status/format/json
  • Se você solicitar /status/format/json, responderá com um documento JSON contendo os dados de atividade atuais para uso em painéis ao vivo e ferramentas de monitoramento de terceiros.
  • /status/format/html
  • Se você solicitar /status/format/html, responderá com o painel ao vivo embutido em HTML que solicita internamente a /status/format/json.
  • /status/format/jsonp
  • Se você solicitar /status/format/jsonp, responderá com uma função de callback JSONP contendo os dados de atividade atuais para uso em painéis ao vivo e ferramentas de monitoramento de terceiros.
  • /status/format/prometheus
  • Se você solicitar /status/format/prometheus, responderá com um documento prometheus contendo os dados de atividade atuais.
  • /status/control
  • Se você solicitar /status/control, responderá com um documento JSON após redefinir ou excluir zonas através de uma string de consulta. Veja o Controle.

O documento JSON contém o seguinte:

{
    "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
  • Versão básica, tempo de atividade((nowMsec - loadMsec)/1000)
  • nowMsec, loadMsec é em milissegundos.
  • connections
  • Total de conexões e solicitações (igual ao stub_status_module no NGINX)
  • sharedZones
  • As informações de memória compartilhada usadas no nginx-module-vts.
  • serverZones
  • Tráfego (entrada/saída) e contagem de solicitações e respostas e taxa de acerto de cache por cada zona de servidor
  • Tráfego total (Entrada/Saída) e contagem de solicitações e respostas (o nome da zona é *) e taxa de acerto
  • filterZones
  • Tráfego (entrada/saída) e contagem de solicitações e respostas e taxa de acerto de cache por cada zona de servidor filtrada através da diretiva vhost_traffic_status_filter_by_set_key
  • Tráfego total (Entrada/Saída) e contagem de solicitações e respostas (o nome da zona é *) e taxa de acerto filtrada através da diretiva vhost_traffic_status_filter_by_set_key
  • upstreamZones
  • Tráfego (entrada/saída) e contagem de solicitações e respostas por servidor em cada grupo upstream
  • Configurações atuais (peso, maxfails, failtimeout...) no nginx.conf
  • cacheZones
  • Tráfego (entrada/saída) e tamanho (capacidade/usado) e taxa de acerto por cada zona de cache ao usar a diretiva proxy_cache.

Os objetos overCounts no documento JSON são principalmente para sistemas de 32 bits e serão incrementados em 1 se seu valor transbordar. A diretiva vhost_traffic_status_display_format define o formato de saída padrão que é um dos json, jsonp, html, prometheus. (Padrão: json)

O cálculo de tráfego é o seguinte:

  • ServerZones
  • in += requested_bytes
  • out += sent_bytes
  • FilterZones
  • in += requested_bytes via o filtro
  • out += sent_bytes via o filtro
  • UpstreamZones
  • in += requested_bytes via as ServerZones
  • out += sent_bytes via as ServerZones
  • cacheZones
  • in += requested_bytes via as ServerZones
  • out += sent_bytes via as ServerZones

Todos os cálculos funcionam na fase de processamento de logs do NGINX. Redirecionamentos internos (X-Accel-Redirect ou error_page) não são calculados nas UpstreamZones.

Caveats: este módulo depende do sistema de logging do NGINX (NGX_HTTP_LOG_PHASE: última fase do http do NGINX), portanto, o tráfego pode ser em certas circunstâncias diferente do tráfego de largura de banda real. Websocket, downloads cancelados podem ser a causa de imprecisões. O funcionamento do módulo não depende se a diretiva access_log está "on" ou "off". Novamente, este módulo funciona bem com "access_log off". Ao usar vários domínios, ele é definido para o primeiro domínio (à esquerda) da diretiva server_name. Se você não quiser isso, veja a diretiva vhost_traffic_status_filter_by_host, vhost_traffic_status_filter_by_set_key.

Veja os seguintes módulos para as estatísticas de tráfego stream: * nginx-module-sts * nginx-module-stream-sts

Cálculos e Intervalos

Médias

Todas as médias são atualmente calculadas como AMM (Média Aritmética) sobre os últimos 64 valores.

Controle

É possível redefinir ou excluir zonas de tráfego através de uma string de consulta. A solicitação responde com um documento JSON.

  • Sintaxe 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;
        }
    }
}

Se configurado como acima, então a URI de controle é como example.org/status/control.

Os argumentos de solicitação disponíveis são os seguintes: * cmd=\<status|reset|delete> * status * Retorna o status das zonas de tráfego para o formato json como status/format/json. * reset * Redefine as zonas de tráfego sem excluir nós na memória compartilhada. (= inicializa para 0) * delete * Exclui as zonas de tráfego na memória compartilhada. Ao re-solicitar, elas são recriadas. * 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 obter o status das zonas de tráfego em tempo real

Isso é semelhante ao status/format/json, exceto que pode obter cada zona.

Para obter zonas completas

  • É exatamente o mesmo que status/format/json.
  • /status/control?cmd=status&group=*

Para obter 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=*

Os valores mainZones são valores de status padrão, incluindo hostName, moduleVersion, nginxVersion, loadMsec, nowMsec, connections.

Para obter cada zona

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

Para redefinir zonas de tráfego em tempo real

Redefine os valores das zonas especificadas para 0.

Para redefinir zonas completas

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

Para redefinir 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 redefinir cada zona

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

Para excluir zonas de tráfego em tempo real

Exclui as zonas especificadas na memória compartilhada.

Para excluir zonas completas

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

Para excluir 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 excluir cada zona

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

Definir

É possível obter os valores de status na configuração do NGINX separadamente usando a diretiva vhost_traffic_status_set_by_filter. Ela pode adquirir quase todos os valores de status e o valor obtido é armazenado em uma variável definida pelo usuário, que é o primeiro argumento.

  • Sintaxe da Diretiva
  • 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;
        }
    }
}

As configurações acima são as seguintes:

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

Consulte a diretiva vhost_traffic_status_set_by_filter para uso detalhado.

JSON

As seguintes informações de status são fornecidas no formato JSON:

Json usado pelo status

/{status_uri}/format/json

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

  • hostName
  • Nome do host.
  • moduleVersion
  • Versão do módulo no formato {version}(|.dev.{commit}).
  • nginxVersion
  • Versão do NGINX fornecido.
  • loadMsec
  • Tempo de carregamento do processo em milissegundos.
  • nowMsec
  • Tempo atual em milissegundos
  • connections
  • active
    • O número atual de conexões ativas de clientes.
  • reading
    • O número total de conexões de clientes em leitura.
  • writing
    • O número total de conexões de clientes em escrita.
  • waiting
    • O número total de conexões de clientes em espera.
  • accepted
    • O número total de conexões de clientes aceitas.
  • handled
    • O número total de conexões de clientes tratadas.
  • requests
    • O número total de solicitações de clientes.
  • sharedZones
  • name
    • O nome da memória compartilhada especificada na configuração. (padrão: vhost_traffic_status)
  • maxSize
    • O limite no tamanho máximo da memória compartilhada especificada na configuração.
  • usedSize
    • O tamanho atual da memória compartilhada.
  • usedNode
    • O número atual de nós usando a memória compartilhada. É possível obter um tamanho aproximado para um nó com a seguinte fórmula: (usedSize / usedNode)
  • serverZones
  • requestCounter
    • O número total de solicitações de clientes recebidas.
  • inBytes
    • O número total de bytes recebidos de clientes.
  • outBytes
    • O número total de bytes enviados para clientes.
  • responses
    • 1xx, 2xx, 3xx, 4xx, 5xx
    • O número de respostas com códigos de status 1xx, 2xx, 3xx, 4xx e 5xx.
    • miss
    • O número de falhas de cache.
    • bypass
    • O número de bypass de cache.
    • expired
    • O número de expirações de cache.
    • stale
    • O número de caches obsoletos.
    • updating
    • O número de atualizações de cache.
    • revalidated
    • O número de revalidações de cache.
    • hit
    • O número de acertos de cache.
    • scarce
    • O número de escassez de cache.
  • requestMsecCounter
    • O número de tempo acumulado de processamento de solicitações em milissegundos.
  • requestMsec
    • A média dos tempos de processamento de solicitações em milissegundos.
  • requestMsecs
    • times
    • Os tempos em milissegundos durante os tempos de processamento de solicitações.
    • msecs
    • Os tempos de processamento de solicitações em milissegundos.
  • requestBuckets
    • msecs
    • Os valores do bucket do histograma definidos pela diretiva vhost_traffic_status_histogram_buckets.
    • counters
    • Os valores acumulados para o motivo de que cada valor de bucket é maior ou igual ao tempo de processamento da solicitação.
  • filterZones
  • Fornece os mesmos campos que serverZones, exceto que inclui nomes de grupos.
  • upstreamZones
  • server
    • Um endereço do servidor.
  • requestCounter
    • O número total de conexões de clientes encaminhadas para este servidor.
  • inBytes
    • O número total de bytes recebidos deste servidor.
  • outBytes
    • O número total de bytes enviados para este servidor.
  • responses
    • 1xx, 2xx, 3xx, 4xx, 5xx
    • O número de respostas com códigos de status 1xx, 2xx, 3xx, 4xx e 5xx.
  • requestMsecCounter
    • O número de tempo acumulado de processamento de solicitações incluindo upstream em milissegundos.
  • requestMsec
    • A média dos tempos de processamento de solicitações incluindo upstream em milissegundos.
  • requestMsecs
    • times
    • Os tempos em milissegundos durante os tempos de processamento de solicitações.
    • msecs
    • Os tempos de processamento de solicitações incluindo upstream em milissegundos.
  • requestBuckets
    • msecs
    • Os valores do bucket do histograma definidos pela diretiva vhost_traffic_status_histogram_buckets.
    • counters
    • Os valores acumulados para o motivo de que cada valor de bucket é maior ou igual ao tempo de processamento da solicitação incluindo upstream.
  • responseMsecCounter
    • O número de tempo acumulado apenas do processamento de respostas upstream em milissegundos.
  • responseMsec
    • A média dos tempos de processamento de respostas apenas upstream em milissegundos.
  • responseMsecs
    • times
    • Os tempos em milissegundos durante os tempos de processamento de respostas.
    • msecs
    • Os tempos de processamento de respostas apenas upstream em milissegundos.
  • responseBuckets
    • msecs
    • Os valores do bucket do histograma definidos pela diretiva vhost_traffic_status_histogram_buckets.
    • counters
    • Os valores acumulados para o motivo de que cada valor de bucket é maior ou igual ao tempo de processamento de resposta apenas upstream.
  • weight
    • Configuração atual de weight do servidor.
  • maxFails
    • Configuração atual de max_fails do servidor.
  • failTimeout
    • Configuração atual de fail_timeout do servidor.
  • backup
    • Configuração atual de backup do servidor.
  • down
    • Configuração atual de down do servidor. Basicamente, isso é apenas uma marca do estado de servidor down do ngx_http_upstream_module (por exemplo, server backend3.example.com down), não o estado real do servidor upstream. Ele mudará para o estado real se você habilitar a diretiva de zona upstream.
  • cacheZones
  • maxSize
    • O limite no tamanho máximo do cache especificado na configuração. Se max_size na diretiva proxy_cache_path não for especificado, o valor dependente do sistema NGX_MAX_OFF_T_VALUE é atribuído por padrão. Em outras palavras, esse valor é do NGINX, não do que eu especifiquei.
  • usedSize
    • O tamanho atual do cache. Esse valor é retirado do NGINX como o valor acima maxSize.
  • inBytes
    • O número total de bytes recebidos do cache.
  • outBytes
    • O número total de bytes enviados do cache.
  • responses
    • miss
    • O número de falhas de cache.
    • bypass
    • O número de bypass de cache.
    • expired
    • O número de expirações de cache.
    • stale
    • O número de caches obsoletos.
    • updating
    • O número de atualizações de cache.
    • revalidated
    • O número de revalidações de cache.
    • hit
    • O número de acertos de cache.
    • scarce
    • O número de escassez de cache.

Json usado pelo controle

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

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

  • processingReturn
  • O resultado de verdadeiro ou falso.
  • processingCommandString
  • A string de comando solicitada.
  • processingGroupString
  • A string de grupo solicitada.
  • processingZoneString
  • A string de zona solicitada.
  • processingCounts
  • O número de processamento real.

Variáveis

As seguintes variáveis embutidas são fornecidas:

  • $vts_request_counter
  • O número total de solicitações de clientes recebidas.
  • $vts_in_bytes
  • O número total de bytes recebidos de clientes.
  • $vts_out_bytes
  • O número total de bytes enviados para clientes.
  • $vts_1xx_counter
  • O número de respostas com códigos de status 1xx.
  • $vts_2xx_counter
  • O número de respostas com códigos de status 2xx.
  • $vts_3xx_counter
  • O número de respostas com códigos de status 3xx.
  • $vts_4xx_counter
  • O número de respostas com códigos de status 4xx.
  • $vts_5xx_counter
  • O número de respostas com códigos de status 5xx.
  • $vts_cache_miss_counter
  • O número de falhas de cache.
  • $vts_cache_bypass_counter
  • O número de bypass de cache.
  • $vts_cache_expired_counter
  • O número de expirações de cache.
  • $vts_cache_stale_counter
  • O número de caches obsoletos.
  • $vts_cache_updating_counter
  • O número de atualizações de cache.
  • $vts_cache_revalidated_counter
  • O número de revalidações de cache.
  • $vts_cache_hit_counter
  • O número de acertos de cache.
  • $vts_cache_scarce_counter
  • O número de escassez de cache.
  • $vts_request_time_counter
  • O número de tempo acumulado de processamento de solicitações.
  • $vts_request_time
  • A média dos tempos de processamento de solicitações.

Limite

É possível limitar o tráfego total por cada host usando a diretiva vhost_traffic_status_limit_traffic. Também é possível limitar todo o tráfego usando a diretiva vhost_traffic_status_limit_traffic_by_set_key. Quando o limite é excedido, o servidor retornará o erro 503 (Serviço Temporariamente Indisponível) em resposta a uma solicitação. O código de retorno pode ser alterável.

Para limitar o tráfego para o 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 o tráfego total de entrada/saída no *.example.org para 64G e 1024G, respectivamente. Funciona individualmente por cada domínio se a diretiva vhost_traffic_status_filter_by_host estiver habilitada.

Para limitar o tráfego para 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 o tráfego total de entrada para os EUA e CN em example.org para 1024G e 2048G, respectivamente.

Para limitar o tráfego 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 o tráfego total de entrada para o backend upstream em example.org para 512G e 1024G por cada par.

Caveats: O tráfego é a transferência cumulativa ou contador, não uma largura de banda.

Casos de uso

É possível calcular as estatísticas individuais definidas pelo usuário usando a diretiva vhost_traffic_status_filter_by_set_key.

Para calcular o tráfego para um país individual usando 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 o tráfego para um país individual de todos os grupos de servidores.
  • Calcular o tráfego para um país individual de cada grupo de servidores.

Basicamente, a imagem da bandeira do país é embutida no HTML. A imagem da bandeira do país é habilitada se a string country estiver incluída no nome do grupo, que é o segundo argumento da diretiva vhost_traffic_status_filter_by_set_key.

Para calcular o tráfego para um volume de armazenamento 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 o tráfego para um volume de armazenamento individual correspondido pela expressão regular da diretiva location.

Para calcular o tráfego para um agente de usuário 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 o tráfego para um http_user_agent individual.

Para calcular o tráfego para códigos de status http detalhados

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 o tráfego para códigos de status http detalhados.

Caveats: A variável $status está disponível no NGINX-(1.3.2, 1.2.2).

Para calcular o tráfego para dns dinâmico

Se o domínio tiver vários registros DNS A, você pode calcular o tráfego para IPs individuais do domínio usando o recurso de filtro ou uma variável em 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 o tráfego para IPs individuais do domínio elb.example.org. Se elb.example.org tiver vários registros DNS A, serão exibidos todos os IPs em filterZones. Nas configurações acima, quando o NGINX inicia ou recarrega sua configuração, ele consulta um servidor DNS para resolver o domínio e os registros DNS A são armazenados em cache na memória. Portanto, os registros DNS A não são alterados na memória mesmo que os registros DNS A sejam alterados pelo administrador DNS, a menos que o NGINX seja reiniciado ou recarregado.
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 o tráfego para IPs individuais do domínio elb.example.org. Se o registro DNS A de elb.example.org for alterado, serão exibidos tanto o IP antigo quanto o novo em ::nogroups. Ao contrário da primeira configuração do grupo upstream, a segunda configuração funciona bem mesmo que os registros DNS A sejam alterados pelo administrador DNS.

Caveats: Para mais detalhes sobre o DNS do NGINX, consulte o dns-service-discovery-nginx-plus.

Para calcular o tráfego, exceto pela página de status

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 manter os dados estatísticos permanentemente

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

    ...

    server {

        ...

    }
}
  • A diretiva vhost_traffic_status_dump mantém os dados estatísticos permanentemente, mesmo que o sistema tenha sido reiniciado ou o NGINX tenha sido reiniciado. Consulte a diretiva vhost_traffic_status_dump para uso detalhado.

Personalizando

Para personalizar após a instalação do módulo

  1. Você precisa alterar a string {{uri}} para sua URI de status em status.template.html da seguinte forma:

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

  2. E então, personalizando e copiando status.template.html para o diretório raiz do servidor da seguinte forma:

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

  3. Configure nginx.conf

       server {
           server_name example.org;
           root /usr/share/nginx/html;
    
           # Redireciona solicitações de / para /status.html
           location = / {
               return 301 /status.html;
           }
    
           location = /status.html {}
    
           # Tudo que começa com /status (exceto /status.html) é
           # processado pelo manipulador de status
           location /status {
               vhost_traffic_status_display;
               vhost_traffic_status_display_format json;
           }
       }
    

  4. Acesse seu html.

    http://example.org/status.html
    

Para personalizar antes da instalação do módulo

  1. Modifique share/status.template.html (não altere a string {{uri}})

  2. Recrie o ngx_http_vhost_traffic_status_module_html.h da seguinte forma:

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

  3. Adicione o módulo à configuração de construção adicionando --add-module=/path/to/nginx-module-vts

  4. Compile o binário do NGINX.

  5. Instale o binário do NGINX.

Diretivas

draw_io_vts_diagram

vhost_traffic_status

- -
Sintaxe vhost_traffic_status \<on|off>
Padrão off
Contexto http, server, location

Descrição: Habilita ou desabilita o funcionamento do módulo. Se você definir a diretiva vhost_traffic_status_zone, ela é habilitada automaticamente.

vhost_traffic_status_zone

- -
Sintaxe vhost_traffic_status_zone [shared:name:size]
Padrão shared:vhost_traffic_status:1m
Contexto http

Descrição: Define parâmetros para uma zona de memória compartilhada que manterá estados para várias chaves. O cache é compartilhado entre todos os processos de trabalho. Na maioria dos casos, o tamanho da memória compartilhada usada pelo nginx-module-vts não aumenta muito. O tamanho da memória compartilhada aumenta bastante ao usar a diretiva vhost_traffic_status_filter_by_set_key, mas se as chaves do filtro forem fixas (por exemplo, o número total de códigos de país é cerca de 240), não aumenta continuamente.

Se você usar a diretiva vhost_traffic_status_filter_by_set_key, configure-a da seguinte forma:

  • Defina um tamanho de memória compartilhada superior a 32M por padrão. (vhost_traffic_status_zone shared:vhost_traffic_status:32m)
  • Se a mensagem ("ngx_slab_alloc() failed: no memory in vhost_traffic_status_zone") for impressa no error_log, aumente para mais do que (usedSize * 2).

vhost_traffic_status_dump

- -
Sintaxe vhost_traffic_status_dump path [period]
Padrão -
Contexto http

Descrição: Habilita o despejo e a restauração de dados estatísticos. O path é um local para despejar os dados estatísticos. (por exemplo, /var/log/nginx/vts.db) O period é um tempo de ciclo de backup. (Padrão: 60s) É feito um backup imediatamente, independentemente do ciclo de backup, se o NGINX sair por sinal (SIGKILL).

vhost_traffic_status_display

- -
Sintaxe vhost_traffic_status_display
Padrão -
Contexto http, server, location

Descrição: Habilita ou desabilita o manipulador de exibição do módulo.

vhost_traffic_status_display_format

- -
Sintaxe vhost_traffic_status_display_format \<json|html|jsonp|prometheus>
Padrão json
Contexto http, server, location

Descrição: Define o formato de saída do manipulador de exibição. Se você definir json, responderá com um documento JSON. Se você definir html, responderá com o painel ao vivo embutido em HTML. Se você definir jsonp, responderá com uma função de callback JSONP (padrão: ngx_http_vhost_traffic_status_jsonp_callback). Se você definir prometheus, responderá com um documento prometheus.

vhost_traffic_status_display_jsonp

- -
Sintaxe vhost_traffic_status_display_jsonp callback
Padrão ngx_http_vhost_traffic_status_jsonp_callback
Contexto http, server, location

Descrição: Define o nome de callback para o JSONP.

vhost_traffic_status_display_sum_key

- -
Sintaxe vhost_traffic_status_display_sum_key name
Padrão *
Contexto http, server, location

Descrição: Define a string da chave de soma no campo serverZones do JSON. A string padrão da chave de soma é o "*".

vhost_traffic_status_filter

- -
Sintaxe vhost_traffic_status_filter \<on|off>
Padrão on
Contexto http, server, location

Descrição: Habilita ou desabilita os recursos de filtro.

vhost_traffic_status_filter_by_host

- -
Sintaxe vhost_traffic_status_filter_by_host \<on|off>
Padrão off
Contexto http, server, location

Descrição: Habilita ou desabilita as chaves pelo campo de cabeçalho Host. Se você definir on e a diretiva server_name do NGINX definir vários nomes ou um nome curinga começando com um asterisco, por exemplo, “.example.org” e solicitar ao servidor com um nome de host como (a|b|c).example.org ou .example.org, então o json serverZones é impresso da seguinte forma:

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

  ...

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

Fornece a mesma função que definir vhost_traffic_status_filter_by_set_key $host.

vhost_traffic_status_filter_by_set_key

- -
Sintaxe vhost_traffic_status_filter_by_set_key key [name]
Padrão -
Contexto http, server, location

Descrição: Habilita as chaves pela variável definida pelo usuário. A key é uma string de chave para calcular o tráfego. O name é uma string de grupo para calcular o tráfego. A key e o name podem conter variáveis como $host, $server_name. O grupo do name pertence a filterZones se especificado. O grupo da key pertence a serverZones se não for especificado o segundo argumento name. O exemplo com o módulo geoip é o seguinte:

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

- -
Sintaxe vhost_traffic_status_filter_check_duplicate \<on|off>
Padrão on
Contexto http, server, location

Descrição: Habilita ou desabilita a deduplicação de vhost_traffic_status_filter_by_set_key. É processado apenas um dos valores duplicados (key + name) em cada diretiva (http, server, location) se esta opção estiver habilitada.

vhost_traffic_status_filter_max_node

- -
Sintaxe vhost_traffic_status_filter_max_node number [string ...]
Padrão 0
Contexto http

Descrição: Habilita o limite do tamanho do filtro usando os valores especificados de number e string. Se o number for excedido, os nós existentes são excluídos pelo algoritmo LRU. O argumento number é o tamanho do nó que será limitado. O valor padrão 0 não limita filtros. Um nó é um objeto em filterZones no documento JSON. Os argumentos string são os valores de string correspondentes para o valor de string do grupo definido pela diretiva vhost_traffic_status_filter_by_set_key. Mesmo que apenas a primeira parte corresponda, a correspondência é bem-sucedida como a expressão regular /^string.*/. Por padrão, se você não definir argumentos string, eles se aplicarão a todos os filtros.

Por exemplo:

$ vi nginx.conf

http {

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

    vhost_traffic_status_zone;

    # Todos os filtros são limitados a um total de 16 nós.
    # vhost_traffic_status_filter_max_node 16

    # Os padrões de string de grupo `/^uris.*/` e `/^client::ports.*/` são limitados a um total de 64 nós.
    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

No exemplo acima, os padrões de string de grupo /^uris.*/ e /^client::ports.*/ são limitados a um total de 16 nós. Os outros filtros, como country::.*, não são limitados.

vhost_traffic_status_limit

- -
Sintaxe vhost_traffic_status_limit \<on|off>
Padrão on
Contexto http, server, location

Descrição: Habilita ou desabilita os recursos de limite.

vhost_traffic_status_limit_traffic

- -
Sintaxe vhost_traffic_status_limit_traffic member:size [code]
Padrão -
Contexto http, server, location

Descrição: Habilita o limite de tráfego para o member especificado. O member é uma string de membro para limitar o tráfego. O size é um tamanho (k/m/g) para limitar o tráfego. O code é um código a ser retornado em resposta a solicitações rejeitadas. (Padrão: 503)

As strings member disponíveis são as seguintes: * request * O número total de solicitações de clientes recebidas. * in * O número total de bytes recebidos de clientes. * out * O número total de bytes enviados para clientes. * 1xx * O número de respostas com códigos de status 1xx. * 2xx * O número de respostas com códigos de status 2xx. * 3xx * O número de respostas com códigos de status 3xx. * 4xx * O número de respostas com códigos de status 4xx. * 5xx * O número de respostas com códigos de status 5xx. * cache_miss * O número de falhas de cache. * cache_bypass * O número de bypass de cache. * cache_expired * O número de expirações de cache. * cache_stale * O número de caches obsoletos. * cache_updating * O número de atualizações de cache. * cache_revalidated * O número de revalidações de cache. * cache_hit * O número de acertos de cache. * cache_scarce * O número de escassez de cache.

vhost_traffic_status_limit_traffic_by_set_key

- -
Sintaxe vhost_traffic_status_limit_traffic_by_set_key key member:size [code]
Padrão -
Contexto http, server, location

Descrição: Habilita o limite de tráfego para o key e member especificados. A key é uma string de chave para limitar o tráfego. O member é uma string de membro para limitar o tráfego. O size é um tamanho (k/m/g) para limitar o tráfego. O code é um código a ser retornado em resposta a solicitações rejeitadas. (Padrão: 503)

A sintaxe de key é a seguinte: * group@[subgroup@]name

As strings de group disponíveis são as seguintes: * NO * O grupo de servidor. * UA * O grupo de upstream sozinho. * UG * O grupo de upstream em grupo. (use subgroup) * CC * O grupo de cache. * FG * O grupo de filtro. (use subgroup)

As strings de member disponíveis são as seguintes: * request * O número total de solicitações de clientes recebidas. * in * O número total de bytes recebidos de clientes. * out * O número total de bytes enviados para clientes. * 1xx * O número de respostas com códigos de status 1xx. * 2xx * O número de respostas com códigos de status 2xx. * 3xx * O número de respostas com códigos de status 3xx. * 4xx * O número de respostas com códigos de status 4xx. * 5xx * O número de respostas com códigos de status 5xx. * cache_miss * O número de falhas de cache. * cache_bypass * O número de bypass de cache. * cache_expired * O número de expirações de cache. * cache_stale * O número de caches obsoletos. * cache_updating * O número de atualizações de cache. * cache_revalidated * O número de revalidações de cache. * cache_hit * O número de acertos de cache. * cache_scarce * O número de escassez de cache.

O member é o mesmo que a diretiva vhost_traffic_status_limit_traffic.

vhost_traffic_status_limit_check_duplicate

- -
Sintaxe vhost_traffic_status_limit_check_duplicate \<on|off>
Padrão on
Contexto http, server, location

Descrição: Habilita ou desabilita a deduplicação de vhost_traffic_status_limit_by_set_key. É processado apenas um dos valores duplicados (member | key + member) em cada diretiva (http, server, location) se esta opção estiver habilitada.

vhost_traffic_status_set_by_filter

- -
Sintaxe vhost_traffic_status_set_by_filter $variable group/zone/name
Padrão -
Contexto http, server, location, if

Descrição: Obtém o valor de status especificado armazenado na memória compartilhada. Pode adquirir quase todos os valores de status e o valor obtido é armazenado em $variable, que é o primeiro 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
    • O número total de solicitações de clientes recebidas.
  • requestMsecCounter
    • O número de tempo acumulado de processamento de solicitações em milissegundos.
  • requestMsec
    • A média dos tempos de processamento de solicitações em milissegundos.
  • responseMsecCounter
    • O número de tempo acumulado apenas do processamento de respostas upstream em milissegundos.
  • responseMsec
    • A média dos tempos de processamento de respostas apenas upstream em milissegundos.
  • inBytes
    • O número total de bytes recebidos de clientes.
  • outBytes
    • O número total de bytes enviados para clientes.
  • 1xx, 2xx, 3xx, 4xx, 5xx
    • O número de respostas com códigos de status 1xx, 2xx, 3xx, 4xx e 5xx.
  • cacheMaxSize
    • O limite no tamanho máximo do cache especificado na configuração.
  • cacheUsedSize
    • O tamanho atual do cache.
  • cacheMiss
    • O número de falhas de cache.
  • cacheBypass
    • O número de bypass de cache.
  • cacheExpired
    • O número de expirações de cache.
  • cacheStale
    • O número de caches obsoletos.
  • cacheUpdating
    • O número de atualizações de cache.
  • cacheRevalidated
    • O número de revalidações de cache.
  • cacheHit
    • O número de acertos de cache.
  • cacheScarce
    • O número de escassez de cache.
  • weight
    • Configuração atual de peso do servidor.
  • maxFails
    • Configuração atual de max_fails do servidor.
  • failTimeout
    • Configuração atual de fail_timeout do servidor.
  • backup
    • Configuração atual de backup do servidor. (0|1)
  • down
    • Configuração atual de down do servidor. (0|1)

Caveats: O name é sensível a maiúsculas e minúsculas. Todos os valores retornados são do tipo inteiro.

Por exemplo: * requestCounter em serverZones * vhost_traffic_status_set_by_filter $requestCounter server/example.org/requestCounter * requestCounter em filterZones * vhost_traffic_status_set_by_filter $requestCounter filter/country::example.org@KR/requestCounter * requestCounter em upstreamZones * vhost_traffic_status_set_by_filter $requestCounter upstream@group/[email protected]:80/requestCounter * requestCounter em upstreamZones::nogroups * vhost_traffic_status_set_by_filter $requestCounter upstream@alone/10.10.10.11:80/requestCounter * cacheHit em cacheZones * vhost_traffic_status_set_by_filter $cacheHit cache/my_cache_name/cacheHit

vhost_traffic_status_average_method

- -
Sintaxe vhost_traffic_status_average_method \<AMM|WMA> [period]
Padrão AMM 60s
Contexto http, server, location

Descrição: Define o método que é uma fórmula que calcula a média dos tempos de processamento de respostas. O period é um tempo efetivo dos valores usados para o cálculo da média. (Padrão: 60s) Se period for definido como 0, o tempo efetivo é ignorado. Nesse caso, o último valor médio é exibido mesmo que não haja solicitações e após a passagem do tempo. Os valores correspondentes são requestMsec e responseMsec no JSON.

vhost_traffic_status_histogram_buckets

- -
Sintaxe vhost_traffic_status_histogram_buckets second ...
Padrão -
Contexto http, server, location

Descrição: Define os buckets de observação a serem usados nos histogramas. Por padrão, se você não definir esta diretiva, ela não funcionará. O second pode ser expresso em casas decimais com um valor mínimo de 0.001 (1ms). O tamanho máximo dos buckets é 32. Se esse valor for insuficiente para você, altere o NGX_HTTP_VHOST_TRAFFIC_STATUS_DEFAULT_BUCKET_LEN em src/ngx_http_vhost_traffic_status_node.h.

Por exemplo: * vhost_traffic_status_histogram_buckets 0.005 0.01 0.05 0.1 0.5 1 5 10 * Os buckets de observação são [5ms 10ms 50ms 100ms 500ms 1s 5s 10s]. * vhost_traffic_status_histogram_buckets 0.005 0.01 0.05 0.1 * Os buckets de observação são [5ms 10ms 50ms 100ms].

Caveats: Por padrão, se você não definir esta diretiva, as estatísticas do histograma não funcionarão. Os histogramas restaurados pela diretiva vhost_traffic_status_dump não são afetados por alterações nos buckets pela diretiva vhost_traffic_status_histogram_buckets. Portanto, você deve primeiro excluir a zona ou o arquivo de despejo antes de alterar os buckets pela diretiva vhost_traffic_status_histogram_buckets. Similar ao acima, exclua o arquivo de despejo ao usar o histograma pela primeira vez.

vhost_traffic_status_bypass_limit

- -
Sintaxe vhost_traffic_status_bypass_limit \<on|off>
Padrão off
Contexto http, server, location

Descrição: Habilita ou desabilita o bypass das diretivas vhost_traffic_status_limit. Os recursos de limite são ignorados se esta opção estiver habilitada. Isso é útil se você quiser conectar a página da web de status como /status, independentemente das diretivas vhost_traffic_status_limit, conforme segue:

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

- -
Sintaxe vhost_traffic_status_bypass_stats \<on|off>
Padrão off
Contexto http, server, location

Descrição: Habilita ou desabilita o bypass do vhost_traffic_status. Os recursos de estatísticas de tráfego são ignorados se esta opção estiver habilitada. Em outras palavras, é excluído das estatísticas de tráfego. Isso é útil se você quiser ignorar sua solicitação na página de status como /status, conforme segue:

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

- -
Sintaxe vhost_traffic_status_stats_by_upstream \<on|off>
Padrão on
Contexto http

Descrição: Habilita ou desabilita as estatísticas de upstreamZone. A upstreamZone nas estatísticas de tráfego é ignorada se esta opção estiver desabilitada. Em outras palavras, é excluída das estatísticas de tráfego. Isso é útil se você quiser desabilitar a coleta de estatísticas para servidores upstream para reduzir a carga da 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 status HTTP específicos ou todos os códigos de status no módulo de Status de Tráfego Vhost.

- -
Sintaxe vhost_traffic_status_measure_status_codes [all] [status_code1] [status_code2] ...
Padrão off
Contexto http

Parâmetros

  • status_code1, status_code2, ...: Códigos de status HTTP específicos a serem rastreados (100-599)
  • all: Rastrear todos os códigos de status HTTP

Exemplos

Rastrear códigos de status específicos:

vhost_traffic_status_measure_status_codes 200 404 500;

Rastrear todos os códigos de status:

vhost_traffic_status_measure_status_codes all;

Descrição

  • Por padrão, nenhum rastreamento de código de status específico está habilitado
  • Os códigos de status devem estar em ordem crescente
  • Apenas códigos de status HTTP válidos entre 100 e 599 são aceitos
  • Ao usar all, todos os códigos de status serão rastreados

Lançamentos

Para criar um lançamento, crie uma entrada de changelog PR com 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-

Após o PR ser mesclado, crie a nova tag e o lançamento no GitHub Releases.

Veja Também

GitHub

Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório GitHub do nginx-module-vts.