Pular para o conteúdo principal

Tempos de fila

Uma configuração comum para aplicações Ruby é que o webserver Ruby como Unicorn ou Puma roda atrás de outro webserver (externo) como Nginx ou Apache. Estes geralmente são usados para terminar conexões SSL e lidar com assets estáticos, por exemplo. Quando seu webserver Ruby está ocupado processando requisições, o Nginx ou Apache ainda pode aceitar novas conexões e esperar que um processo Ruby fique disponível para lidar com a requisição. O webserver externo enfileira a requisição enquanto isso. O ideal é que haja capacidade suficiente para que o webserver externo nunca tenha que esperar pelo Ruby, mas na prática isso pode acontecer quando há um pico repentino de requisições. Um bom indicador de capacidade é, portanto, a métrica de queue time, ou seja, a quantidade de tempo entre quando o webserver externo aceitou a requisição e o Ruby lida com a requisição. Um queue time longo por um período prolongado indica que você precisará escalar a quantidade de processos/threads Ruby para lidar com requisições, ou escalar mais webservers. Você pode encontrar as métricas de queue time na página de gráficos de Performance: Screenshot of Queue time graph

Configuração

O AppSignal rastreia automaticamente o queue time no Heroku, mas se você rodar seu próprio servidor com NGINX ou Apache, precisará configurar os headers corretos para que o rastreamento de queue time funcione.

NGINX

Você pode usar a variável ${msec} com NGINX 1.2.6 ou superior. Esse é o tempo atual em milissegundos.
proxy_set_header X-Request-Start "t=${msec}";

Apache

No Apache, mod_headers expõe uma variável "$t" que pode ser usada para rastrear o queue time. Adicione o header da seguinte forma:
RequestHeader set X-Request-Start "%t"

HAProxy

Adicione o seguinte à configuração de frontend relevante do HAProxy para rastrear o queue time da requisição. Isso expõe o valor de datetime de quando a requisição foi enviada para que o AppSignal possa calcular o queue time da requisição.
http-request set-header X-Request-Start t=%[date(0, us)]

Namespaces

A partir da gem Ruby 2.11 e versões mais recentes, o queue time é reportado para todos os namespaces. Anteriormente, ele só reportava queue times para os namespaces “web” e “background”. Atualize para a última versão da gem Ruby se você não vir gráficos de queue time para seus namespaces personalizados.