Surveillance de NGINX

Instana peut vous aider à collecter à la fois des métriques et des traces distribuées des requêtes transitant par NGINX.

Logo nginx Logo nginxplus

Une fois l'agent hôte d' Instana s installé, le capteur « NGINX » est automatiquement installé. Vous pouvez consulter les indicateurs liés à NGINX dans l'interface utilisateur d' Instana, une fois que vous avez configuré le capteur NGINX comme indiqué dans la section « Configuration ».

Pour utiliser la fonction de traçage distribué, vous devez effectuer les étapes de configuration indiquées dans les sections de traçage distribué.

Informations de support

Pour vous assurer que le capteur d' NGINX s est compatible avec votre configuration actuelle, consultez les sections d'informations d'assistance suivantes :

Systèmes d'exploitation pris en charge

NGINX Le capteur et le traçage d' NGINX s ont des exigences différentes en matière de système d'exploitation.

Pour le capteur d' NGINX, les systèmes d'exploitation pris en charge correspondent aux exigences des agents hôtes; vous pouvez les consulter dans la section « Systèmes d'exploitation pris en charge » de chaque agent hôte, par exemple « Systèmes d'exploitation pris en charge pour Linux ».

Pour le traçage d' NGINX, les systèmes d'exploitation suivants sont pris en charge :

Système d'exploitation Architecture Nombre de bits
Alpine Linux : edge, 3.22, 3.21, 3.20, 3.19, 3.18, 3.17, 3.16, 3.15, 3.14, 3.13, 3.12, 3.11 x86_64 64
Amazon Linux : 2, 2023, 2022 x86_64 64
CentOS: Flux 10, 9 x86_64 64
RHEL 8, 9 x86_64 64
Debian : 12, 11 x86_64 64
Ubuntu : LTS 24.04, 22.04 x86_64 64

La version 1.12.0 et les versions ultérieures du capteur CPP ne prennent plus en charge Debian 10 et Ubuntu 20.04.

Les versions 1.11.0 et ultérieures de CPP Sensor ne prennent plus en charge CentOS 7, CentOS 8, CentOS Stream 8, Alpine 3.10 et RHEL 7.

Versions prises en charge et politique d'assistance

NGINX Le capteur et le traçage d' NGINX s ont des exigences différentes en matière de version et de plateforme. Pour plus d'informations, consultez la section « Versions et plateformes prises en charge d' NGINX ».

Le tableau suivant présente la dernière version prise en charge et la politique d'assistance :

Technologie Politique de support Dernière version technologique Dernière version prise en charge
NGINX 45 jours 1.31.2 1.31.0
NGINX Plus 45 jours 1.29.3 (nginx-plus-r37.0.0) 1.29.8 (nginx-plus-r37.0.0)

Pour plus d'informations sur la politique d'assistance, consultez la section « Stratégie d'assistance pour les capteurs ».

Politique de dépréciation

NGINX Tracer a annoncé l'abandon des versions de Nginx antérieures à 1.24.0 et NGINX, ainsi que des versions de Plus antérieures à R30. Ces versions obsolètes seront prises en charge jusqu'au 1er avril 2027. À l'avenir, Instana mettra hors service les versions d' NGINX s en fin de vie deux ans après leur date officielle de fin de vie. Après le 1er avril 2027, les anciennes versions d' NGINX Tracer resteront disponibles, mais ne bénéficieront plus de mises à jour de maintenance. Pour garantir des performances et une sécurité optimales, effectuez une mise à niveau vers une version prise en charge d' NGINX.

Informations complémentaires sur l'assistance

Les images de conteneurs Docker suivantes sont prises en charge pour le traçage d' NGINX :

Image de conteneur Architecture Nombre de bits
3scale openresty x86_64 64
ingress-nginx ( us.gcr.io/k8s-artifacts-prod/ingress-nginx/controller ) : v0.34.0..v1.13.0 x86_64 64
nginx: alpin, stable-alpin x86_64 64
openresty/openresty Debian x86_64 64

À partir de la version 1.12.0, le capteur CPP ne prend plus en charge les images de openresty/openresty CentOS basedconteneur.

Configuration

Activation de la collecte des métriques

Pour que Instana collecte et surveille automatiquement les processus de votre NGINX, vous devez activer la collecte des métriques comme suit :

Métriques pour NGINX

Pour la collecte de métriques d' NGINX, Instana utilise le module ngx_http_stub_status_module pour la collecte de métriques à distance. Pour activer cette collection, assurez-vous que le module est activé ou disponible, puis ajoutez l'extrait de code suivant au début de votre fichier de configuration ` NGINX ` :

location /nginx_status {
  stub_status  on;
  access_log   off;
  allow 127.0.0.1; # Or the Remote IP of the Instana Host Agent
  deny  all;
}
 

Par défaut, l'agent Instana recherche l'emplacement du fichier de configuration dans tous les arguments de processus disponibles ; sinon, il se replie sur /etc/nginx/nginx.conf.

Remarque : lorsque l'agent « Instana » s'exécute dans un cluster « Kubernetes », veillez à autoriser l'adresse IP de l'hôte sur lequel l'agent est exécuté à l'aide de la allow <host-ip-address> configuration.

Métriques pour NGINX Plus

Pour activer la surveillance des métriques d' NGINX, assurez-vous que le module ngx_http_api_module (*) est installé ou disponible, puis ajoutez le bloc suivant pour activer le module :

location /api {
    api write=off;
    allow 127.0.0.1; # Or the Remote IP of the Instana Host Agent
    deny all;
}
 

Indicateurs pour Ingress d' Kubernetes NGINX

À partir de la version Kubernetes Ingress NGINX 0.23.0, le serveur qui écoutait sur le port 18080 a été désactivé. Pour qu' Instana e puisse surveiller cette instance d' NGINX, restaurez le serveur en ajoutant l'extrait de code suivant à la carte de configuration :

http-snippet: |
  server {
    listen 18080;

    location /nginx_status {
      stub_status on;
      access_log  off;
      allow 127.0.0.1; # Or the Remote IP of the Instana Host Agent
      deny  all;
    }

    location / {
      return 404;
    }
  }
 

Pour plus d'informations, consultez le journal des modifications de l' 0.23.0 Ingress sur NGINX.

Métriques pour les conteneurs Podman NGINX sans privilèges root

Pour collecter les métriques des conteneurs Podman sans privilèges root NGINX, vous devez activer le module de surveillance des métriques et mapper le port d'écoute du serveur NGINX sur le même port de l'hôte où est hébergé le conteneur Podman sans privilèges root. La redirection de ports est nécessaire pour établir une connexion et collecter les métriques requises.

Fréquence de sondage personnalisée

Un agent surveille nativement le capteur « NGINX », et sa configuration est facultative. Vous pouvez utiliser le capteur « NGINX » pour effectuer des interrogations personnalisées.
com.instana.plugin.nginx:
  poll_rate: 1 # values are in seconds. Default value is 1 second.

Désactivation de la collecte des métriques d' NGINX

Pour désactiver la collecte des métriques d' Nginx, supprimez l'extrait de code suivant de votre configuration NGINX :

location /nginx_status {
  stub_status  on;
  access_log   off;
  allow 127.0.0.1; # Or the Remote IP of the Instana Host Agent
  deny  all;
}

Affichage des mesures

Une fois que vous avez suivi les étapes de configuration décrites dans la section « Configuration », vous pouvez consulter les métriques relatives à NGINX dans l'interface utilisateur d' Instana.

Pour afficher les métriques, procédez comme suit:

  1. Dans la barre latérale de l'interface utilisateur d' Instana, sélectionnez « Infrastructure ».
  2. Cliquez sur un hôte surveillé spécifique.

Vous pouvez ensuite voir un tableau de bord hôte avec toutes les métriques collectées et les processus surveillés.

Données de configuration

  • PID
  • Nombre de processus worker
  • Nombre de connexions worker
  • Démarré à
  • Version
  • Génération (*)
  • Adresse (*)
  • Génération (*)
  • PPID (*)

Métriques de performance

  • Demande
  • Connexions
  • Processus (*)
  • SSL (*)
  • Caches (*)
  • Zones de serveur (*)
  • Flux amont (*)

Signatures d'intégrité

Chaque détecteur dispose d'une base de connaissances organisée de signatures de santé qui sont évaluées en continu par rapport aux métriques entrantes et qui sont utilisées pour signaler des problèmes ou des incidents qui dépendent de l'impact sur l'utilisateur.

Les événements intégrés déclenchent des problèmes ou des incidents en cas de non-conformité des signatures de santé des entités, tandis que les événements personnalisés déclenchent des problèmes ou des incidents en fonction des seuils d'une métrique spécifique à une entité donnée.

Pour plus d'informations sur les événements intégrés du capteur « NGINX », consultez la référence sur les événements intégrés.

NGINX traçage (traçage distribué pour l' NGINX )

Configuration de l'Ingress d' NGINX pour l'agent d' Instana

Pour utiliser le traçage d' NGINX, vous devez définir les valeurs de configuration suivantes :

  • Ajoutez les éléments suivants dans le fichier « ConfigMap » pour l'entrée « NGINX » :

      data:
        enable-opentracing: "true"
        zipkin-collector-host: $HOST_IP
        zipkin-collector-port: "42699"
     
  • Ajoutez les variables d'environnement suivantes dans la spécification du pod « NGINX » (celle-ci devrait déjà POD_NAME contenir et POD_NAMESPACE) :

    env:
       - name: HOST_IP
         valueFrom:
         fieldRef:
             fieldPath: status.hostIP
     

Remarques :

  • L' NGINX d'Ingress définit automatiquement les variables d'environnement POD_NAMEPOD_NAMESPACE et. Vous n'avez donc pas besoin d'ajouter les variables d'environnement POD_NAMEPOD_NAMESPACE et à la spécification du pod NGINX.

  • Cette configuration utilise Kubernetes DownwardAPI pour rendre l'adresse IP de l'hôte disponible en tant que variable d'environnement (HOST_IP), et ConfigMap la prend en compte.

  • Le port peut être défini sur 42699, qui est le port de l'agent d' Instana.

  • Le service est nommé nginx par défaut ou doit être remplacé par le paramètre zipkin-service-name, qui peut être configuré dans ConfigMap.

Pour plus d'informations sur Ingress d' NGINX, consultez la documentation d'Ingress d' Kubernetes NGINX.

Traçage distribué pour NGINX, NGINX Plus et OpenResty

Pour installer le suivi « NGINX » dans votre configuration, procédez comme suit :

  1. Téléchargez les fichiers binaires adaptés à votre version d' NGINX.
  2. Copiez les fichiers binaires à un emplacement accessible par votre serveur d' NGINX.
  3. Modifiez les paramètres d' NGINX.
  4. Redémarrez le processus « NGINX » ou provoquez un rafraîchissement de la configuration en envoyant une reload commande

Télécharger les fichiers binaires

Les modules de traçage NGINX HTTP s'appuient sur la dernière nginx-opentracing version du module, avec des adaptations qui offrent davantage de fonctionnalités et facilitent leur utilisation.

Les liens de téléchargement des fichiers binaires d' Instana s pour les distributions prises en charge d' NGINX sont disponibles sur la page « Fichiers binaires de traçage distribué » du site NGINX.

Copiez les fichiers binaires

À partir des fichiers binaires téléchargés et extraits à l'étape précédente, déplacez-les libinstana_sensor.so vers un système de fichiers accessible au processus d' NGINX. Le processus « NGINX » nécessite un droit de lecture sur libinstana_sensor.so.

Si NGINX s'exécute directement sur le système d'exploitation, et non pas dans un conteneur, il convient de copier les deux fichiers binaires Instana dans le dossier qui contient les autres modules NGINX. Pour savoir où NGINX s'attend à ce que les modules se trouvent, exécutez la nginx -V commande et recherchez l'option --modules-path de configuration; voir, par exemple, cette réponse sur StackOverflow.

Dans un environnement conteneurisé, cela peut impliquer de les ajouter à l'image du conteneur ou de monter les fichiers en tant que volumes dans le conteneur; pour plus d'informations, consultez par exemple fixations à visser la documentation de Docker ou le guide pratique monter des volumes sur des pods dans Kubernetes.

Modifier les configurations NGINX

Chaque version prise en charge d' NGINX comporte deux archives ZIP distinctes, l'une pour GLIBC et l'autre pour MUSL. GLIBC convient à toutes les distributions Linux, à l'exception de Alpine, qui nécessite MUSL.

Avant de configurer NGINX comme indiqué ci-dessous, vous devez soit renommer le module téléchargé en modules/ngx_http_opentracing_module.so , soit modifier la ligne de configuration load_module modules/ngx_http_opentracing_module.so; dans le nginx.conf fichier en fonction du nom du module téléchargé. Par exemple, remplacez la ligne de configuration load_module modules/ngx_http_opentracing_module.so; par load_module modules/musl-nginx-1.23.3-ngx_http_ot_module.so;.

# The following line adds the basic module Instana uses to get tracing data.
# It is required that you use the version of this module built by Instana,
# rather than the one shipped in many NGINX distros, as there are some
# modifications in the Instana version that are required for tracing to work
load_module modules/ngx_http_opentracing_module.so;

# Whitelists environment variables used for tracer configuration to avoid
# that NGINX wipes them. This is only needed if instana-config.json
# should contain an empty configuration with "{}" inside to do the
# configuration via these environment variables instead.
env INSTANA_SERVICE_NAME;
env INSTANA_AGENT_HOST;
env INSTANA_AGENT_PORT;
env INSTANA_MAX_BUFFERED_SPANS;
env INSTANA_DEV;

events {}

error_log /dev/stdout info;

http {
  error_log /dev/stdout info;

  # The following line loads the Instana libsinstana_sensor library, that
  # gets the tracing data from ngx_http_opentracing_module.so and converts
  # them to Instana AutoTrace tracing data.
  # The content of instana-config.json is discussed as follows.
  opentracing_load_tracer /usr/local/lib/libinstana_sensor.so /etc/instana-config.json;

  # Propagates the active span context for upstream requests.
  # Without this configuration, the Instana trace will end at
  # NGINX, and the systems downstream (those to which NGINX
  # routes the requests) monitored by Instana will generate
  # new, unrelated traces
  opentracing_propagate_context;

  # Optional: `opentracing_remove_duplication` command enables the
  # removal of the duplication of Server-Timing Header in the NGINX response.
  # This duplication might occur if more than one tracer is involved in the
  # the process chain of a request.
  # The command can be inserted in the following contexts: HTTP, server,
  # location, backend.
  # opentracing_remove_duplication on;

  # Optional: This logs subrequests like e.g. created by the `auth_request`
  # directive so that authorization requests can be traced.
  log_subrequest on;

  # If you use upstreams, Instana will automatically use them as endpoints,
  # and it is really cool :-)
  upstream backend {
    server server-app:8080;
  }

  server {
    error_log /dev/stdout info;
    listen 8080;
    server_name localhost;

    location /static {
      root /www/html;
    }

    location ^~ /api {
      proxy_pass http://backend;
    }

    location ^~ /other_api {
      proxy_set_header X-AWESOME-HEADER "truly_is_awesome";

      # Using the `proxy_set_header` directive voids for this
      # location the `opentracing_propagate_context` defined
      # at the `http` level, so here it needs to be set again.
      # It needs to be set for every block where `proxy_set_header`
      # is found. This can also be the case at `server` level.
      opentracing_propagate_context;

      proxy_pass http://backend;
    }
  }
}
 

Cas spécial opentracing_propagate_context :

Outre le niveau principal (http), la directive opentracing_propagate_context doit être ajoutée pour chaque bloc (server ou location) dans lequel une directive proxy_set_header est également définie. La raison est que la propagation du contexte OpenTracing est basée sur proxy_set_header en interne et qu'elle devient nulle par ailleurs. Il s'agit d'une limitation de l'API du module NGINX.

Voici un exemple de fichier instana-config.json :

{
  "service": "nginxtracing_nginx", # Change this line to give your NGINX service a different name in Instana
  "agent_host": <host_agent_address>, # Change this line with the IP address or DNS name of the Instana agent on the same host as your NGINX process
  "agent_port": 42699, # This is the default, and you should never change it unless instructed by the Instana support
  "max_buffered_spans": 1000
}
 

Les paramètres indiqués dans l'extrait ci-dessus ont la signification suivante :

  • service : nom qui sera associé au système de back-end Instana avec ce processus NGINX. Si le nom de service n'est pas spécifié, le nom de service est automatiquement généré. Pour plus d'informations, consultez la rubrique « Services ».
  • agent_host : adresse IP ou nom DNS de l'agent hôte local. Vous devez modifier cette configuration pour qu'elle corresponde au nom de réseau de l'agent Instana sur le même hôte que le processus NGINX.
  • agent_port : port sur lequel l'extension de traçage NGINX tentera de contacter l'agent hôte. Notez que ce port n'est pas configurable côté agent. L'extension de traçage NGINX vous permet de le configurer en cas de paramètres nécessitant un transfert ou un mappage de port.
  • max_buffered_spans : nombre maximal d'étendues, une par demande, que l'extension de traçage NGINX conservera localement avant de envoyer vers l'agent. La valeur par défaut est 1000. L'extension de traçage NGINX vide toujours les étendues figurant dans la mémoire tampon locale toutes les secondes. Ce paramètre vous permet de réduire la quantité de mémoire tampon locale lorsque votre serveur NGINX traite plus de 1000 demandes par seconde et que vous souhaitez réduire l'encombrement de mémoire de ce serveur en vidant plus rapidement les données de trace.

L'autre solution consiste à configurer le traceur via des variables d'environnement. Ces dernières sont prioritaires, mais le fichier instana-config.json est toujours requis. Par conséquent, procédez comme suit :

  • Insérez une configuration vide {} dans instana-config.json
  • Ajouter les variables d'environnement à la liste blanche dans la configuration d' NGINX
  • Définissez les variables d'environnement avant de démarrer NGINX

Cette méthode est particulièrement utile pour définir l'hôte de l'agent Instana avec l'adresse IP dans un cluster Kubernetes.

L'exemple suivant de déploiement de fichier de déploiement YAML Kubernetes illustre cette méthode :

        env:
        - name: INSTANA_SERVICE_NAME
          value: "nginxtracing_nginx"
        - name: INSTANA_AGENT_HOST
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
 

Pour plus d'informations, consultez la référence sur les variables d'environnement.

Prise en charge du contexte de trace d' W3C

La prise en charge de la propagation des en-têtes de contexte de trace d' W3C est disponible depuis la version NGINX de Tracer 1.8.0.

Prise en charge d'autres générations de modules NGINX OpenTracing

L'utilisation de versions du module NGINX OpenTracing provenant de tiers, y compris celles prises en charge par NGINX lui-même, n'est pas prise en charge. Les raisons pour lesquelles il est nécessaire d'utiliser la version « Instana » du module NGINX OpenTracing sont d'ordre technique : la compilation par l'utilisateur (c'est-à-dire la création de votre propre version) n'est pas prise en charge, car cela imposerait une charge excessive au support de Instana, qui devrait alors tenter de déterminer ce qui ne fonctionne pas dans le processus de compilation au sein de configurations totalement différentes et imprévisibles; de même, les modules fournis par F5 ne sont pas pris en charge, car ils ne disposent pas des fonctionnalités requises par le traçage de Instana et utilisent une liaison dynamique avec la bibliothèque standard C++, ce qui entraînerait dans de nombreux cas des erreurs de segmentation. En effet, pour éviter les erreurs de segmentation, le module Instana NGINX OpenTracing est compilé avec une bibliothèque standard C++ liée statiquement, afin d'uniformiser les tests et de permettre l'utilisation du code moderne de C++ même sur des distributions plus anciennes.

Traces pour les conteneurs « rootless » d' NGINX Podman

Pour collecter les traces provenant d' NGINX s s'exécutant dans des conteneurs sans accès root Podman, vous devez vous assurer que la communication est maintenue entre l'agent Instana et le réseau sans accès root Podman.

Configuration de serverless-tracing pour NGINX

Pour configurer le traçage sans serveur pour l' NGINX, procédez comme suit :

  1. Téléchargez les fichiers binaires d' Instana s pour le traçage sans serveur, en fonction de la version d' NGINX dont vous disposez. Les modules de traçage de l' NGINX HTTP s'appuient sur le nginx-opentracing module. La variante « Instana » a été personnalisée pour offrir une meilleure ergonomie, des corrections de bogues spécifiques et davantage de fonctionnalités. Pour les fichiers binaires d' Instana, consultez la page « Fichiers binaires de traçage distribué » à l'adresse NGINX.

  2. Copier les fichiers binaires pour serverless-tracing :

    1. À partir des fichiers binaires téléchargés et extraits à l'étape 1, sélectionnez la variante OpenSSL du module " libinstana_sensor.so en fonction de la version. Récupérez la version d'OpenSSL en utilisant la commande 'openssl version. Un exemple de sortie d'OpenSSL 3.0.2 est présenté dans l'exemple suivant :

      # openssl version
      OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
       

      Pour OpenSSL 3.x.x, sélectionnez le module " libinstana_sensor_ssl3x.so.

      • Un exemple de sortie d'OpenSSL 1.1.1f est présenté dans l'exemple suivant :

        # openssl version
        OpenSSL 1.1.1f  31 Mar 2020
         

        Pour OpenSSL 1.1.x, sélectionnez le module " libinstana_sensor_ssl1.1x.so.

    2. Placez-le sur un système de fichiers accessible au processus « NGINX ». Le processus « NGINX » nécessite un droit de lecture sur libinstana_sensor.so.

    3. Si NGINX s'exécute directement sur le système d'exploitation hôte, et non dans un conteneur, copiez les deux binaires Instana dans le répertoire contenant les autres modules d' NGINX.

    4. Déterminez l'emplacement dans lequel NGINX recherche les modules, exécutez la nginx -V commande et recherchez l'option --modules-path de configuration.

    5. Effectuez l'une des étapes suivantes :

  3. Définissez les variables d'environnement.

    1. Recherchez le fichier de service « NGINX » qui apparaît dans la sortie de la systemctl show -p FragmentPath nginx commande. Un exemple de sortie est présenté dans l'exemple suivant :

      # systemctl show -p FragmentPath nginx
      FragmentPath=/lib/systemd/system/nginx.service
       
    2. Dans le fichier de service d' NGINX, ajoutez les variables d'environnement INSTANA_ENDPOINT_URL et INSTANA_AGENT_KEY dans la Service section. Pour plus d'informations sur les variables d'environnement, consultez la section « Variables d'environnement pour la surveillance sans serveur ».

    3. Remplacez " INSTANA_ENDPOINT_URL et " INSTANA_AGENT_KEY par les valeurs réelles, comme indiqué dans l'exemple suivant :

      [Service]
      Environment="INSTANA_ENDPOINT_URL=https://XXX.instana.io/serverless/"
      Environment="INSTANA_AGENT_KEY=*****"
       
  4. Modifiez la configuration d' NGINX pour le traçage sans serveur :

    1. Renommez " libinstana_sensor_ssl1.1x.so ou " libinstana_sensor_ssl3x.so en " libinstana_sensor.so ou mettez à jour la ligne " opentracing_load_tracer /usr/local/lib/libinstana_sensor.so /etc/instana-config.json; dans le fichier " nginx.conf en fonction du nom du module extrait requis.

    2. Ajoutez les lignes 'env INSTANA_ENDPOINT_URL; et 'env INSTANA_AGENT_KEY; dans le fichier 'nginx.conf pour autoriser ces variables d'environnement.

      # The following line adds the basic module Instana uses to get tracing data.
      # It is required that you use the version of this module built by Instana,
      # rather than the one shipped in many NGINX distros, as there are some
      # modifications in the Instana version that are required for tracing to work
      load_module modules/ngx_http_opentracing_module.so;
      
      # Whitelists environment variables used for tracer configuration to avoid
      # that NGINX wipes them. This is only needed if instana-config.json
      # should contain an empty configuration with "{}" inside to do the
      # configuration via these environment variables instead.
      env INSTANA_SERVICE_NAME;
      env INSTANA_AGENT_HOST;
      env INSTANA_AGENT_PORT;
      env INSTANA_MAX_BUFFERED_SPANS;
      env INSTANA_DEV;
      # Serverless tracing:
      env INSTANA_ENDPOINT_URL;
      env INSTANA_AGENT_KEY;
      
      events {}
      
      error_log /dev/stdout info;
      
      http {
      error_log /dev/stdout info;
      
      # The following line loads the Instana libsinstana_sensor library, that
      # gets the tracing data from ngx_http_opentracing_module.so and converts
      # them to Instana AutoTrace tracing data.
      # The content of instana-config.json is discussed as follows.
      opentracing_load_tracer /usr/local/lib/libinstana_sensor.so /etc/instana-config.json;
       
  5. Redémarrez le processus « NGINX » ou provoquez un rechargement de la configuration en exécutant la reload commande.

Suivi distribué pour l' NGINX, disponible sur Kubernetes et Red Hat OpenShift

Le webhook Instana AutoTrace permet de configurer automatiquement le traçage distribué pour NGINX sur Kubernetes et Red Hat OpenShift, avec les restrictions suivantes :

  • Instana AutoTrace Webhook ne prend en charge que la version NGINX 1.19 ou une version ultérieure.
  • Instana AutoTrace Le webhook ne prend pas encore en charge l' OpenResty.
  • Instana AutoTrace Webhook ne prend pas en charge l'utilisation d'un ConfigMap avec NGINX en mode autonome.

Pour plus d'informations, consultez la section « Activation de l'instrumentation des webhooks pour NGINX et ingress-nginx ».

Traçage distribué pour Ingress d' Kubernetes NGINX

Le webhook Instana AutoTrace permet de configurer automatiquement le traçage distribué pour les points d'entrée NGINX et NGINX sur Kubernetes et Red Hat OpenShift. Le webhook intègre automatiquement les extraits de configuration et les binaires de traçage mentionnés précédemment dans la configuration des conteneurs NGINX et Ingress NGINX lorsque la fonctionnalité de traçage automatique pour NGINX est activée.

Traçage distribué pour Ingress d' Kubernetes NGINX avec Zipkin Tracer

L'interface d'entrée Kubernetes NGINX permet le traçage distribué via le projet OpenTracing. Comme l'agent Instana est capable d'ingérer également des traces Jaeger et Zipkin, il est possible de configurer NGINX Ingress de sorte que les traces soient transmises à Instana.

Remarque : Bien que cette configuration soit prise en charge, Instana ne pourra pas reprendre le contexte de trace à partir de traces OpenTracing, ce qui signifie que la perspective est limitée aux seules étendues NGINX présentées isolément. Ce n'est que lorsque tous les services sont tracés via OpenTracing que le contexte est conservé et qu'Instana affiche la trace distribuée complète.
Remarque : Nécessite nginx-ingress version 0.23.0 ou ultérieure. Les versions antérieures ne prennent pas en charge l'expansion de variables.

Désactivation du traçage d' NGINX

Pour désactiver le traçage d' NGINX, supprimez les directives load_module, opentracing_load_traceropentracing_propagate_context , et, ainsi que les variables d'environnement liées à Instana, telles que INSTANA_SERVICE_NAME ou INSTANA_AGENT_HOST, du fichier de configuration d' NGINX. De plus, supprimez les bibliothèques de traçage et le instana-config.json fichier du répertoire correspondant.

load_module modules/ngx_http_opentracing_module.so;

env INSTANA_SERVICE_NAME;
env INSTANA_AGENT_HOST;
env INSTANA_AGENT_PORT;
env INSTANA_MAX_BUFFERED_SPANS;
env INSTANA_DEV;

opentracing_load_tracer /usr/local/lib/libinstana_sensor.so /etc/instana-config.json;

opentracing_propagate_context;

Nginx Exemple de traçage

Instana met à disposition un référentiel public permettant de tester la fonctionnalité de traçage d'un capteur Nginx. Pour plus d'informations, voir nginx-tracing.

Traitement des incidents

Rechercher des journaux

Le traceur « Instana » envoie ses lignes de journal vers la sortie d'erreur standard de « NGINX ». Ces lignes ont le préfixe [lis].

En cas d'auto-instrumentation avec le webhook « autotrace-mutating-webhook », utilisez les journaux des fichiers binaires impliqués dans l'auto-traçage d' NGINX pour résoudre un problème. Vous pouvez également transmettre ces journaux au service d'assistance d' IBM afin d'obtenir des informations plus détaillées et un meilleur contexte. Deux fichiers binaires interviennent dans l'instrumentation automatique : une bibliothèque libinstana_init et un exécutable watcher_nginx.

  • Le fichier journal de libinstana_sensor se trouve dans /tmp/instana/lii_logs/$PID.log.
  • Le fichier journal de watcher_nginx se trouve dans /tmp/instana/iwn_logs/$PID.log.

$PID représente l'ID de processus du processus impliqué.

Le niveau de journalisation est défini sur error par défaut. Pour déployer NGINX avec un niveau de journalisation différent, modifiez ce niveau en configurant les variables d'environnement.

Pour la bibliothèque libinstana_init , définissez la variable d'environnement suivante:

INSTANA_LII_LOG_LEVEL=debug
 

Pour l'exécutable watcher_nginx , définissez la variable d'environnement suivante:

INSTANA_IWN_LOG_LEVEL=debug
 

Vous trouverez les avertissements et les erreurs du capteur « NGINX » dans les journaux du service de l'agent « Instana ». Pour afficher les dernières entrées de journal, exécutez la commande suivante:

systemctl status instana-agent
 

Pour afficher le journal complet du service de l'agent d' Instana, exécutez la commande suivante :

sudo journalctl -xeu instana-agent.service
 

L'API NGINX n'est pas accessible

Type de problème de surveillance : nginx_api_not_accessible

Pour résoudre ce problème, suivez les étapes décrites dans la section « Activation de la collecte des métriques » afin de configurer l'agent Instana pour qu'il collecte toutes les métriques d' NGINX.

Le noeud final de statut NGINX n'est pas accessible

Type de problème de surveillance : nginx_status_not_accessible

Pour résoudre ce problème, suivez les étapes décrites dans la section « Activation de la collecte des métriques » afin de configurer l'agent Instana pour qu'il collecte toutes les métriques d' NGINX.

API NGINX introuvable

Type de problème de surveillance : nginx_api_not_found

Pour résoudre ce problème, suivez les étapes décrites dans la section « Activation de la collecte des métriques » afin de configurer l'agent Instana pour qu'il collecte toutes les métriques d' NGINX.

Statut NGINX introuvable

Type de problème de surveillance : nginx_status_not_found

Pour résoudre ce problème, suivez les étapes décrites dans la section « Activation de la collecte des métriques » afin de configurer l'agent Instana pour qu'il collecte toutes les métriques d' NGINX.

Emplacement de configuration NGINX non reconnu

Type de problème de surveillance : nginx_config_location_not_discovered

Pour résoudre ce problème, suivez les étapes décrites dans la section « Activation de la collecte des métriques » afin de configurer l'agent Instana pour qu'il collecte toutes les métriques d' NGINX.

La traçabilité est interrompue pour le code Lua d' OpenResty

Problème : les requêtes d' HTTP s personnalisées émises à partir du code Lua ne peuvent pas être tracées automatiquement.

$http_traceparentSolution : Pour garantir la continuité de la trace, l'en-tête « W3Ctraceparent » de la requête sortante doit être propagé à partir de la variable « NGINX » correspondante. NGINX Tracer met automatiquement à jour l'identifiant de segment.

Modifiez votre code client HTTP Lua, tel que lua-resty-http, pour inclure la sortie traceparent en-tête de ngx.var.http_traceparent si l'en-tête n'est pas déjà défini et que la variable NGINX est disponible. Pour plus d'informations, consultez le PR 340 de lua-resty-http, le fichier README de lua-resty-http, le fichier README de ngx_core_module et le fichier README de lua-nginx-module.

Voir l'exemple de code Lua suivant:

local http = require "resty.http"
local http_c = http.new()
local response, error = http_c:request_uri(request_url, {
    method = "GET",
})

Ce code peut rester inchangé si la lua-resty-http fonction send_request() (par exemple, située à /usr/local/openresty/luajit/share/lua/5.1/resty/http.lua) est modifiée comme suit :

--- a/http.lua
+++ b/http.lua
@@ -738,6 +738,10 @@ function _M.send_request(self, params)
     if params.version == 1.0 and not headers["Connection"] then
         headers["Connection"] = "Keep-Alive"
     end
+    -- OpenTelemetry support with NGINX tracer in propagation mode
+    if not headers["traceparent"] and ngx.var.http_traceparent then
+        headers["traceparent"] = ngx.var.http_traceparent
+    end

     params.headers = headers
 
Attention : vérifiez d'abord la licence de ce code. Ne modifiez pas le code propriétaire, tel que lua-resty-http-fast.

Si votre client d' HTTP s Lua est propriétaire et ne prend pas en charge cette fonctionnalité, utilisez la solution de secours suivante :

local http = require "resty.http"
local http_c = http.new()
local req_headers = {}
if ngx.var.http_traceparent then
    req_headers["traceparent"] = ngx.var.http_traceparent
end
local response, error = http_c:request_uri(request_url, {
    method = "GET",
    headers = req_headers,
})
Remarque : supprimez les solutions de contournement précédemment mises en place pour définir X-INSTANA-T/-S/-L les en-têtes dans votre code Lua.

Resty HTTP sans tracé

Problème : le capteur « NGINX » détecte un lua-resty-http fichier http.lua qui n'est pas ngx.var.http_traceparent pris en charge.

Solution : appliquez le lua-resty-http correctif décrit dans la section précédente de la documentation et supprimez les solutions de contournement précédemment mises en place pour définir X-INSTANA-T/-S/-L les en-têtes dans votre code Lua.

SELinux empêche le processus « NGINX » de charger le module « OpenTracing »

Problème : les appels vers NGINX ne sont pas tracés, et le fichier d'erreurs NGINX affiche l'erreur suivante :

/etc/nginx/modules/ngx_http_opentracing_module.so: failed to map segment from shared object: Permission denied

Solution : SELinux empêche le processus « NGINX » de lire et de mapper la mémoire du module « OpenTracing », qui est un objet partagé. Pour vérifier que SELinux est responsable de l'erreur, vous pouvez effectuer un test de fumée comme suit:

  1. Désactiver SELinux momentanément
  2. Redémarrer l' NGINX

En désactivant SELinux et en redémarrant NGINX, le message d'erreur disparaît du journal d'erreurs d' NGINX, ce qui permet à Instana de tracer les appels.

La désactivation de SELinux n'est pas une solution à long terme. Une approche correcte et sûre consiste à créer une politique SELinux qui autorise le processus ` NGINX ` à lire et à mapper la mémoire à partir du module ` OpenTracing `. Vous pouvez trouver le module « OpenTracing » dans le répertoire de configuration « NGINX ». Si le répertoire de configuration d' NGINX est /etc/nginx, alors le module se trouve dans le /etc/nginx/modules répertoire. Votre service d' DevOps s ou informatique doit configurer SELinux. Pour plus d'informations, consultez les ressources en ligne suivantes qui décrivent la configuration de SELinux pour certaines distributions d' Linux s prises en charge par Instana :

Pour plus d'informations sur l'intégration d' NGINX s et de SELinux, consultez les pages « Utilisation d' NGINX s » et « NGINX Plus avec SELinux ».

OpenTracing La propagation du contexte ne fonctionne pas pour FastCGI

Problème : la propagation du contexte d' OpenTracing ne fonctionne pas pour FastCGI, configuré dans NGINX.

Solution: Remplacez la directive opentracing_propagate_context par la directive opentracing_fastcgi_propagate_context dans chaque bloc de configuration FastCGI .

NGINX La fonctionnalité « autotracing » ne fonctionne pas dans OpenShift restricted-v2

nginx:1.24.0Problème : certaines images d' NGINX, telles que l'image docker.io, ne sont pas compatibles avec les environnements OpenShift qui utilisent le contexte de sécurité restricted-v2.

Raison :

OpenShift restricted-v2 Ces environnements présentent les limitations suivantes :

  • 0Autorisations d'écriture de groupe manquantes : le processus « NGINX » s'exécute sous un utilisateur standard (non root) (par exemple, ID 1000650000 utilisateur et ID groupe ). Par conséquent, tous les fichiers et répertoires devant être modifiés doivent disposer de droits d'écriture pour le groupe. Cela inclut le /etc/nginx/nginx.conf fichier, qui est modifié par le watcher_nginx composant d'autotracing.

  • L'escalade des privilèges est bloquée : OpenShift Les environnements restricted-v2 n'autorisent pas l'escalade des privilèges. Étant donné que le pod « NGINX » s'exécute déjà sous un utilisateur standard, la directive user nginx; « NGINX » qui génère un identifiant 101 utilisateur doit être supprimée de la configuration de « NGINX ».

  • Toutes les fonctionnalités d' Linux s sont désactivées : par conséquent, l'écoute sur des ports inférieurs à 1024, comme le port 80, entraîne une erreur bind() error 13: permission denied en raison de l'absence de CAP_NET_BIND_SERVICE.

Solution : Pour garantir le bon fonctionnement du traçage automatique d' NGINX :

  • Accordez des droits d'écriture au groupe pour chmod -R g+w les données d'exécution et nginx.conf.
  • userÉvitez la directive ` NGINX `.
  • Évitez d'utiliser des ports inférieurs à 1024.

Limitations connues

  • Les données de traçage collectées par le traceur NGINX ne contiennent pas de traces de pile dans les détails des intervalles. La raison en est que le traceur NGINX est un capteur C / C++ et qu'il n'existe actuellement aucune initiative visant à intégrer les traces de pile pour les outils C / C++. Pour obtenir des données pertinentes, ce type de traçage nécessite l'installation de tous les paquets de débogage des bibliothèques utilisées par une application C / C++. Toutefois, ces packages ne sont généralement pas installés dans un environnement de production.