nginx: como localizo 500 aleatórios do nginx (não é meu aplicativo). Potencialmente tem algo a ver com carga?


9

Recentemente, tivemos cerca de 500 do nginx, que de alguma forma não foram registrados (temos capturas de tela, mas nada nos registros). Isso é estranho por si só, porque geralmente erros aparecem lá. Independentemente disso, estou me perguntando se existe algo como um tamanho de pool de conexão que, se atingido ao máximo, resultaria em 500? Nós o correlacionamos potencialmente a um aumento recente no tráfego, mas não é conclusivo.

Alguém tem alguma idéia de como começar a abordar esse problema?


As duas primeiras coisas que você precisa fazer são reproduzir esse erro e descobrir o motivo pelo qual o Nginx não faz logon error_log. Publique também seu arquivo de configuração.
Quanta 01/10

Respostas:


6

Usamos uma combinação de formatos de log no nginx e no lmon para capturar coisas assim. Um formato de log NGINX como:

log_format main '$ status: $ request_time: $ upstream_response_time: $ pipe: $ body_bytes_sent $ conexão $ remote_addr $ host $ remote_user [$ time_local] "$ request" "$ http_referer" "$ http_user_agent" "$ http_x_forwarded_for" $ upstream_addr $ upstream_addr " in: $ http_cookie "'

Ele captura muitas informações úteis de diagnóstico, como o servidor upstream que tratou da solicitação, além de colocar o status na frente, para facilitar a leitura, mesmo que os logs estejam rolando rapidamente.

Usamos o LMON para assistir a esses logs e, em seguida, nos alertar (pagers / email) se houver erros, como 500s, 503s, 400s, nos logs:

http://www.bsdconsulting.no/tools/lmon-README

Isso pode ajudá-lo a ser alertado sobre um problema que está acontecendo, que é o momento mais fácil para depurá-lo.

A outra coisa que você provavelmente deve considerar se ainda não o fez é que, por padrão, o nginx considera um 500 uma condição fatal e não tenta outro upstream. Se você tiver vários upstreams, poderá configurá-lo para usar outro se receber 500, ocultando a falha do usuário:

http://wiki.nginx.org/NginxHttpProxyModule#proxy_next_upstream


Esta é uma resposta muito útil, obrigado! Off para implemenet proxy_next_upstream ...
kaleidomedallion

4

error_log $filename debug; ativará o log de nível de depuração no log de erros - isso fornecerá muitos e muitos detalhes do status interno do nginx no momento do erro e, se compilado com --with-debug (que várias distribuições fazem por padrão) darei ainda mais.

Esteja avisado de que o nível de "depuração" realmente gera muita saída, a ponto de você querer observar o espaço em disco ...


1

No meu caso, o arquivo conf não foi nomeado corretamente (era example.com em vez de example.com.conf) e não foi incluído. De alguma forma, isso não resultou em 'Bem-vindo ao nginx', mas em um erro HTTP 500 não registrado. Bem, na verdade, foi registrado, mas no arquivo de erro de um host virtual diferente que não pode funcionar com esse URL específico.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.