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.
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-otelAlternativ kannst du „ NGINX “ mit dem Modul „ OpenTelemetry “ aus dem Quellcode kompilieren. Eine Anleitung zum Erstellen findest du in der Dokumentation zu „ NGINX “.
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:
| 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-Flagstracestate- 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:
- Instana Bereitstellung des „ OpenTelemetry “-Collectors ( IDOT ) : Verwenden Sie den von Instana verwalteten „ OpenTelemetry “-Collector, um Daten von „ OpenTelemetry “ zu empfangen und zu verarbeiten.
- Instana OTLP Endpunkte : Konfigurieren Sie den Exporter unter OpenTelemetryOTLP so, dass er Daten von OpenTelemetry direkt an den Agenten unter Instana oder an die Backend-Endpunkte unter InstanaOTLP sendet.
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:
- 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.
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.
--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 “
Fügen Sie das Repository „ingress-nginx“ Helm hinzu:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo updateErstellen 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
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.yamlPrü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:
| 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: