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.
Módulo de status de tráfego do servidor de stream Nginx
Capturas de tela

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 diretivaserver_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)
- O nome da memória compartilhada especificada na configuração. (padrão:
- 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
weightdo servidor.
- Configuração atual de
- maxFails
- Configuração atual de
max_failsdo servidor.
- Configuração atual de
- failTimeout
- Configuração atual de
fail_timeoutdo servidor.
- Configuração atual de
- backup
- Configuração atual de
backupdo servidor.
- Configuração atual de
- down
- Configuração atual de
downdo servidor.
- Configuração atual de
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/tcppara 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.orgpara 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/tcppara 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
-
Você precisa alterar a string
{{uri}}para sua URI de status em status.template.html da seguinte forma:shell> vi share/status.template.htmlvar vtsStatusURI = "yourStatusUri/format/json", vtsUpdateInterval = 1000; -
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 -
Configure
nginx.confserver { 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; } } -
Acesse seu HTML.
http://example.org/status.html
Para personalizar antes da instalação do módulo
-
Modifique
share/status.template.html(Não altere a string{{uri}}) -
Recrie o
ngx_http_stream_server_traffic_status_module_html.hda seguinte forma:shell> cd util shell> ./tplToDefine.sh ../share/status.template.html > ../src/ngx_http_stream_server_traffic_status_module_html.h -
Adicione o módulo à configuração de build adicionando
--add-module=/path/to/nginx-module-sts --add-module=/path/to/nginx-module-stream-sts -
Compile o binário do nginx.
-
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.
- AMM
- O AMM é a média aritmética.
- WMA
- A WMA é a média móvel ponderada.
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.
- AMM
- O AMM é a média aritmética.
- WMA
- A WMA é a média móvel ponderada.
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.