Intégration d' OpenTelemetry à Instana pour NGINX
Vous pouvez utiliser OpenTelemetry avec NGINX et IBM Instana Observability pour activer le traçage distribué et l'observabilité de votre serveur web NGINX.
Systèmes d'exploitation pris en charge
OpenTelemetry L'intégration est prise en charge et testée uniquement sur les systèmes d'exploitation d' Linux.
Prérequis
Pour intégrer OpenTelemetry à Instana, vous avez besoin des composants suivants :
- NGINX serveur web (la version 1.25.3 ou une version ultérieure est recommandée; les versions antérieures nécessitent de compiler le module NGINX OpenTelemetry à partir du code source)
- OpenTelemetry NGINX module ou instrumentation
- Un compte Observability actif sur IBM Instana
Installation du module « OpenTelemetry » NGINX
Le module officiel NGINX OpenTelemetry (ngx_otel_module) est disponible sous forme de module dynamique. Pour plus d'informations sur ce module, consultez la documentation du module NGINX OpenTelemetry.
Installez le module NGINX OpenTelemetry.
Pour la plupart des distributions d' Linux, vous pouvez installer le module à partir du dépôt NGINX :
# For Ubuntu or Debian sudo apt-get install nginx-module-otel # For RHEL or CentOS sudo yum install nginx-module-otelVous pouvez également compiler NGINX à partir du code source à l'aide du module OpenTelemetry. Pour obtenir des instructions de compilation, consultez la documentation d' NGINX.
Configurez ` NGINX ` pour charger le module ` OpenTelemetry ` en ajoutant la ligne suivante au début de votre nginx.conf fichier :
load_module modules/ngx_otel_module.so;
Configuration d' NGINX avec OpenTelemetry
Une fois le module OpenTelemetry NGINX installé, configurez votre serveur NGINX pour qu'il envoie des données OpenTelemetry. La structure de configuration de base comprend les directives suivantes :
| Directive de configuration | Description |
|---|---|
otel_exporter |
Définit le point de terminaison OTLP vers lequel les traces sont envoyées |
otel_service_name |
Nom logique du service pour la corrélation de l'infrastructure (Pour plus d'informations, voir « Corrélation de l'infrastructure ».) |
otel_trace |
Active ou désactive le suivi d' OpenTelemetry |
otel_trace_context |
Configure la propagation du contexte de trace |
Propagation du contexte de trace
Le module natif NGINX OpenTelemetry utilise la norme W3C Trace Context pour le traçage distribué. Le module transmet le contexte de trace à l'aide des en-têtes standard d' HTTP s suivants :
traceparent- Contient l'identifiant de la trace, l'identifiant du segment parent et les indicateurs de tracetracestate- Contient des informations de traçabilité propres au fournisseur
Le module ne prend pas en charge les en-têtes spécifiques à l' Instana pour la propagation des traces :
X-Instana-T(Identifiant de trace)X-Instana-S(ID de la plage)X-Instana-L(Niveau d'échantillonnage ou décision)
Lorsque NGINX reçoit des requêtes comportant des en-têtes « W3C » dans le contexte de traçage, il poursuit automatiquement la traçabilité. Lorsque NGINX envoie des requêtes en amont, il transmet le contexte de traçage en utilisant les mêmes en-têtes standard de l' W3C.
Configuration de l'intégration d' OpenTelemetry
Vous pouvez utiliser l'une des options suivantes pour intégrer OpenTelemetry à Instana :
- Instana Déploiement du collecteur OpenTelemetry ( IDOT ) : utilisez le collecteur OpenTelemetry géré par Instana pour recevoir et traiter les données OpenTelemetry.
- Instana OTLP Points de terminaison : Configurez l'exportateur OpenTelemetry OTLP pour qu'il envoie les données OpenTelemetry directement à l'agent Instana ou aux points de terminaison Instana backend OTLP.
Option 1 : Utilisation d'une distribution « Instana » du collecteur « OpenTelemetry »
La distribution « Instana » du collecteur OpenTelemetry ( IDOT ) est une version entièrement gérée et préconfigurée du collecteur OpenTelemetry qui s'intègre de manière transparente à la plateforme d'observabilité Instana.
Pour collecter des données de télémétrie à partir de votre serveur NGINX, suivez les étapes suivantes pour installer et configurer IDOT :
- Installez le collecteur. Déployez la distribution « Instana » d' OpenTelemetry Collector en tant que sidecar, démon ou passerelle, en fonction des besoins de votre infrastructure. Pour obtenir des instructions détaillées sur la configuration du collecteur « IDOT », consultez la documentation intitulée « Instana Distribution of OpenTelemetry Collector ».
Configurez votre serveur NGINX pour qu'il envoie les données d' OpenTelemetry s au point de collecte IDOT (port par défaut : 24317) :
http { otel_exporter { endpoint localhost:24317; } otel_service_name nginx_service; otel_trace on; server { listen 80; server_name example.com; location / { otel_trace_context propagate; # Backend refers to the upstream application server(s) that NGINX forwards requests to proxy_pass http://backend; } } }
Option 2 : Utilisation des points de terminaison Instana et OTLP
Vous pouvez intégrer OpenTelemetry à NGINX en configurant l'exportateur OpenTelemetry Protocol ( OTLP ) pour qu'il envoie les traces OpenTelemetry directement à l'agent Instana ou au backend Instana.
Envoi de données vers le point de terminaison de l'agent OTLP
L'agent « Instana » fournit des points de terminaison « OTLP » capables de recevoir des données « OpenTelemetry » directement depuis votre serveur « NGINX ».
Pour envoyer des données au point de terminaison OTLP de l'agent d' Instana, configurez votre serveur NGINX comme suit :
http {
otel_exporter {
endpoint localhost:4317;
}
otel_service_name your_service_name;
otel_trace on;
server {
listen 80;
location / {
otel_trace_context propagate;
proxy_pass http://backend;
}
}
}
Envoi de données vers le point de terminaison backend OTLP
Dans les environnements où une communication directe avec l'agent d' Instana s n'est pas possible, vous pouvez configurer votre serveur NGINX pour qu'il envoie les données d' OpenTelemetry directement au backend Instana.
Pour plus d'informations, consultez la section « Envoi de données d' OpenTelemetry vers Instana ».
Pour envoyer des données au point de terminaison OTLP du backend Instana, configurez votre serveur NGINX comme suit :
http {
otel_exporter {
endpoint https://{instana-backend-otlp-acceptor-endpoint}:4317;
headers x-instana-key={agent-key};
}
otel_service_name your_service_name;
otel_trace on;
server {
listen 80;
location / {
otel_trace_context propagate;
proxy_pass http://backend;
}
}
}
Remplacez {instana-backend-otlp-acceptor-endpoint} par votre point de terminaison backend Instana et {agent-key} par votre clé d'agent Instana.
Déploiement d'un contrôleur Ingress d' NGINX avec OpenTelemetry sur Kubernetes
Pour les environnements Kubernetes, vous pouvez déployer le contrôleur d'entrée NGINX avec prise en charge OpenTelemetry en utilisant Helm. Ce déploiement vous permet d'instrumenter automatiquement tout le trafic entrant à l'aide de la traçabilité distribuée.
--set autotrace.ingress_nginx.enabled=false de l'installation ou de la mise à jour de l'agent Instana.Conditions préalables au déploiement d' Kubernetes
Assurez-vous que la configuration prérequise suivante est respectée :
- Kubernetes cluster (par exemple, Minikube, EKS, GKE ou AKS )
- Helm 3.x installé
- kubectl configuré pour accéder à votre cluster
- Instana point de terminaison d' OTLP du backend et clé d' API
Installation d'Ingress-Nginx avec OpenTelemetry
Ajoutez le dépôt Helm d'Ingress-Nginx :
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo updateCréez un fichier de paramètres « Helm » (par exemple, ingress-nginx-values.yaml) contenant la configuration suivante : OpenTelemetry
controller: config: http-snippet: | otel_exporter { endpoint https://{instana-backend-otlp-endpoint}:4317; header x-instana-key "{agent-key}"; } otel_service_name "{your-service-name}"; otel_resource_attr "service.namespace" "ingress-nginx"; otel_resource_attr "k8s.cluster.name" "{your-cluster-name}"; main-snippet: | load_module /etc/nginx/modules/ngx_otel_module.so; otel-span-attr: | http.request_id $request_id k8s.namespace $namespace k8s.ingress.name $ingress_name k8s.service.name $service_name otel-trace: "on" otel-trace-context: propagate image: digest: "" image: ingress-nginx-otel pullPolicy: Never registry: docker.io/library tag: "{version}"Remplacez les valeurs suivantes dans la configuration :
- {instana-backend-otlp-endpoint} - L'URL de votre point de terminaison backend OTLP d' Instana (par exemple, otlp-red-saas.instana.io )
- {agent-key} - Votre clé d'agent d' Instana
- {your-cluster-name} - Le nom de votre cluster Kubernetes
- {your-service-name} - Le nom de votre service
- {version} - La version de l'image ingress-nginx prenant en charge l' OpenTelemetry
- Paramètres d'image - Configurez-les en fonction de votre registre et de vos besoins en matière d'images
Installez le contrôleur ingress-nginx en utilisant les valeurs personnalisées suivantes :
helm install ingress-nginx ingress-nginx/ingress-nginx \ --namespace ingress-nginx \ --create-namespace \ --values ingress-nginx-values.yamlVérifiez l'installation :
kubectl get pods -n ingress-nginx kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx
Options de configuration
Le fichier de paramètres « Helm » comprend plusieurs sections de configuration importantes :
- http-snippet : contient la configuration principale de l'exportateur OpenTelemetry, y compris le point de terminaison Instana et les paramètres d'authentification
- main-snippet : Charge le module OpenTelemetry NGINX
- otel-span-attr : Définit les attributs de span personnalisés qui sont ajoutés à chaque trace, y compris les métadonnées spécifiques à l' Kubernetes
- otel-trace : Active le traçage d' OpenTelemetry
- otel-trace-context : Configure la propagation du contexte de traçage vers les services en aval
Attributs « span » personnalisés
La configuration comprend des attributs propres à Kubernetes qui fournissent des informations contextuelles utiles dans Instana :
| Attribut | Description |
|---|---|
http.request_id |
Identifiant unique pour chaque requête « HTTP » |
k8s.namespace |
Kubernetes espace de noms du service |
k8s.ingress.name |
Nom de la ressource d'entrée |
k8s.service.name |
Nom du service « Kubernetes » |
Ces attributs permettent d'associer les traces à des ressources spécifiques d' Kubernetes s dans l'interface utilisateur d' Instana.
Corrélation d'infrastructure
Cette otel_service_name directive sert à la corrélation d'infrastructure, qui relie les traces de votre application NGINX aux entités d'infrastructure sous-jacentes (hôtes, conteneurs, pods d' Kubernetes et processus) surveillées par Instana.
Lorsque vous configurez otel_service_name, Instana utilise ce nom de service pour effectuer les tâches suivantes :
- Mettre en corrélation les traces d' NGINX s avec les indicateurs d'infrastructure (CPU, mémoire et réseau)
- Dépendances des services de cartographie et relations entre les appels
- Activer la navigation bidirectionnelle entre les vues de l'application et celles de l'infrastructure
- Fournir un contexte complet pour l'analyse des causes profondes
Pour plus d'informations sur la corrélation des infrastructures et l'intégration d' OpenTelemetry, consultez les rubriques suivantes :