Schritt 1: Eine Anwendung ohne Codeänderung instrumentieren
Der schnellste Weg zu belastbaren Traces führt über die automatische Instrumentierung. Sie hängt sich beim Start an das Laufzeitsystem und erfasst HTTP-Aufrufe, Datenbankzugriffe und Warteschlangen, ohne dass eine Zeile Anwendungscode geändert wird.
Gesteuert wird alles über Umgebungsvariablen. Der wichtigste Wert ist der Dienstname, denn er taucht später in jedem Trace, jeder Metrik und jeder Logzeile auf. Vergib ihn einmal richtig und nach einem festen Schema, sonst heißen drei Dienste später unknown_service und niemand kann Daten mehr zuordnen.
curl -sLO https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar
export OTEL_SERVICE_NAME="checkout-api"
export OTEL_RESOURCE_ATTRIBUTES="deployment.environment.name=prod,service.namespace=shop"
export OTEL_EXPORTER_OTLP_ENDPOINT="http://otel-collector:4317"
export OTEL_EXPORTER_OTLP_PROTOCOL="grpc"
export OTEL_TRACES_SAMPLER="parentbased_traceidratio"
export OTEL_TRACES_SAMPLER_ARG="0.1"
java -javaagent:./opentelemetry-javaagent.jar -jar checkout.jarDer Sampler parentbased_traceidratio entscheidet in der Anwendung und behält hier zehn Prozent der Traces. Wichtig ist das Präfix parentbased: Nur damit übernimmt ein Dienst die Entscheidung des Aufrufers, sonst reißt der Trace mitten in der Kette ab.
# Python: Instrumentierung als Wrapper vor den Prozess haengen
pip install opentelemetry-distro opentelemetry-exporter-otlp
opentelemetry-bootstrap -a install
OTEL_SERVICE_NAME=orders-api \
OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4318 \
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \
opentelemetry-instrument python app.py
# Node.js: Registrierung vor dem eigenen Code laden
npm install @opentelemetry/auto-instrumentations-node
node --require @opentelemetry/auto-instrumentations-node/register server.jsopentelemetry-bootstrap -a install liest die installierten Pakete und ergänzt die passenden Instrumentierungen. Führe den Befehl nach jedem größeren Abhängigkeitsupdate erneut aus, sonst fehlen neu hinzugekommene Bibliotheken in den Traces und du suchst die Lücke im Collector.