traffic-accounting: Monitore as métricas de tráfego de entrada e saída em tempo real para 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-traffic-accounting
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-traffic-accounting
Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:
load_module modules/ngx_http_accounting_module.so;
Este documento descreve o nginx-module-traffic-accounting v2.0.4 lançado em 16 de maio de 2022.
Monitore as métricas de tráfego de entrada e saída em tempo real para NGINX.
Uma solução de monitoramento de tráfego e códigos de status em tempo real para NGINX, que requer menos memória e CPU do que outras soluções de análise de logs em tempo real. Útil para contabilidade de tráfego com base na lógica de configuração do NGINX (por localização / servidor / variáveis definidas pelo usuário).
Por quê?
Soluções de análise de logs em tempo real, que requerem várias máquinas para armazenamento e análise, são muito pesadas para monitoramento de aplicações.
Uma solução econômica é necessária para monitorar as métricas/status das requisições da aplicação. Essa solução deve ser precisa, sensível, robusta, leve o suficiente e não afetada por picos de tráfego.
Como funciona?
Este módulo mantém uma lista de métricas identificadas por accounting_id em seu contexto.
Quando uma nova requisição chega ao servidor, o módulo tentará encontrar seu accounting_id, calcular estatísticas e agregar essas informações nas métricas correspondentes por accounting_id.
Para cada período de tempo (definido por interval), um evento de temporizador é acionado, essas métricas são rotacionadas e exportadas para arquivos de log ou enviadas para servidores de log remotos.
Painel
Painel - Visualize com Grafana

Configuração
Edite seu nginx.conf.
Exemplo:
http {
# ativar a função de contabilidade
accounting on;
accounting_log logs/http-accounting.log;
...
server {
server_name example.com;
accounting_id $http_host; # defina a string accounting_id pela variável
location / {
accounting_id accounting_id_str; # defina a string accounting_id pela localização
...
}
location /api {
accounting_id API_PC; # para pc
if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') {
accounting_id API_MOBILE; # para mobile
}
...
}
}
}
Diretrizes
accounting
sintaxe: accounting on | off
padrão: accounting off
contexto: http
accounting_log
sintaxe: accounting_log \ [nível]
padrão: -
contexto: http
Configura o registro.
Suporta tanto caminho de arquivo local, quanto stderr, ou syslog:.
O segundo parâmetro é o nível de log.
Para mais detalhes sobre os parâmetros suportados, consulte esta página do nginx.org.
Se não especificado, o log de contabilidade será escrito em /dev/log.
accounting_id
sintaxe: accounting_id \
padrão: accounting_id default
contexto: http, server, location, if in location
Define a string accounting_id pela variável definida pelo usuário.
Essa string é usada para determinar a quais métricas uma requisição/sessão deve ser agregada.
accounting_interval
sintaxe: accounting_interval \
padrão: accounting_interval 60
contexto: http
Especifica o intervalo de relatório. O padrão é 60 segundos.
accounting_perturb
sintaxe: accounting_perturb on | off
padrão: accounting_perturb off
contexto: http
Desloca aleatoriamente o intervalo de relatório em 20% do tempo usual.
Uso
Este módulo pode ser configurado para gravar métricas em um arquivo local, servidor de log remoto ou dispositivo syslog local.
Software de agregação de logs de código aberto, como logstash, também suporta entrada syslog, o que ajudará você a estabelecer um servidor de log central. Veja samples/logstash/ para exemplos. [Recomendado]
Para coletar logs com syslog local, consulte Lax/ngx_http_accounting_module-utils para configuração / utilitários de exemplo.
docker / docker-compose
Para demonstrar com docker-compose, execute
docker-compose build
docker-compose up -d
Abra o Grafana (endereço: http://localhost:3000) em seu navegador.
Crie e configure a fonte de dados do elasticsearch com as opções:
Tipo: elasticsearch
URL: http://elasticsearch:9200
Versão: 5.6+
Intervalo mínimo de tempo: 1m
Em seguida, importe o painel de contabilidade de samples/accounting-dashboard-grafana.json.
Formato do log de métricas
## HTTP
2018/05/14 14:18:18 [notice] 5#0: pid:5|from:1526278638|to:1526278659|accounting_id:HTTP_ECHO_HELLO|requests:4872|bytes_in:438480|bytes_out:730800|latency_ms:0|upstream_latency_ms:0|200:4872
2018/05/14 14:18:18 [notice] 5#0: pid:5|from:1526278638|to:1526278659|accounting_id:INDEX|requests:4849|bytes_in:421863|bytes_out:1857167|latency_ms:0|upstream_latency_ms:0|301:4849
## Stream
2018/05/14 14:18:22 [notice] 5#0: pid:5|from:1526278642|to:1526278659|accounting_id:TCP_PROXY_ECHO|sessions:9723|bytes_in:860343|bytes_out:2587967|latency_ms:4133|upstream_latency_ms:3810|200:9723
Cada linha da saída do log contém métricas para um accounting_id específico,
que contém uma lista de chave-valor.
| nome da chave | significados dos valores |
|---|---|
pid |
pid do processo trabalhador do nginx |
from / to |
métrica coletada do período entre esses timestamps |
accounting_id |
identificação da unidade de contabilidade, definida pela diretiva accounting_id |
requests |
contagem total de requisições processadas no período atual (apenas módulo HTTP) |
sessions |
contagem total de sessões processadas no período atual (apenas módulo Stream) |
bytes_in |
total de bytes recebidos pelo servidor |
bytes_out |
total de bytes enviados pelo servidor |
latency_ms |
soma de todos os $session_time das requisições/sessões, em milissegundos |
upstream_latency_ms |
soma de $upstream_response_time, em milissegundos |
200 / 302 / 400 / 404 / 500 ... |
contagem de requisições/sessões com código de status 200/302/400/404/500, etc. Observe as diferenças entre códigos http e códigos de stream |
Exemplo de configuração
http {
accounting on;
accounting_log logs/http-accounting.log;
accounting_id $hostname;
...
}
stream {
accounting on;
accounting_log logs/stream-accounting.log;
accounting_id $hostname;
...
}
Visualização
A visualização com Kibana ou Grafana é fácil.
Veja samples/ para exemplos.
Branches
- master : ramo principal de desenvolvimento.
- tag v0.1 ou v2-freeze-20110526 : lançamento legado. funciona com versões do nginx (0.7.xx, 0.8.xx), nginx 0.9 não foi testado. não funcionou com nginx acima de 1.0.x.
GitHub
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-traffic-accounting.