Como podemos criar logs do Blackbox para o Nginx?

3

Há um artigo por aí, Criação de perfil de aplicativos LAMP com os logs do Blackbox do Apache , que descreve como criar um log que registra muitas informações detalhadas ausentes nos formatos de log comuns e combinados. Esta informação deve ajudá-lo a resolver problemas de desempenho. Como observa o autor: "Embora o formato comum de arquivos de log (e o formato combinado) sejam ótimos para o rastreamento de hits, eles não são adequados para obter dados de desempenho hardcore".

O artigo descreve um formato de log "blackbox", como um gravador de voo blackbox em uma aeronave, que reúne informações usadas para perfilar o desempenho do servidor, ausente dos formatos de log de rastreamento de hits: manter status vivo, porta remota, processos filho, bytes enviado, etc.

LogFormat "%a/%S %X %t \"%r\" %s/%>s %{pid}P/%{tid}P %T/%D %I/%O/%B" blackbox

Estou tentando recriar o formato do Nginx e gostaria de ajudar a preencher os espaços em branco. Aqui está o formato de caixa preta do Nginx, as diretivas do Apache não mapeadas têm pontos de interrogação após seus nomes.

access_log blackbox '$remote_addr/$remote_port X? [$time_local] "$request"'
                    's?/$status $pid/0 T?/D? I?/$bytes_sent/$body_bytes_sent'

Aqui está uma tabela das variáveis que eu consegui mapear a partir da documentação do Nginx.

%a = $remote_addr - The IP address of the remote client.
%S = $remote_port - The port of the remote client.
%X = ? - Keep alive status.
%t = $time_local - The start time of the request.
%r = $request - The first line of request containing method verb, path and protocol.
%s = ? - Status before any redirections.
%>s = $status - Status after any redirections.
%{pid}P = $pid - The process id.
%{tid}P = N/A - The thread id, which is non-applicable to Nignx.
%T = ? - The time in seconds to handle the request.
%D = $request_time - The time in milliseconds to handle the request.
%I = ? - The count of bytes received including headers. 
%O = $bytes_sent - The count of bytes sent including headers.
%B = $body_bytes_sent - The count of bytes sent excluding headers, but with a 0 for none instead of '-'.

Procurando ajuda para preencher as variáveis ausentes, ou confirmação de que as variáveis ausentes estão, de fato, indisponíveis no Nginx.

    
por Alan Gutierrez 15.06.2010 / 16:56

1 resposta

3

O Nginx não é como o Apache - o poder do Nginx está em (1) correspondência de servidor / localização e reescrita de URI, (2) solicitações de proxy / failover (para upstream HTTP / FastCGI) e (3) armazenamento em cache do resultado. Assim, você pode enfrentar problemas reais em algum lugar dessas áreas, quando precisar avaliar como o serviço de back-end responde e quais solicitações estão armazenadas em cache. Eu duvido que possa haver qualquer formato "blackbox" universal para o Nginx, já que ele tem muitas variáveis e além disso elas são dinâmicas (isto é, você pode escrever o valor do cookie "Registrado" e o status do cache correspondente no log para ver se usuários registrados obtenham conteúdo em cache ou não)

No entanto, é muito útil estender o formato curto de log "combinado".

Geral

Algumas dicas sobre as variáveis gerais:

$uri - URI after rewrites
$args - Query arguments
$realpath_root - Value of "root" for this request
$server_name - the name of server which is processing the request
$connection - the number of connection

Proxying

Algumas variáveis úteis quando proxying. Essas variáveis podem conter valores de servidor: separadas por , quando upstreams feitas por solicitação e separadas por : quando X-Accel-Redirect foi emitido:

$upstream_addr - the upstream IPs
$upstream_response_time - the upstream processing times
$upstream_status - the upstream statuses

Cache

Uma variável útil para registrar o status do armazenamento em cache:

$upstream_cache_status = MISS | EXPIRED | UPDATING (stale answer used) | STALE (stale answer used) | HIT
    
por 16.06.2010 / 11:50