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

# Métricas do NGINX

As integrações do AppSignal e o agente standalone do AppSignal podem gerar métricas a partir dos logs de acesso do seu servidor NGINX. Após configurar seu servidor NGINX para enviar métricas ao AppSignal, um magic dashboard com métricas relacionadas ao seu servidor NGINX aparecerá.

## Configurando o AppSignal

Primeiro, você deve configurar sua integração AppSignal ou agente standalone para receber métricas do NGINX.

<Tip>
  Habilitar as métricas do NGINX abrirá um servidor para o NGINX enviar métricas. Por padrão, este servidor está vinculado a `localhost` e escuta na porta `27649`. Você pode modificar essas configurações usando as opções de configuração `bind_address` e `nginx_port`.

  Se você está executando várias aplicações instrumentadas com AppSignal ao mesmo tempo no mesmo servidor, pode configurar cada aplicação para escutar em uma porta diferente usando a opção de configuração `nginx_port`.
</Tip>

Se você configura sua integração AppSignal com variáveis de ambiente, deve definir `APPSIGNAL_ENABLE_NGINX_METRICS` como true.

Se você configura sua integração AppSignal com arquivos de configuração, ou usa o agente standalone, pode seguir as instruções relevantes abaixo sobre como habilitar as métricas do NGINX para sua aplicação:

* [Configuração Ruby](#ruby)
* [Configuração Elixir](#elixir)
* [Configuração Node.js](#nodejs)
* [Configuração do agente Standalone](#standalone-agent)

### Ruby

<Tip>
  O suporte às métricas do NGINX foi adicionado na versão `3.3.4` da integração
  Ruby.
</Tip>

Adicione `enable_nginx_metrics: true` ao ambiente desejado no arquivo `config/appsignal.yml` da sua aplicação, por exemplo, o ambiente de produção:

<CodeGroup>
  ```yaml YAML theme={null}
  production:
    enable_nginx_metrics: true
    # ...
  ```
</CodeGroup>

### Elixir

<Tip>
  O suporte às métricas do NGINX foi adicionado na versão `2.5.2` da integração
  Elixir.
</Tip>

Adicione `enable_nginx_metrics: true` ao seu bloco de configuração do AppSignal, normalmente localizado em `config/config.exs`:

<CodeGroup>
  ```elixir Elixir theme={null}
  config :appsignal, :config,
    enable_nginx_metrics: true,
    # ...
  ```
</CodeGroup>

### Node.js

<Tip>
  O suporte às métricas do NGINX foi adicionado na versão `3.0.8` da integração
  Node.js.
</Tip>

Adicione `enableNginxMetrics: true` ao seu arquivo `appsignal.cjs`:

<CodeGroup>
  ```javascript Node.js theme={null}
  new Appsignal({
    enableNginxMetrics: true,
    // ...
  });
  ```
</CodeGroup>

### Agente standalone

<Tip>
  O suporte às métricas do NGINX foi adicionado na versão `0.0.24` do agente
  standalone.
</Tip>

Adicione `enable_nginx_metrics = true` ao seu arquivo de configuração `/etc/appsignal-agent.conf`:

<CodeGroup>
  ```toml TOML theme={null}
  enable_nginx_metrics = true
  ```
</CodeGroup>

## Configurando o NGINX

O próximo passo é configurar seu servidor NGINX para enviar métricas ao AppSignal. Na maioria das distribuições Linux, a configuração padrão do NGINX incluirá arquivos de configuração de uma pasta de configuração, frequentemente localizada em `/etc/nginx/conf.d`. Salve a seguinte configuração nessa pasta como `appsignal-metrics.conf`:

<CodeGroup>
  ```nginx NGINX theme={null}
  map '' $appsignal_group {
    default 'http';
  }

  log_format appsignal_metrics '1|g=$appsignal_group;s=$status;rqt=$request_time;rql=$request_length;bs=$bytes_sent;ua=$upstream_addr;uct=$upstream_connect_time;uht=$upstream_header_time;urst=$upstream_response_time;us=$upstream_status;ucs=$upstream_cache_status;ca=$connections_active;cr=$connections_reading;cwr=$connections_writing;cwa=$connections_waiting';
  access_log syslog:server=127.0.0.1:27649,tag=appsignal_nginx appsignal_metrics;
  ```
</CodeGroup>

<Note>
  Substitua `127.0.0.1:27649` pelo host e porta onde sua integração AppSignal ou agente stand-alone está escutando por métricas do NGINX.
</Note>

Se sua configuração do NGINX não inclui arquivos de configuração conforme descrito acima, você pode incluí-la dentro do bloco `http` do seu arquivo `nginx.conf`:

<CodeGroup>
  ```nginx NGINX theme={null}
  http {
    include '/path/to/appsignal-metrics.conf';
    ...
  }
  ```
</CodeGroup>

Observe que se um bloco `server` ou `location` contém uma diretiva `access_log`, as métricas para requisições a esse server ou location não serão reportadas ao AppSignal. Para reportar métricas ao AppSignal para essas requisições, você precisará adicionar a seguinte linha dentro do bloco:

```sh Shell theme={null}
access_log syslog:server=127.0.0.1:27649,tag=appsignal_nginx appsignal_metrics;
```

<Note>
  Substitua `127.0.0.1:27649` pelo host e porta onde sua integração AppSignal ou agente stand-alone está escutando por métricas do NGINX.
</Note>

A diretiva `access_log` existente dentro do bloco continuará funcionando como antes.

### Configurando grupos de requisições

Ao alterar o valor da variável `$appsignal_group` dentro de um bloco `location` ou `server` em sua configuração NGINX, você pode diferenciar entre diferentes tipos de requisições tratadas pelo seu servidor NGINX:

<CodeGroup>
  ```nginx NGINX theme={null}
  location /admin {
    set $appsignal_group 'admin';
    ...
  }
  ```
</CodeGroup>

As métricas relacionadas a requisições serão segmentadas pelo seu grupo, e os diferentes grupos serão rastreados independentemente nos gráficos do magic dashboard para essas métricas.

### Desabilitando métricas

Você pode usar a diretiva `access_log off` para desabilitar todos os logs de acesso dentro de um bloco `location` ou `server`. Observe que isso desabilitará *todos* os logs de acesso configurados, não apenas aqueles que são enviados ao AppSignal como métricas.

Para reportar métricas apenas de blocos `location` ou `server` específicos, remova a seguinte linha do arquivo `appsignal-metrics.conf` e adicione-a apenas dentro dos blocos `location` ou `server` específicos dos quais você gostaria de reportar métricas para o AppSignal:

<CodeGroup>
  ```nginx NGINX theme={null}
  access_log syslog:server=127.0.0.1:27649,tag=appsignal_nginx appsignal_metrics;
  ```
</CodeGroup>

<Note>
  Substitua `127.0.0.1:27649` pelo host e porta onde sua integração AppSignal ou agente stand-alone está escutando por métricas do NGINX.
</Note>

Fazer isso desabilitará implicitamente todos os logs de acesso das diretivas `access_log` no bloco `server` ou `http` envolvente. Para habilitar esses logs de acesso novamente, repita a diretiva `access_log` correspondente dentro do bloco `location` ou `server` onde você adicionou a linha acima:

<CodeGroup>
  ```nginx NGINX theme={null}
  server {
    access_log /var/log/nginx/access.log main;

    location /app {
      # esta linha habilita as métricas do AppSignal NGINX para este location
      # mas também desabilita o log de acesso declarado no bloco server
      access_log syslog:server=127.0.0.1:27649,tag=appsignal_nginx appsignal_metrics;

      # esta linha habilita novamente o log de acesso declarado no bloco server
      access_log /var/log/nginx/access.log main;
    }
  }
  ```
</CodeGroup>

## Magic dashboard

<img src="https://mintcdn.com/appsignal-715f5a51/4TRZP0Sq9Zq7PAPW/assets/images/screenshots/metrics/nginx/magic-dashboard.png?fit=max&auto=format&n=4TRZP0Sq9Zq7PAPW&q=85&s=fab340c84e32d4b0bf1d47183eeafe8f" alt="O magic dashboard do NGINX" width="2298" height="1935" data-path="assets/images/screenshots/metrics/nginx/magic-dashboard.png" />

As [métricas enviadas ao AppSignal pelo seu servidor NGINX](#metrics) serão usadas para criar um magic dashboard. Neste dashboard, você poderá ver gráficos representando métricas úteis ao longo do tempo, como:

* **Tempo de requisição:** o tempo levado pelo seu servidor NGINX para responder a uma requisição, como média por minuto e percentil 95.
* **Throughput:** uma contagem das requisições tratadas pelo seu servidor NGINX.
* **Comprimento da requisição:** o comprimento em bytes da requisição recebida do cliente pelo seu servidor NGINX, como média por minuto e percentil 95.
* **Comprimento da resposta:** o comprimento em bytes da resposta enviada ao cliente pelo seu servidor NGINX, como média por minuto e percentil 95.
* **Códigos de status:** uma contagem dos códigos de status das respostas enviadas pelo seu servidor NGINX.
* **Conexões:** um gauge das conexões atualmente tratadas pelo seu servidor NGINX, medidas uma vez por minuto e segmentadas pelo status da conexão.
* **Códigos de status upstream:** uma contagem dos códigos de status das respostas enviadas pelos servidores upstream dos quais seu servidor NGINX faz proxy.
* **Tempo de resposta upstream:** o tempo levado para responder a uma requisição pelos servidores upstream dos quais seu servidor NGINX faz proxy, como média por minuto e percentil 95.
* **Status do cache upstream:** o status do cache (como `HIT` ou `MISS`) ao tratar uma requisição em cache vinda de um servidor upstream.

A maioria desses gráficos é segmentada pelo [grupo de requisição](#configuring-request-groups), o hostname ou o upstream relevante, se houver. Você pode, no entanto, mergulhar no editor de gráficos e escolher uma segmentação diferente que forneça uma visão mais útil de seus dados. Veja a seção abaixo para uma divisão detalhada das métricas enviadas pelo seu servidor NGINX.

## Métricas

As seguintes métricas serão enviadas ao AppSignal pelo seu servidor NGINX:

* **`nginx_status`**: Um counter que incrementa para cada requisição tratada pelo seu servidor NGINX. Marcado por:
  * `status`: O código de status da resposta.
  * `group`: O grupo da requisição, conforme [configurado no seu servidor NGINX](#configuring-request-groups).
  * `hostname`: O hostname do servidor que tratou a requisição.
* **`nginx_request_time`**: Uma distribuição do tempo levado para responder a cada requisição. Marcado por:
  * **`group`**: O grupo da requisição, conforme [configurado no seu servidor NGINX](#configuring-request-groups).
  * **`hostname`**: O hostname do servidor que tratou a requisição.
* `nginx_request_length`: Uma distribuição dos bytes recebidos na requisição do cliente, para cada requisição. Marcado por:
  * **`group`**: O grupo da requisição, conforme [configurado no seu servidor NGINX](#configuring-request-groups).
  * **`hostname`**: O hostname do servidor que tratou a requisição.
* `nginx_bytes_sent`: Uma distribuição dos bytes enviados na resposta ao cliente, para cada requisição. Marcado por:
  * **`group`**: O grupo da requisição, conforme [configurado no seu servidor NGINX](#configuring-request-groups).
  * **`hostname`**: O hostname do servidor que tratou a requisição.

Se a requisição é tratada fazendo proxy de um upstream usando a diretiva `proxy_pass` do NGINX, as seguintes métricas também estarão presentes:

* `nginx_upstream_time`: Uma distribuição do tempo levado para se comunicar com o servidor upstream. Marcado por:
  * **`group`**: O grupo da requisição, conforme [configurado no seu servidor NGINX](#configuring-request-groups).
  * **`hostname`**: O hostname do servidor que tratou a requisição.
  * **`upstream`**: O servidor upstream para o qual a requisição foi proxiada.
  * **`measurement`**: O tempo específico medido:
    * `connect`: O tempo que levou para a conexão ser estabelecida.
    * `header`: O tempo que levou para o cabeçalho da resposta ser enviado.
    * `response`: O tempo que levou para a resposta completa ser enviada.
* `nginx_upstream_status`: Um counter que incrementa para cada requisição proxiada para um upstream. Marcado por:
  * **`status`**: O código de status da resposta.
  * **`group`**: O grupo da requisição, conforme [configurado no seu servidor NGINX](#configuring-request-groups).
  * **`hostname`**: O hostname do servidor que tratou a requisição.
  * **`upstream`**: O servidor upstream para o qual a requisição foi proxiada.

Se a requisição proxiada de um upstream é armazenada em cache usando a diretiva `proxy_cache` do NGINX, a seguinte métrica também estará presente:

* `nginx_upstream_cache_status`: Um counter que incrementa para cada requisição proxiada para um upstream com cache habilitado. Marcado por:
  * **`status`**: O [status do cache](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#var_upstream_cache_status) para a requisição.
  * **`group`**: O grupo da requisição, conforme [configurado no seu servidor NGINX](#configuring-request-groups).
  * **`hostname`**: O hostname do servidor que tratou a requisição.

Se seu servidor NGINX foi compilado com o módulo NGINX `ngx_http_stub_status_module` habilitado (como fornecido pela maioria das distribuições Linux), a seguinte métrica também estará presente:

* `nginx_connections`: O número de conexões que seu servidor NGINX está tratando atualmente. Marcado por:
  * **`hostname`**: O hostname do servidor que tratou a requisição.
  * **`measurement`**: O número específico de conexões medido:
    * `active`: O número de conexões ativas.
    * `reading`: O número de conexões onde a requisição está sendo lida.
    * `writing`: O número de conexões onde a resposta está sendo escrita.
    * `waiting`: O número de conexões ociosas.

A métrica de conexões sempre se refere ao hostname como um todo, não a um grupo específico. Seu valor é atualizado uma vez por minuto.

<Tip>
  O hostname do servidor usado para as métricas não é o valor do hostname do NGINX, mas
  o valor do hostname configurado para a integração AppSignal ou agente
  standalone. Este valor é geralmente configurado automaticamente e pode ser sobrescrito pela
  opção de configuração `hostname`.
</Tip>

## Suporte

Se você está enfrentando alguma dificuldade para configurar as métricas do NGINX da sua aplicação, [entre em contato com o suporte](mailto:support@appsignal.com), e ajudaremos você a fazer suas métricas fluírem.
