Integration von „ OpenTelemetry “ mit „ Instana “ für „ NGINX “

Sie können „ OpenTelemetry “ zusammen mit „ NGINX “, „ IBM “ und „ Instana Observability“ verwenden, um verteilte Tracing- und Observability-Funktionen für Ihren „ NGINX “-Webserver zu aktivieren.

Unterstützte Betriebssysteme

OpenTelemetry Die Integration wird ausschließlich auf Betriebssystemen von Linux unterstützt und getestet.

Voraussetzungen

Um OpenTelemetry mit Instana zu integrieren, benötigen Sie die folgenden Komponenten:

  • NGINX Webserver (empfohlen wird Version 1.25.3 oder höher; bei früheren Versionen muss das Modul „ NGINX “ ( OpenTelemetry ) aus dem Quellcode kompiliert werden)
  • OpenTelemetry NGINX Modul oder Messtechnik
  • Ein aktives „ IBM “-Konto unter Instana

Installation des Moduls „ OpenTelemetry “ NGINX

Das offizielle Modul „ NGINX “ ( OpenTelemetryngx_otel_module) ist als dynamisches Modul verfügbar. Weitere Informationen zu diesem Modul finden Sie in der Dokumentation zum Modul „ NGINX “ unter OpenTelemetry.

  1. Installieren Sie das Modul „ NGINX “ unter OpenTelemetry.

    Bei den meisten „ Linux “-Distributionen können Sie das Modul aus dem Repository „ NGINX “ installieren:

    # For Ubuntu or Debian
    sudo apt-get install nginx-module-otel
    
    # For RHEL or CentOS
    sudo yum install nginx-module-otel

    Alternativ kannst du „ NGINX “ mit dem Modul „ OpenTelemetry “ aus dem Quellcode kompilieren. Eine Anleitung zum Erstellen findest du in der Dokumentation zu „ NGINX “.

  2. Konfigurieren Sie „ NGINX “ so, dass das Modul „ OpenTelemetry “ geladen wird, indem Sie die folgende Zeile am Anfang Ihrer nginx.conf Datei einfügen:

    load_module modules/ngx_otel_module.so;

NGINX mit OpenTelemetry konfigurieren

Nachdem Sie das Modul „ OpenTelemetry “ ( NGINX ) installiert haben, konfigurieren Sie Ihren „ NGINX “-Server so, dass er Daten an „ OpenTelemetry “ sendet. Die grundlegende Konfigurationsstruktur umfasst die folgenden Anweisungen:

Tabelle 1. NGINX OpenTelemetry Konfigurationsanweisungen
Konfigurationsanweisung Beschreibung
otel_exporter Legt den Endpunkt „ OTLP “ fest, an den die Traces gesendet werden
otel_service_name Logischer Dienstname für die Infrastrukturkorrelation (Weitere Informationen finden Sie unter „Infrastrukturkorrelation “.)
otel_trace Aktiviert oder deaktiviert die Protokollierung von „ OpenTelemetry “
otel_trace_context Konfiguriert die Weitergabe des Trace-Kontexts

Tracekontextweitergabe

Das native Modul „ NGINX “ ( OpenTelemetry ) nutzt den Standard „ W3C Trace Context“ für die verteilte Ablaufverfolgung. Das Modul überträgt den Trace-Kontext mithilfe der folgenden Standard- HTTP -Header:

  • traceparent - Enthält die Trace-ID, die übergeordnete Span-ID und die Trace-Flags
  • tracestate - Enthält herstellerspezifische Trace-Informationen

Das Modul unterstützt keine „ Instana “-spezifischen Header für die Trace-Weitergabe:

  • X-Instana-T (Trace-ID)
  • X-Instana-S (Span ID)
  • X-Instana-L (Abtaststufe oder Entscheidung)

Wenn „ NGINX “ Anfragen mit den Header-Einträgen „ W3C “ und „Trace Context“ erhält, setzt es die Ablaufverfolgung automatisch fort. Wenn „ NGINX “ Upstream-Anfragen sendet, gibt es den Trace-Kontext mithilfe derselben Standard-Header-Zeichenfolgen weiter: W3C.

Einrichten der „ OpenTelemetry “-Integration

Sie können eine der folgenden Optionen verwenden, um OpenTelemetry mit Instana zu integrieren:

Option 1: Verwendung der Distribution „ Instana “ von „ OpenTelemetry Collector“

Die „ Instana “-Distribution des „ OpenTelemetry “-Collectors ( IDOT ) ist eine vollständig verwaltete und vorkonfigurierte Version des „ OpenTelemetry “-Collectors, die sich nahtlos in die Observability-Plattform „ Instana “ integrieren lässt.

Um Telemetriedaten von Ihrem „ NGINX “-Server zu erfassen, führen Sie die folgenden Schritte aus, um „ IDOT “ einzurichten und zu konfigurieren:

  1. Montieren Sie den Sammler. Stellen Sie die „ Instana “-Distribution des „ OpenTelemetry “-Collectors je nach den Anforderungen Ihrer Infrastruktur als Sidecar, Daemon oder Gateway bereit. Ausführliche Anweisungen zur Konfiguration des „ IDOT “-Kollektors finden Sie in der Dokumentation zur „ Instana “-Distribution des „ OpenTelemetry “-Kollektors.
  2. Konfigurieren Sie Ihren „ NGINX “-Server so, dass er „ OpenTelemetry “-Daten an den „ IDOT “-Collector-Endpunkt (Standardport 24317) sendet:

    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: Verwendung der Endpunkte „ Instana “ und „ OTLP “

Sie können „ OpenTelemetry “ mit „ NGINX “ integrieren, indem Sie den Exporter „ OpenTelemetry Protocol “ ( OTLP ) so konfigurieren, dass die Traces von „ OpenTelemetry “ direkt an den „ Instana “-Agenten oder das „ Instana “-Backend gesendet werden.

Daten an den Endpunkt „ OTLP “ des Agenten senden

Der „ Instana “-Agent stellt „ OTLP “-Endpunkte bereit, die „ OpenTelemetry “-Daten direkt von Ihrem „ NGINX “-Server empfangen können.

Um Daten an den Endpunkt „ OTLP “ des Instana -Agenten zu senden, konfigurieren Sie Ihren NGINX -Server wie folgt:

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;
        }
    }
}

Daten an den Backend-Endpunkt „ OTLP “ senden

In Umgebungen, in denen keine direkte Kommunikation mit dem „ Instana “-Agenten möglich ist, können Sie Ihren „ NGINX “-Server so konfigurieren, dass „ OpenTelemetry “-Daten direkt an das „ Instana “-Backend gesendet werden.

Weitere Informationen finden Sie unter „ OpenTelemetry -Daten an Instana senden “.

Um Daten an den Endpunkt „ OTLP “ des Backends „ Instana “ zu senden, konfigurieren Sie Ihren „ NGINX “-Server wie folgt:

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;
        }
    }
}

Ersetzen Sie {instana-backend-otlp-acceptor-endpoint} durch Ihren Backend-Endpunkt Instana und {agent-key} durch Ihren Agentenschlüssel Instana.

Bereitstellung des „ NGINX “-Ingress-Controllers mit „ OpenTelemetry “ auf „ Kubernetes “

Für „ Kubernetes “-Umgebungen können Sie den „ NGINX “-Ingress-Controller mit Unterstützung für „ OpenTelemetry “ über „ Helm “ bereitstellen. Mit dieser Bereitstellung können Sie den gesamten eingehenden Datenverkehr automatisch mit verteilter Ablaufverfolgung ausstatten.

Wichtig: Wenn Sie den Webhook „ Instana “ ( AutoTrace ) in Ihrem Cluster installiert haben, müssen Sie ihn für ingress-nginx deaktivieren, um Konflikte mit dem nativen Modul „ OpenTelemetry “ zu vermeiden. Sie können „ AutoTrace “ für ingress-nginx deaktivieren, indem Sie bei der Installation oder Aktualisierung des Instana--set autotrace.ingress_nginx.enabled=false -Agenten die entsprechende Einstellung vornehmen.

Voraussetzungen für die Bereitstellung von „ Kubernetes “

Stellen Sie sicher, dass die folgenden Voraussetzungen verfügbar sind:

  • Kubernetes Cluster (z. B. Minikube, EKS, GKE oder AKS )
  • Helm 3.x installiert
  • kubectl für den Zugriff auf Ihren Cluster konfiguriert
  • Instana Backend- OTLP -Endpunkt und API -Schlüssel

Installation von ingress-nginx mit „ OpenTelemetry “

  1. Fügen Sie das Repository „ingress-nginx“ Helm hinzu:

    helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
    helm repo update
  2. Erstellen Sie eine Werte-Datei namens „ Helm “ (zum Beispiel ingress-nginx-values.yaml ) mit der folgenden Konfiguration: 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}"

    Ersetzen Sie die folgenden Werte in der Konfiguration:

    • {instana-backend-otlp-endpoint} - Der Endpunkt Ihres „ Instana “-Backends unter OTLP (zum Beispiel otlp-red-saas.instana.io )
    • {agent-key} - Ihr „ Instana “-Agentenschlüssel
    • {your-cluster-name} - Der Name Ihres „ Kubernetes “-Clusters
    • {your-service-name} - Name Ihres Dienstes
    • {version} - Die Version des „ingress-nginx“-Images mit Unterstützung für „ OpenTelemetry “
    • Image-Einstellungen – Konfigurieren Sie diese entsprechend Ihrer Registrierung und Ihren Image-Anforderungen
  3. Installieren Sie den Ingress-Nginx-Controller mit den benutzerdefinierten Werten:

    helm install ingress-nginx ingress-nginx/ingress-nginx \
      --namespace ingress-nginx \
      --create-namespace \
      --values ingress-nginx-values.yaml
  4. Prüfen Sie die Installation:

    kubectl get pods -n ingress-nginx
    kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx

Konfigurationsoptionen

Die Wertedatei „ Helm “ enthält mehrere wichtige Konfigurationsabschnitte:

  • http-snippet : Enthält die Hauptkonfiguration des „ OpenTelemetry “-Exporters, einschließlich des Endpunkts „ Instana “ und der Authentifizierung
  • main-snippet : Lädt das Modul „ OpenTelemetry “ NGINX
  • otel-span-attr : Definiert benutzerdefinierte Span-Attribute, die jedem Trace hinzugefügt werden, einschließlich Metadaten, die für „ Kubernetes “ spezifisch sind
  • otel-trace : Aktiviert die Nachverfolgung von „ OpenTelemetry “
  • otel-trace-context : Konfiguriert die Weitergabe des Trace-Kontexts an nachgelagerte Dienste

Benutzerdefinierte Span-Attribute

Die Konfiguration enthält spezifische Attribute für „ Kubernetes “, die in „ Instana “ wertvolle Kontextinformationen liefern:

Tabelle 2. Kubernetes span-Attribute
Attribut Beschreibung
http.request_id Eindeutige Kennung für jede Anfrage an HTTP
k8s.namespace Kubernetes Namensraum des Dienstes
k8s.ingress.name Name der Eingangsressource
k8s.service.name Name des Dienstes „ Kubernetes “

Diese Attribute helfen dabei, Traces mit bestimmten Ressourcen von „ Kubernetes “ in der Benutzeroberfläche von „ Instana “ abzugleichen.

Infrastrukturkorrelation

Die otel_service_name Richtlinie dient der Infrastrukturkorrelation, die Ihre „ NGINX “-Anwendungstraces mit den zugrunde liegenden Infrastrukturkomponenten (Hosts, Container, „ Kubernetes “-Pods und Prozesse) verknüpft, die von „ Instana “ überwacht werden.

Wenn Sie diese Einstellung vornehmen otel_service_name, verwendet „ Instana “ diesen Dienstnamen, um die folgenden Aufgaben auszuführen:

  • NGINX -Protokolle mit Infrastrukturkennzahlen (CPU, Arbeitsspeicher und Netzwerk) abgleichen
  • Abhängigkeiten und Aufrufbeziehungen von Kartendiensten
  • Bidirektionale Navigation zwischen Anwendungs- und Infrastrukturansichten aktivieren
  • Stellen Sie den vollständigen Kontext für die Ursachenanalyse bereit

Weitere Informationen zur Infrastrukturkorrelation und zur Integration von „ OpenTelemetry “ finden Sie in den folgenden Themen: