Pular para conteúdo

sts: Módulo de status de tráfego do servidor de stream 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-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

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

load_module modules/ngx_http_stream_server_traffic_status_module.so;

Este documento descreve o nginx-module-sts v0.1.1 lançado em 04 de julho de 2018.


License

Módulo de status de tráfego do servidor de stream Nginx

Capturas de tela

nginx-module-sts screenshot

Sinopse

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 {
        ...
    }
}

Descrição

Este é um módulo Nginx que fornece acesso às informações de status de tráfego do servidor de stream. Esta é uma versão portável do nginx-module-vts para o subsistema "stream" do NGINX, de modo a suportar os mesmos recursos do nginx-module-vts. Ele contém o status atual, como servidores, upstreams e filtros definidos pelo usuário.

Primeiramente, é necessário tanto a diretiva server_traffic_status_zone no bloco stream quanto stream_server_traffic_status_zone no bloco http, e então, se a diretiva stream_server_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 dashboards ao vivo e ferramentas de monitoramento de terceiros.
  • /status/format/html
  • Se você solicitar /status/format/html, responderá com o dashboard ao vivo embutido em HTML que solicita internamente /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 dashboards 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": ...,
    "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
  • Versão básica, uptime((nowMsec - loadMsec)/1000)
  • nowMsec, loadMsec é em milissegundos.
  • connections
  • Total de conexões e requisições (igual ao stub_status_module no NGINX)
  • streamServerZones
  • Tráfego (entrada/saída) e contagens de requisições e respostas e status (1xx, 2xx...) taxa de acerto por cada zona de servidor
  • Tráfego total (Entrada/Saída) e contagens de requisições e respostas (o nome da zona é *) e taxa de acerto
  • streamFilterZones
  • Tráfego (entrada/saída) e contagens de requisições e respostas e status (1xx, 2xx...) taxa de acerto por cada zona de servidor filtrada através da diretiva server_traffic_status_filter_by_set_key
  • Tráfego total (Entrada/Saída) e contagens de requisições e respostas (o nome da zona é *) e taxa de acerto filtrada através da diretiva server_traffic_status_filter_by_set_key
  • streamUpstreamZones
  • Tráfego (entrada/saída) e contagens de requisições e respostas por servidor em cada grupo upstream
  • Configurações atuais (peso, maxfails, failtimeout...) em nginx.conf

A diretiva stream_server_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:

  • streamServerZones
  • in += requested_bytes
  • out += sent_bytes
  • streamFilterZones
  • in += requested_bytes via o filtro
  • out += sent_bytes via o filtro
  • streamUpstreamZones
  • 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.

Caveats: este módulo depende do sistema de logging do nginx (NGX_STREAM_LOG_PHASE: última fase do stream do nginx), então o tráfego pode ser em certas circunstâncias diferente do tráfego de largura de banda real. Websocket, downloads cancelados podem ser causa de imprecisões. O funcionamento do módulo não importa se a diretiva access_log está "on" ou "off". Novamente, este módulo funciona bem com "access_log off".

Controle

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

  • Sintaxe 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 {

        ...

    }

    ...

}

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

Os argumentos de requisição disponíveis são os seguintes: * cmd=\<status|reset|delete> * status * Retorna o status das zonas de tráfego em 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, recriadas. * 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 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 todas as zonas

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

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

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

Para redefinir zonas de tráfego em tempo real

Redefine os valores das zonas especificadas para 0.

Para redefinir todas as zonas

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

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

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

Para excluir zonas de tráfego em tempo real

Exclui as zonas especificadas na memória compartilhada.

Para excluir todas as zonas

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

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

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

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.
  • nginxVersion
  • Versão do fornecido.
  • loadMsec
  • Tempo de processo carregado em milissegundos.
  • nowMsec
  • Hora atual em milissegundos
  • connections
  • active
    • O número atual de conexões de cliente ativas.
  • reading
    • O número total de conexões de cliente em leitura.
  • writing
    • O número total de conexões de cliente em escrita.
  • waiting
    • O número total de conexões de cliente em espera.
  • accepted
    • O número total de conexões de cliente aceitas.
  • handled
    • O número total de conexões de cliente tratadas.
  • requests
    • O número total de conexões de cliente solicitadas.
  • sharedZones
  • name
    • O nome da memória compartilhada especificada na configuração. (padrão: stream_server_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. Pode-se obter um tamanho aproximado para um nó com a seguinte fórmula: (usedSize / usedNode)
  • streamServerZones
  • connectCounter
    • O número total de requisiçõ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.
  • sessionMsecCounter
    • O número de tempo acumulado de processamento de requisições em milissegundos.
  • sessionMsec
    • A média dos tempos de processamento de requisições em milissegundos.
  • sessionMsecs
    • times
    • Os tempos em milissegundos nos tempos de processamento de requisições.
    • msecs
    • Os tempos de processamento de requisições em milissegundos.
  • sessionBuckets
    • msecs
    • Os valores do bucket do histograma definidos pela diretiva server_traffic_status_histogram_buckets.
    • counters
    • Os valores acumulados para a razão de que cada valor de bucket é maior ou igual ao tempo de processamento da requisição.
  • streamFilterZones
  • Fornece os mesmos campos que streamServerZones, exceto que inclui nomes de grupos.
  • streamUpstreamZones
  • server
    • Um endereço do servidor.
  • connectCounter
    • O número total de conexões de cliente 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.
  • sessionMsecCounter
    • O número de tempos acumulados de processamento de requisições em milissegundos, incluindo upstream.
  • sessionMsec
    • A média dos tempos de processamento de requisições em milissegundos, incluindo upstream.
  • sessionMsecs
    • times
    • Os tempos em milissegundos nos tempos de processamento de requisições.
    • msecs
    • Os tempos de processamento de requisições em milissegundos, incluindo upstream.
  • sessionBuckets
    • msecs
    • Os valores do bucket do histograma definidos pela diretiva server_traffic_status_histogram_buckets.
    • counters
    • Os valores acumulados para a razão de que cada valor de bucket é maior ou igual ao tempo de processamento da requisição.
  • uSessionMsecCounter
    • O número de tempos acumulados em milissegundos para a duração da sessão no servidor upstream.
  • uSessionMsec
    • A média dos tempos de duração da sessão em milissegundos para o servidor upstream.
  • uSessionMsecs
    • times
    • Os tempos em milissegundos nos tempos de processamento de requisições.
    • msecs
    • Os tempos de duração da sessão em milissegundos para o servidor upstream.
  • uSessionBuckets
    • msecs
    • Os valores do bucket do histograma definidos pela diretiva server_traffic_status_histogram_buckets.
    • counters
    • Os valores acumulados para a razão de que cada valor de bucket é maior ou igual ao tempo de duração da sessão para o servidor upstream.
  • uConnectMsecCounter
    • O número de tempos acumulados em milissegundos para se conectar ao servidor upstream.
  • uConnectMsec
    • A média dos tempos em milissegundos para se conectar ao servidor upstream (1.11.4).
  • uConnectMsecs
    • times
    • Os tempos em milissegundos nos tempos de processamento de requisições.
    • msecs
    • Os tempos em milissegundos para se conectar ao servidor upstream.
  • uConnectBuckets
    • msecs
    • Os valores do bucket do histograma definidos pela diretiva server_traffic_status_histogram_buckets.
    • counters
    • Os valores acumulados para a razão de que cada valor de bucket é maior ou igual ao tempo para se conectar ao servidor upstream.
  • uFirstByteMsecCounter
    • O número de tempos acumulados em milissegundos para receber o primeiro byte de dados.
  • uFirstByteMsec
    • A média dos tempos em milissegundos para receber o primeiro byte de dados (1.11.4).
  • uFirstByteMsecs
    • times
    • Os tempos em milissegundos nos tempos de processamento de requisições.
    • msecs
    • Os tempos em milissegundos para receber o primeiro byte de dados (1.11.4).
  • uFirstByteBuckets
    • msecs
    • Os valores do bucket do histograma definidos pela diretiva server_traffic_status_histogram_buckets.
    • counters
    • Os valores acumulados para a razão de que cada valor de bucket é maior ou igual ao tempo para receber o primeiro byte de dados.
  • 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.

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 no bloco stream:

  • $sts_connect_counter
  • O número total de requisições de clientes recebidas.
  • $sts_in_bytes
  • O número total de bytes recebidos de clientes.
  • $sts_out_bytes
  • O número total de bytes enviados para clientes.
  • $sts_1xx_counter
  • O número de respostas com códigos de status 1xx.
  • $sts_2xx_counter
  • O número de respostas com códigos de status 2xx.
  • $sts_3xx_counter
  • O número de respostas com códigos de status 3xx.
  • $sts_4xx_counter
  • O número de respostas com códigos de status 4xx.
  • $sts_5xx_counter
  • O número de respostas com códigos de status 5xx.
  • $sts_session_time
  • A média dos tempos de processamento de requisições.

Limite

É possível limitar o tráfego total por cada servidor usando a diretiva server_traffic_status_limit_traffic. Também é possível limitar todo o tráfego usando a diretiva server_traffic_status_limit_traffic_by_set_key. Quando o limite é excedido, o servidor retornará o erro 503 (Service Temporarily Unavailable) em resposta a uma requisição. O código de retorno pode ser alterável.

Para limitar o tráfego para o servidor

stream {

    server_traffic_status_zone;

    ...

    server {

        listen 1981;

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

        ...
    }
}
  • Limitar o tráfego total de entrada/saída no 1981/tcp para 64G e 1024G, respectivamente.

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

Para limitar o tráfego 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 o tráfego total que vai para o backend upstream no 1981/tcp para 512G e 1024G por cada par.

Caveats: O tráfego é a transferência acumulada 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 server_traffic_status_filter_by_set_key.

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

Basicamente, a imagem da bandeira do país é embutida em 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 server_traffic_status_filter_by_set_key.

Personalização

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, personalizar e copiar 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 requisições para / 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 {
               stream_server_traffic_status_display;
               stream_server_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_stream_server_traffic_status_module_html.h da seguinte forma:

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

  3. Adicione o módulo à configuração de build adicionando

    --add-module=/path/to/nginx-module-sts
    --add-module=/path/to/nginx-module-stream-sts
    

  4. Compile o binário do nginx.

  5. Instale o binário do nginx.

Diretivas

stream_server_traffic_status

- -
Sintaxe stream_server_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 stream_server_traffic_status_zone, ela é habilitada automaticamente.

stream_server_traffic_status_zone

- -
Sintaxe stream_server_traffic_status_zone [shared:name]
Padrão shared:stream_server_traffic_status
Contexto http

Descrição: Define parâmetros para uma zona de memória compartilhada especificada pela diretiva server_traffic_status_zone no bloco stream. Caveats: O name deve ser o mesmo que o especificado por server_traffic_status_zone.

stream_server_traffic_status_display

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

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

stream_server_traffic_status_display_format

- -
Sintaxe stream_server_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 dashboard ao vivo embutido em HTML. Se você definir jsonp, responderá com uma função de callback JSONP (padrão: ngx_http_stream_server_traffic_status_jsonp_callback). Se você definir prometheus, responderá com um documento prometheus.

stream_server_traffic_status_display_jsonp

- -
Sintaxe stream_server_traffic_status_display_jsonp callback
Padrão ngx_http_stream_server_traffic_status_jsonp_callback
Contexto http, server, location

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

stream_server_traffic_status_average_method

- -
Sintaxe stream_server_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 resposta. 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 requisições e após o decurso do tempo. Os valores correspondentes são sessionMsec, uSessionMsec, uConnectMsec, uFirstByteMsec em JSON.

server_traffic_status

- -
Sintaxe server_traffic_status \<on|off>
Padrão off
Contexto stream, server

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

server_traffic_status_zone

- -
Sintaxe server_traffic_status_zone [shared:name:size]
Padrão shared:stream_server_traffic_status:1m
Contexto stream

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.

server_traffic_status_filter

- -
Sintaxe server_traffic_status_filter \<on|off>
Padrão on
Contexto stream, server

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

server_traffic_status_filter_by_set_key

- -
Sintaxe server_traffic_status_filter_by_set_key key [name]
Padrão -
Contexto stream, server

Descrição: Habilita as chaves por variável definida pelo usuário. A key é uma string 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_addr, $server_port. O grupo do name pertence a streamFilterZones se especificado. O grupo da key pertence a streamServerZones se o segundo argumento name não for especificado. O exemplo com o módulo geoip é o seguinte:

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

- -
Sintaxe server_traffic_status_filter_check_duplicate \<on|off>
Padrão on
Contexto stream, server

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

server_traffic_status_limit

- -
Sintaxe server_traffic_status_limit \<on|off>
Padrão on
Contexto stream, server

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

server_traffic_status_limit_traffic

- -
Sintaxe server_traffic_status_limit_traffic member:size [code]
Padrão -
Contexto stream, server

Descrição: Habilita o limite de tráfego para o member especificado. O member é uma string 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 requisições rejeitadas. (Padrão: 503)

As strings member disponíveis são as seguintes: * connect * O número total de conexões de cliente 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.

server_traffic_status_limit_traffic_by_set_key

- -
Sintaxe server_traffic_status_limit_traffic_by_set_key key member:size [code]
Padrão -
Contexto stream, server

Descrição: Habilita o limite de tráfego para o key e member especificados. A key é uma string chave para limitar o tráfego. O member é uma string 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 requisições rejeitadas. (Padrão: 503)

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

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

As strings member disponíveis são as seguintes: * connect * O número total de requisições de cliente 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.

O member é o mesmo que a diretiva server_traffic_status_limit_traffic.

server_traffic_status_limit_check_duplicate

- -
Sintaxe server_traffic_status_limit_check_duplicate \<on|off>
Padrão on
Contexto stream, server

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

server_traffic_status_average_method

- -
Sintaxe server_traffic_status_average_method \<AMM|WMA> [period]
Padrão AMM 60s
Contexto stream, server

Descrição: Define o método que é uma fórmula que calcula a média dos tempos de processamento de resposta. 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 requisições e após o decurso do tempo. O valor correspondente é apenas a variável $sts_session_time.

Caveats: A variável $sts_session_time é o valor calculado no momento da última requisição. Não é calculada ao usar variáveis.

server_traffic_status_histogram_buckets

- -
Sintaxe server_traffic_status_histogram_buckets second ...
Padrão -
Contexto stream

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_STREAM_SERVER_TRAFFIC_STATUS_DEFAULT_BUCKET_LEN em nginx-mdule-stream-sts/src/ngx_stream_server_traffic_status_node.h e o NGX_HTTP_STREAM_SERVER_TRAFFIC_STATUS_DEFAULT_BUCKET_LEN em nginx-module-sts/src/ngx_http_stream_server_traffic_status_node.h.

Por exemplo: * server_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 1s 5s 10s]. * server_traffic_status_histogram_buckets 0.005 0.01 0.05 0.1 * Os buckets de observação são [5ms 10ms 50ms 1s].

Caveats: Por padrão, se você não definir esta diretiva, as estatísticas do histograma não funcionarão.

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