> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Rastrear tempo de fila de requisições

## 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:

<img src="https://mintcdn.com/appsignal-715f5a51/4TRZP0Sq9Zq7PAPW/assets/images/screenshots/queue_time_graph.png?fit=max&auto=format&n=4TRZP0Sq9Zq7PAPW&q=85&s=59ec70caa98e86cf5ec34dd5c76eb045" alt="Screenshot of Queue time graph" width="2560" height="1440" data-path="assets/images/screenshots/queue_time_graph.png" />

## 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}`](http://nginx.org/en/docs/http/ngx_http_core_module.html#variables) com [NGINX 1.2.6](http://nginx.org/en/docs/http/ngx_http_core_module.html#variables) ou superior. Esse é o tempo atual em milissegundos.

<CodeGroup>
  ```ruby Ruby theme={null}
  proxy_set_header X-Request-Start "t=${msec}";
  ```
</CodeGroup>

### Apache

No Apache, [mod\_headers](https://httpd.apache.org/docs/current/mod/mod_headers.html) expõe uma variável `"$t"` que pode ser usada para rastrear o queue time. Adicione o header da seguinte forma:

<CodeGroup>
  ```ruby Ruby theme={null}
  RequestHeader set X-Request-Start "%t"
  ```
</CodeGroup>

### 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.

<CodeGroup>
  ```conf Config theme={null}
  http-request set-header X-Request-Start t=%[date(0, us)]
  ```
</CodeGroup>

## 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](/application/namespaces).
