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

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.
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
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:
- Dans la barre latérale de l'interface utilisateur d' Instana, sélectionnez « Infrastructure ».
- 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_NAMEcontenir etPOD_NAMESPACE) :env: - name: HOST_IP valueFrom: fieldRef: fieldPath: status.hostIP
Remarques :
L' NGINX d'Ingress définit automatiquement les variables d'environnement
POD_NAMEPOD_NAMESPACEet. Vous n'avez donc pas besoin d'ajouter les variables d'environnementPOD_NAMEPOD_NAMESPACEet à 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é
nginxpar défaut ou doit être remplacé par le paramètrezipkin-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 :
- Téléchargez les fichiers binaires adaptés à votre version d' NGINX.
- Copiez les fichiers binaires à un emplacement accessible par votre serveur d' NGINX.
- Modifiez les paramètres d' NGINX.
- Redémarrez le processus « NGINX » ou provoquez un rafraîchissement de la configuration en envoyant une
reloadcommande
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 est1000. 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 de1000demandes 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
{}dansinstana-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.
Redémarrer ou actualiser
Redémarrez le processus « NGINX » ou déclenchez un rafraîchissement de la configuration en envoyant une reload commande.
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 :
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-opentracingmodule. 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.Copier les fichiers binaires pour serverless-tracing :
À partir des fichiers binaires téléchargés et extraits à l'étape 1, sélectionnez la variante OpenSSL du module "
libinstana_sensor.soen 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 2020Pour OpenSSL 1.1.x, sélectionnez le module "
libinstana_sensor_ssl1.1x.so.
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.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.
Déterminez l'emplacement dans lequel NGINX recherche les modules, exécutez la
nginx -Vcommande et recherchez l'option--modules-pathde configuration.Effectuez l'une des étapes suivantes :
- Dans un environnement conteneurisé, ajoutez ces fichiers à l'image du conteneur ou montez-les en tant que volumes dans votre conteneur.
- Pour les points de montage d' docker, consultez la page Docker consacrée aux montages liés.
- Pour plus d' Kubernetes s, consultez la section « Monter des volumes dans des pods » sur Kubernetes.
Définissez les variables d'environnement.
Recherchez le fichier de service « NGINX » qui apparaît dans la sortie de la
systemctl show -p FragmentPath nginxcommande. Un exemple de sortie est présenté dans l'exemple suivant :# systemctl show -p FragmentPath nginx FragmentPath=/lib/systemd/system/nginx.serviceDans le fichier de service d' NGINX, ajoutez les variables d'environnement
INSTANA_ENDPOINT_URLetINSTANA_AGENT_KEYdans laServicesection. Pour plus d'informations sur les variables d'environnement, consultez la section « Variables d'environnement pour la surveillance sans serveur ».Remplacez "
INSTANA_ENDPOINT_URLet "INSTANA_AGENT_KEYpar les valeurs réelles, comme indiqué dans l'exemple suivant :[Service] Environment="INSTANA_ENDPOINT_URL=https://XXX.instana.io/serverless/" Environment="INSTANA_AGENT_KEY=*****"
Modifiez la configuration d' NGINX pour le traçage sans serveur :
Renommez "
libinstana_sensor_ssl1.1x.soou "libinstana_sensor_ssl3x.soen "libinstana_sensor.soou mettez à jour la ligne "opentracing_load_tracer /usr/local/lib/libinstana_sensor.so /etc/instana-config.json;dans le fichier "nginx.confen fonction du nom du module extrait requis.Ajoutez les lignes '
env INSTANA_ENDPOINT_URL;et 'env INSTANA_AGENT_KEY;dans le fichier 'nginx.confpour 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;
Redémarrez le processus « NGINX » ou provoquez un rechargement de la configuration en exécutant la
reloadcommande.
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.
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.
où $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
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,
})
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:
- Désactiver SELinux momentanément
- 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, ID1000650000utilisateur 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.conffichier, qui est modifié par lewatcher_nginxcomposant 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 identifiant101utilisateur 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 denieden raison de l'absence deCAP_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+wles données d'exécution etnginx.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.