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.

  1. 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-otel

    Vous pouvez également compiler NGINX à partir du code source à l'aide du module OpenTelemetry. Pour obtenir des instructions de compilation, consultez la documentation d' NGINX.

  2. 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 :

Tableau 1. NGINX OpenTelemetry directives de configuration
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 trace
  • tracestate - 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 :

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 :

  1. 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 ».
  2. 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.

Important : si le webhook Instana AutoTrace est installé dans votre cluster, vous devez le désactiver pour ingress-nginx afin d'éviter tout conflit avec le module natif OpenTelemetry. Vous pouvez désactiver la fonctionnalité « AutoTrace » pour ingress-nginx en configurant l'option correspondante lors --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

  1. Ajoutez le dépôt Helm d'Ingress-Nginx :

    helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
    helm repo update
  2. Cré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
  3. 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.yaml
  4. Vé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 :

Tableau 2. Kubernetes attributs de la balise span
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 :