nginx: como faço para rastrear um aleatório 500 do nginx (não meu aplicativo). Potencialmente tem algo a ver com carga?

8

Recentemente, tivemos alguns 500's do próprio nginx que de alguma forma não foram registrados (temos capturas de tela, mas nada nos logs). Isso é estranho em si, porque geralmente aparecem erros lá. Independentemente disso, eu estou querendo saber se há algo como um tamanho de pool de conexão que se maximizado resultaria em um 500? Correlacionamos isso potencialmente a um aumento recente no tráfego, mas isso não é conclusivo.

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

    
por kaleidomedallion 01.10.2011 / 08:34

3 respostas

6

Nós usamos uma combinação de formatos de log em nginx e lmon para capturar coisas como esta. Um formato de registro NGINX como:

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

Capturará muitas informações de diagnóstico úteis, como o servidor upstream que processou a solicitação, além de colocar o status na frente para facilitar a leitura, mesmo se os registros estiverem 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 registros:

link

Isso pode ajudá-lo a ser alertado sobre um problema quando estiver ocorrendo, qual é o melhor momento para depurá-lo.

A outra coisa que você deve considerar, se você ainda não tiver, é 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, você pode configurá-lo para usar outro se obtiver um 500, obscurecendo a falha do usuário:

link

    
por 01.10.2011 / 20:19
4

error_log $filename debug; ativará o registro do 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ários distribuições por padrão) vai dar ainda mais.

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

    
por 06.10.2011 / 16:59
1

No meu caso, o arquivo conf não foi nomeado corretamente (foi 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, ele foi registrado na verdade, mas no arquivo de erro de um host virtual diferente que não funcionava com esse URL específico.

    
por 07.03.2017 / 17:31