Pular para conteúdo

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

FOSSA Status Financial Contributors on Open Collective

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 Accounting Dashboard

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.