Nginx: Um log format mais útil
Posted in webdev on junho 3rd, 2011 by leandro n. camargo – Be the first to commentEu amo o Nginx, sério, amo! Mas tenho que admitir que o log_format padrão (combined) do Nginx é meio deficitário de algumas informações que julgo importantes. E elas são o tempo de duração do request e o domínio do request.
O domínio do request é bastante útil para aqueles casos onde você hospeda um serviço que opera através de vários domínios e/ou subdomínios. E ter essa informação em cada request no log pode ajudar bastante a identificar ataques e gargalos, além de te amparar quando for instalar ferramentas de monitoramento de sistema (como o Munin, Graphite ou Ganglia) para montar gráficos baseados por domínio.
O tempo de duração do request é importante para identificar quais são as páginas mais lentas e assim poder revelar os verdadeiros gargalos dentro dessas páginas, além de te dar uma noção de quantos Nginx workers e máquinas será necessário para que o serviço escale de forma a atender sua base de usuários sem incomodá-los. Bom, acho que estou falando o óbvio.
O log_format padrão no nginx quando você usa o access_log é o combined e a sua composição é a seguinte:
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
Através do comando log_format no Nginx você pode definir seu próprio format de log. O que eu normalmente uso nos meus servidores é o seguinte formato:
log_format complete '[$time_local] [$request_time] {$remote_addr} ($host) '
'"$request_uri" st:$status sz:$bytes_sent '
'"$http_referer" "$http_user_agent"';
Repare que essas variáveis (termos começados com o ‘$’) são variáveis nativas que o Nginx fornece para você dentro do contexto de geração de logs. E nesse segundo formato eu adicionei duas variáveis que o Nginx provê: $host e $request_time, que são respectivamente o domínio do request (domínio para o qual o request foi feito) e o tempo de duração do request (tempo que o Nginx levou para devolver o request ao client).
Para maiores informações sobre o log_format e suas variáveis acesse o HttpLogModule do Nginx.