OpenTelemetry in 10 Minuten: Der Standard für moderne Observability

OpenTelemetry ist der neue Standard für Traces, Metriken und Logs. So setzt du OTel in deinem Kubernetes-Cluster in unter 10 Minuten auf — ohne Vendor Lock-in.

Back to overview
March 5, 2026
Skalenta
OpenTelemetryTutorial

Warum OpenTelemetry?

Wenn du ein Monitoring-System baust, passiert immer das Gleiche:

  1. Du wählst einen Vendor (Datadog, New Relic, Prometheus)
  2. Du instrumentierst deinen Code gegen dessen API
  3. 2 Jahre später wechselst du zu einem anderen Vendor
  4. Jetzt musst du deinen GESAMTEN Instrumentierungs-Code neu schreiben

Das ist die Definition von Vendor Lock-in.

OpenTelemetry (OTel) löst das: ein einziger Standard für Observability, der zu jedem beliebigen Vendor exportiert.

Dein Code instrumentiert gegen OTel, nicht gegen Datadog oder Prometheus. Danach konfigurierst du einen "Exporter", der entscheidet, wohin deine Daten gehen — Prometheus, Grafana Loki, Datadog oder OpenSearch.

Standards statt Vendor Lock-in.

Was ist OpenTelemetry?

OpenTelemetry ist ein Projekt der Cloud Native Computing Foundation. Es hat drei Säulen:

1. Traces (Distributed Tracing)

Verfolgt einen Request millisekundengenau durch dein System:

User Request comes in
├── API Gateway (5ms)
├── Auth Service (12ms)
│   └── Database Call (8ms)
├── Business Logic (45ms)
│   ├── Cache Check (2ms)
│   └── Database Query (30ms)
└── Response (2ms)
TOTAL: 67ms

Du siehst nicht nur, dass der Request 67ms gedauert hat, sondern wo die Zeit verbraucht wurde (Auth 12ms ist okay, Database 30ms könnte man optimieren).

2. Metriken (Quantitative Daten)

Numerische Messwerte über die Zeit:

  • Request-Rate (pro Sekunde)
  • Error-Rate (%)
  • Latenz (P50, P95, P99)
  • Memory-Auslastung
  • CPU-Auslastung
  • Custom-Metriken (Bestellungen pro Minute, Conversions, etc.)

3. Logs (Qualitative Daten)

Textuelle Daten, die Kontext liefern:

  • Error-Stacktraces
  • Business-Events ("User registriert")
  • Debug-Informationen

OTel vereint alle drei in einem einzigen Framework.

Installation in 10 Minuten

Schritt 1: Den OpenTelemetry Collector deployen

Der OTel Collector ist ein leichtgewichtiger Agent, der Observability-Daten von deinen Services einsammelt und weiterleitet.

# Add the chart repository
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm repo update

# Install the Collector
helm install otel-collector open-telemetry/opentelemetry-collector \
  --namespace observability --create-namespace

Das war's. Der Collector läuft jetzt in deinem Cluster.

Schritt 2: Den Collector konfigurieren (YAML)

Der Collector muss wissen, wohin deine Daten gehen sollen. Leg eine values.yaml an:

# Receives data from your applications
receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318

  # Optional: Scrape Prometheus metrics
  prometheus:
    config:
      scrape_configs:
        - job_name: 'kubernetes-pods'
          kubernetes_sd_configs:
            - role: pod

# Process the data (optional)
processors:
  batch:
    timeout: 10s
    send_batch_size: 1024

# Export to backends
exporters:
  prometheus:
    endpoint: "0.0.0.0:8888"
  otlp:
    endpoint: loki.observability:3100

# Wire everything together
service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [otlp]
    metrics:
      receivers: [otlp, prometheus]
      processors: [batch]
      exporters: [prometheus]

Deployen:

helm install otel-collector open-telemetry/opentelemetry-collector \
  -f values.yaml --namespace observability

Schritt 3: Deine Anwendung instrumentieren

In deiner Node.js/Python/Go/Java-App:

Node.js-Beispiel:

const opentelemetry = require("@opentelemetry/api");
const { NodeSDK } = require("@opentelemetry/sdk-node");
const { getNodeAutoInstrumentations } = require("@opentelemetry/auto-instrumentations-node");
const { OTLPTraceExporter } = require("@opentelemetry/exporter-trace-otlp-grpc");

// Auto-instrumentation (traces, metrics for Express, DB, HTTP)
const sdk = new NodeSDK({
  traceExporter: new OTLPTraceExporter({
    url: "http://otel-collector:4317"
  }),
  instrumentations: [getNodeAutoInstrumentations()]
});

sdk.start();

// That's it! Every request is now traced
const express = require("express");
const app = express();

app.get("/api/users/:id", (req, res) => {
  // OpenTelemetry automatically traces:
  // - Request comes in
  // - Database query (if using Prisma/Sequelize)
  // - Response goes out
  res.json({ id: req.params.id, name: "John" });
});

app.listen(3000);

Python-Beispiel:

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace.export import BatchSpanProcessor

# Setup
otlp_exporter = OTLPSpanExporter(
    endpoint="otel-collector:4317",
    insecure=True
)
trace.set_tracer_provider(TracerProvider())
trace.get_tracer_provider().add_span_processor(
    BatchSpanProcessor(otlp_exporter)
)

# Use it in your Flask/FastAPI app
from flask import Flask
app = Flask(__name__)

@app.route("/api/users/<id>")
def get_user(id):
    # Automatically traced
    return {"id": id, "name": "John"}

Schritt 4: Metriken visualisieren

Verbinde Prometheus oder Grafana mit dem Collector:

# In your Prometheus config
scrape_configs:
  - job_name: 'otel-collector'
    static_configs:
      - targets: ['otel-collector:8888']

Grafana öffnen → Add Data Source → Prometheus → Queries erstellen:

# Request rate per second
rate(http_server_request_count[1m])

# P95 Latency
histogram_quantile(0.95, http_server_request_duration_seconds_bucket)

# Error rate
rate(http_server_request_count{status_code=~"5.."}[1m])

Fertig.

Was du jetzt hast

Nach 10 Minuten:

  • Traces über dein ganzes System
  • Metriken in Prometheus
  • Visualisierungen in Grafana
  • Vendor-agnostisch (jeder Exporter funktioniert)

Typische Use Cases

1. Einen langsamen Endpoint finden

Grafana shows: /api/checkout takes 2 seconds
You open Jaeger/Grafana Traces
You see:
  - Payment Service takes 1.8s
  - Database query takes 1.7s

Sofort klar, wo das Problem liegt.

2. Service-Abhängigkeiten entdecken

Don't know which services depend on each other?
OTel traces show: Service A calls Service B
                  Service B calls Database
                  Service C is unused (can be deleted)

3. Correlation IDs fürs Debugging

User says: "My order 12345 was not processed"
You search the order ID in logs
OTel traces follow: API → Database → Queue → Worker
You see: Worker crashed at step 3

Best Practices

1. Nutze Auto-Instrumentation

Erstell nicht jeden Span manuell. Auto-Instrumentations erledigen 95% der Arbeit:

go install github.com/open-telemetry/opentelemetry-go-instrumentation/cmd/otelcontribcol@latest

2. Sampling bei hohem Volumen

Wenn du 100.000 Requests/Sekunde hast, kannst du nicht alles tracen. Nutze Sampling:

processors:
  probabilistic_sampler:
    sampling_percentage: 10  # Only sample 10%

3. Custom Spans für Business-Logik

const tracer = opentelemetry.trace.getTracer("my-app");
const span = tracer.startSpan("process-order");
span.setAttributes({
  "order.id": orderId,
  "order.amount": amount,
  "order.currency": "EUR"
});
// ... your business logic
span.end();

Integration mit KI-Ops

KI-Ops läuft in deiner Infrastruktur und nutzt deine OTel-Traces und -Metriken für präzise Analysen und Recommendations. Deine Daten verlassen deine Umgebung dabei nicht:

# KI-Ops analyzes traces from your OTel setup
ki-ops analyze --include-traces --include-metrics

# Output:
# Problem: /api/checkout takes 5 seconds (should be <1s)
# Root Cause (based on traces): Payment Service is 3s slow
# Why: Query without index on transactions table
#
# Recommendation:
# CREATE INDEX idx_payment_status ON transactions(status, created_at)

KI-Ops liefert eine datengestützte Empfehlung mit vollständiger Erklärung, nicht nur einen blinden Befehl. Dein Team validiert, prüft und führt die Änderung durch — mit allen notwendigen Tests (kubectl --dry-run, Datenbank-Migrationen, etc.) und Audit-Trail. KI-Ops bleibt read-only und nicht-invasiv. Möchtest du das in deiner Umgebung sehen? Demo buchen.

Das Fazit

OpenTelemetry ist nicht kompliziert:

  1. OTel Collector deployen (5 Min)
  2. Apps instrumentieren (3 Min)
  3. In Grafana visualisieren (2 Min)

Danach hast du volle Sichtbarkeit über dein System — ohne Vendor Lock-in.

Und das macht deine Incident Response exponentiell schneller.


Ausprobieren:

git clone https://github.com/open-telemetry/opentelemetry-demo
cd opentelemetry-demo
docker-compose up
# Open http://localhost:8080 — done

Questions or feedback?

Drop us a line – we love technical discussions.

Get in Touch