> ## 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étriques NGINX

Les intégrations AppSignal et l'agent autonome AppSignal peuvent générer des métriques à partir des logs d'accès de votre serveur NGINX. Après avoir configuré votre serveur NGINX pour envoyer des métriques à AppSignal, un Magic Dashboard avec les métriques liées à votre serveur NGINX apparaîtra.

## Configuration d'AppSignal

Tout d'abord, vous devez configurer votre intégration AppSignal ou l'agent autonome pour qu'il reçoive les métriques de NGINX.

<Tip>
  L'activation des métriques NGINX ouvre un serveur auquel NGINX peut envoyer les métriques. Par défaut, ce serveur est lié à `localhost` et écoute sur le port `27649`. Vous pouvez modifier ces paramètres à l'aide des options de configuration `bind_address` et `nginx_port`.

  Si vous exécutez plusieurs applications instrumentées avec AppSignal en même temps sur le même serveur, vous pouvez configurer chaque application pour écouter sur un port différent à l'aide de l'option de configuration `nginx_port`.
</Tip>

Si vous configurez votre intégration AppSignal avec des variables d'environnement, vous devez définir `APPSIGNAL_ENABLE_NGINX_METRICS` à true.

Si vous configurez votre intégration AppSignal avec des fichiers de configuration, ou si vous utilisez l'agent autonome, vous pouvez suivre les instructions appropriées ci-dessous pour activer les métriques NGINX pour votre application :

* [Configuration Ruby](#ruby)
* [Configuration Elixir](#elixir)
* [Configuration Node.js](#nodejs)
* [Configuration de l'agent autonome](#standalone-agent)

### Ruby

<Tip>
  La prise en charge des métriques NGINX a été ajoutée dans la version `3.3.4`
  de l'intégration Ruby.
</Tip>

Ajoutez `enable_nginx_metrics: true` à l'environnement souhaité dans le fichier `config/appsignal.yml` de votre application, par exemple l'environnement de production :

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

### Elixir

<Tip>
  La prise en charge des métriques NGINX a été ajoutée dans la version `2.5.2`
  de l'intégration Elixir.
</Tip>

Ajoutez `enable_nginx_metrics: true` à votre bloc de configuration AppSignal, généralement situé dans `config/config.exs` :

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

### Node.js

<Tip>
  La prise en charge des métriques NGINX a été ajoutée dans la version `3.0.8`
  de l'intégration Node.js.
</Tip>

Ajoutez `enableNginxMetrics: true` à votre fichier `appsignal.cjs` :

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

### Agent autonome

<Tip>
  La prise en charge des métriques NGINX a été ajoutée dans la version `0.0.24`
  de l'agent autonome.
</Tip>

Ajoutez `enable_nginx_metrics = true` à votre fichier de configuration `/etc/appsignal-agent.conf` :

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

## Configuration de NGINX

L'étape suivante consiste à configurer votre serveur NGINX pour qu'il envoie les métriques à AppSignal. Dans la plupart des distributions Linux, la configuration NGINX par défaut inclut des fichiers de configuration provenant d'un dossier de configuration, souvent situé dans `/etc/nginx/conf.d`. Enregistrez la configuration suivante dans ce dossier sous le nom `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>
  Remplacez `127.0.0.1:27649` par l'hôte et le port où votre intégration AppSignal ou l'agent autonome écoute les métriques NGINX.
</Note>

Si votre configuration NGINX n'inclut pas de fichiers de configuration comme décrit ci-dessus, vous pouvez l'inclure vous-même depuis le bloc `http` de votre fichier `nginx.conf` :

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

Notez que si un bloc `server` ou `location` contient une directive `access_log`, les métriques des requêtes vers ce serveur ou cet emplacement ne seront pas rapportées à AppSignal. Pour rapporter les métriques à AppSignal pour ces requêtes, vous devrez ajouter la ligne suivante à l'intérieur du bloc :

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

<Note>
  Remplacez `127.0.0.1:27649` par l'hôte et le port où votre intégration AppSignal ou l'agent autonome écoute les métriques NGINX.
</Note>

La directive `access_log` existante à l'intérieur du bloc continuera à fonctionner comme avant.

### Configuration des groupes de requêtes

En modifiant la valeur de la variable `$appsignal_group` dans un bloc `location` ou `server` de votre configuration NGINX, vous pouvez différencier les différents types de requêtes traitées par votre serveur NGINX :

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

Les métriques liées aux requêtes seront segmentées par leur groupe, et les différents groupes seront suivis indépendamment dans les graphiques du Magic Dashboard pour ces métriques.

### Désactivation des métriques

Vous pouvez utiliser la directive `access_log off` pour désactiver tous les logs d'accès dans un bloc `location` ou `server`. Notez que cela désactivera *tous* les logs d'accès configurés, pas seulement ceux qui sont envoyés à AppSignal en tant que métriques.

Pour rapporter les métriques uniquement à partir de blocs `location` ou `server` spécifiques, supprimez la ligne suivante du fichier `appsignal-metrics.conf`, puis ajoutez-la uniquement à l'intérieur des blocs `location` ou `server` spécifiques à partir desquels vous souhaitez rapporter les métriques à AppSignal :

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

<Note>
  Remplacez `127.0.0.1:27649` par l'hôte et le port où votre intégration AppSignal ou l'agent autonome écoute les métriques NGINX.
</Note>

Cela désactivera implicitement tous les logs d'accès des directives `access_log` dans le bloc `server` ou `http` environnant. Pour réactiver ces logs d'accès, répétez leur directive `access_log` correspondante à l'intérieur du bloc `location` ou `server` auquel vous avez ajouté la ligne ci-dessus :

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

    location /app {
      # this line enables AppSignal NGINX metrics for this location
      # but it also disables the access log declared in the server block
      access_log syslog:server=127.0.0.1:27649,tag=appsignal_nginx appsignal_metrics;

      # this line enables the access log declared in the server block again
      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="Le Magic Dashboard NGINX" width="2298" height="1935" data-path="assets/images/screenshots/metrics/nginx/magic-dashboard.png" />

Les [métriques envoyées à AppSignal par votre serveur NGINX](#metrics) seront utilisées pour créer un Magic Dashboard. Dans ce tableau de bord, vous pourrez voir des graphiques représentant des métriques utiles au fil du temps, telles que :

* **Request time :** le temps mis par votre serveur NGINX pour répondre à une requête, en moyenne par minute et en 95e percentile.
* **Throughput :** un compte des requêtes traitées par votre serveur NGINX.
* **Request length :** la longueur en octets de la requête reçue du client par votre serveur NGINX, en moyenne par minute et en 95e percentile.
* **Response length :** la longueur en octets de la réponse envoyée au client par votre serveur NGINX, en moyenne par minute et en 95e percentile.
* **Status codes :** un compte des codes d'état des réponses envoyées par votre serveur NGINX.
* **Connections :** une gauge des connexions actuellement traitées par votre serveur NGINX, mesurée une fois par minute et segmentée par le statut de la connexion.
* **Upstream status codes :** un compte des codes d'état des réponses envoyées par les serveurs upstream que votre serveur NGINX proxifie.
* **Upstream response time :** le temps mis pour répondre à une requête par les serveurs upstream que votre serveur NGINX proxifie, en moyenne par minute et en 95e percentile.
* **Upstream cache status :** le statut du cache (tel que `HIT` ou `MISS`) lors du traitement d'une requête mise en cache proxifiée depuis un serveur upstream.

La plupart de ces graphiques sont segmentés par [le groupe de requêtes](#configuring-request-groups), le nom d'hôte ou l'upstream concerné, le cas échéant. Vous pouvez toutefois plonger dans l'éditeur de graphiques et choisir une segmentation différente qui offre une vue plus utile sur vos données. Consultez la section ci-dessous pour une ventilation détaillée des métriques envoyées depuis votre serveur NGINX.

## Métriques

Les métriques suivantes seront envoyées à AppSignal depuis votre serveur NGINX :

* **`nginx_status`** : Un counter incrémenté pour chaque requête traitée par votre serveur NGINX. Tagué par :
  * `status` : Le code d'état de la réponse.
  * `group` : Le groupe de requêtes, tel que [configuré dans votre serveur NGINX](#configuring-request-groups).
  * `hostname` : Le nom d'hôte du serveur qui a traité la requête.
* **`nginx_request_time`** : Une distribution du temps mis pour répondre à chaque requête. Tagué par :
  * **`group`** : Le groupe de requêtes, tel que [configuré dans votre serveur NGINX](#configuring-request-groups).
  * **`hostname`** : Le nom d'hôte du serveur qui a traité la requête.
* `nginx_request_length` : Une distribution des octets reçus dans la requête du client, pour chaque requête. Tagué par :
  * **`group`** : Le groupe de requêtes, tel que [configuré dans votre serveur NGINX](#configuring-request-groups).
  * **`hostname`** : Le nom d'hôte du serveur qui a traité la requête.
* `nginx_bytes_sent` : Une distribution des octets envoyés dans la réponse au client, pour chaque requête. Tagué par :
  * **`group`** : Le groupe de requêtes, tel que [configuré dans votre serveur NGINX](#configuring-request-groups).
  * **`hostname`** : Le nom d'hôte du serveur qui a traité la requête.

Si la requête est traitée en proxifiant depuis un upstream à l'aide de la directive NGINX `proxy_pass`, les métriques suivantes seront également présentes :

* `nginx_upstream_time` : Une distribution du temps qu'il a fallu pour communiquer avec le serveur upstream. Tagué par :
  * **`group`** : Le groupe de requêtes, tel que [configuré dans votre serveur NGINX](#configuring-request-groups).
  * **`hostname`** : Le nom d'hôte du serveur qui a traité la requête.
  * **`upstream`** : Le serveur upstream vers lequel la requête a été proxifiée.
  * **`measurement`** : La mesure de temps spécifique :
    * `connect` : Le temps qu'il a fallu pour que la connexion soit établie.
    * `header` : Le temps qu'il a fallu pour que l'en-tête de la réponse soit envoyé.
    * `response` : Le temps qu'il a fallu pour que la réponse complète soit envoyée.
* `nginx_upstream_status` : Un counter incrémenté pour chaque requête proxifiée vers un upstream. Tagué par :
  * **`status`** : Le code d'état de la réponse.
  * **`group`** : Le groupe de requêtes, tel que [configuré dans votre serveur NGINX](#configuring-request-groups).
  * **`hostname`** : Le nom d'hôte du serveur qui a traité la requête.
  * **`upstream`** : Le serveur upstream vers lequel la requête a été proxifiée.

Si la requête proxifiée depuis un upstream est mise en cache à l'aide de la directive NGINX `proxy_cache`, la métrique suivante sera également présente :

* `nginx_upstream_cache_status` : Un counter incrémenté pour chaque requête proxifiée vers un upstream avec mise en cache activée. Tagué par :
  * **`status`** : Le [statut du cache](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#var_upstream_cache_status) pour la requête.
  * **`group`** : Le groupe de requêtes, tel que [configuré dans votre serveur NGINX](#configuring-request-groups).
  * **`hostname`** : Le nom d'hôte du serveur qui a traité la requête.

Si votre serveur NGINX a été compilé avec le module NGINX `ngx_http_stub_status_module` activé (comme fourni par la plupart des distributions Linux), la métrique suivante sera également présente :

* `nginx_connections` : Le nombre de connexions que votre serveur NGINX traite actuellement. Tagué par :
  * **`hostname`** : Le nom d'hôte du serveur qui a traité la requête.
  * **`measurement`** : Le nombre spécifique de connexions mesuré :
    * `active` : Le nombre de connexions actives.
    * `reading` : Le nombre de connexions où la requête est en cours de lecture.
    * `writing` : Le nombre de connexions où la réponse est en cours d'écriture.
    * `waiting` : Le nombre de connexions inactives.

La métrique des connexions se réfère toujours au nom d'hôte dans son ensemble, pas à un groupe spécifique. Sa valeur est mise à jour une fois par minute.

<Tip>
  Le nom d'hôte du serveur utilisé pour les métriques n'est pas la valeur du nom
  d'hôte NGINX, mais la valeur du nom d'hôte configurée pour l'intégration
  AppSignal ou l'agent autonome. Cette valeur est généralement configurée
  automatiquement et peut être remplacée par l'option de configuration
  `hostname`.
</Tip>

## Support

Si vous rencontrez des difficultés pour configurer les métriques NGINX de votre application, [contactez le support](mailto:support@appsignal.com), et nous vous aiderons à faire circuler vos métriques.
