Telemetry-Pipelines: Das neue Rückgrat von Observability
Modernes Observability besteht aus drei Säulen: Metrics, Logs und Traces. Die Herausforderung liegt nicht nur im Sammeln dieser Daten, sondern auch im Routing – Metrics zu Prometheus, Logs zu Loki, Traces zu Tempo oder Jaeger. Telemetry-Pipeline-Tools übernehmen genau diesen Job: Sie empfangen Daten aus verschiedenen Quellen, transformieren sie und leiten sie an die richtigen Backends weiter.
Die zwei prominentesten Open-Source-Telemetry-Pipelines sind Grafana Alloy und der OpenTelemetry Collector. Beide lösen dasselbe Problem – auf unterschiedliche Weisen und mit unterschiedlichen Stärken.
Grafana Alloy: Der Nachfolger des Grafana Agent
Grafana Alloy ist die Weiterentwicklung des Grafana Agent und wurde 2024 als eigenständiges Open-Source-Projekt veröffentlicht. Alloy vereint, was vorher auf mehrere Tools verteilt war: Metrics-Scraping (wie Prometheus), Log-Shipping (wie Promtail), Trace-Forwarding und mehr – alles in einem einzigen Binary.
Was Alloy auszeichnet:
- River-Konfigurationssprache: Alloy nutzt eine eigene deklarative Sprache namens River (
.alloy-Dateien), die pipe-basiert wie eine Datenfluss-Beschreibung liest - Komponenten-basierte Architektur: Jede Funktionalität ist ein "Component" – Datenquellen, Verarbeitungsschritte und Ausgaben lassen sich wie Legosteine kombinieren
- Prometheus-kompatibel: Alloy kann Prometheus-Scraping-Configs importieren und als Drop-in-Ersatz für Prometheus-Agent-Mode genutzt werden
- Native Loki-Integration: Direktes Log-Shipping zu Loki ohne Umweg über weitere Tools
- Clustering: Alloy-Instanzen können zu einem Cluster zusammengeschlossen werden, der Load Balancing und High Availability bietet
- Grafana-Ökosystem: Nahtlose Integration mit Grafana Cloud, Mimir, Loki, Tempo und dem gesamten LGTM-Stack
Einschränkungen von Alloy:
- Grafana-Ecosystem-Bias: Alloy ist eng mit dem Grafana-Stack verwoben – für Nicht-Grafana-Backends (z.B. Datadog, New Relic) braucht man mehr Konfigurationsaufwand
- River-Lernkurve: Die River-Sprache ist mächtig, aber unbekannt – kein YAML wie bei vielen anderen Tools
- Jünger als OTel Collector: Das OpenTelemetry-Ökosystem hat mehr Community-Erfahrung
Beispiel einer Alloy-Konfiguration (River-Syntax):
prometheus.scrape "my_app" {
targets = [{__address__ = "localhost:8080"}]
forward_to = [prometheus.remote_write.grafana_cloud.receiver]
}
prometheus.remote_write "grafana_cloud" {
endpoint {
url = "https://prometheus-prod.grafana.net/api/prom/push"
basic_auth {
username = env("GRAFANA_CLOUD_USER")
password = env("GRAFANA_CLOUD_API_KEY")
}
}
}
OpenTelemetry Collector: Der herstellerneutrale Standard
Der OpenTelemetry Collector (OTel Collector) ist das zentrale Komponente des CNCF OpenTelemetry-Projekts. Er empfängt Telemetriedaten in verschiedenen Formaten (OTLP, Prometheus, Jaeger, Zipkin, Kafka und viele mehr), verarbeitet sie und exportiert sie an beliebige Backends.
Was den OTel Collector auszeichnet:
- Herstellerneutral: Der Collector ist Teil der CNCF und von keinem einzelnen Unternehmen kontrolliert – Exporters existieren für Datadog, New Relic, Grafana, Splunk, Jaeger, Prometheus und dutzende weitere
- YAML-Konfiguration: Standard-YAML-Konfiguration macht den Einstieg für Teams, die YAML kennen, einfach
- Drei-Schichten-Architektur: Receivers (Eingabe), Processors (Transformation), Exporters (Ausgabe) – klar strukturiert und erweiterbar
- Contrib-Receiver-Bibliothek: Hunderte von Community-contributed Receivers für Datenbanken, Cloud-Provider, Messaging-Systeme und mehr
- Zwei Distributionen:
core(schlank) undcontrib(vollständig mit allen Community-Plugins) - OpenTelemetry-native: Erste Wahl für Teams, die bereits OpenTelemetry-SDKs in ihren Applikationen nutzen
Einschränkungen des OTel Collectors:
- Metrics-Scraping weniger ausgereift: Prometheus-Scraping funktioniert, aber mit mehr Konfigurationsaufwand als Grafana Alloy
- Kein Clustering out-of-the-box: High Availability und Load Balancing müssen manuell mit dem Load-Balancing-Exporter konfiguriert werden
- Konfigurationskomplexität: Bei komplexen Pipelines mit vielen Services kann die YAML-Konfiguration schnell unübersichtlich werden
Beispiel einer OTel Collector-Konfiguration:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
prometheus:
config:
scrape_configs:
- job_name: 'my-app'
static_configs:
- targets: ['localhost:8080']
processors:
batch:
timeout: 1s
send_batch_size: 1024
exporters:
prometheusremotewrite:
endpoint: "http://prometheus:9090/api/v1/write"
otlp:
endpoint: "tempo:4317"
service:
pipelines:
metrics:
receivers: [prometheus]
processors: [batch]
exporters: [prometheusremotewrite]
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlp]
Direkter Vergleich: Grafana Alloy vs. OTel Collector
| Kriterium | Grafana Alloy | OTel Collector |
|---|---|---|
| Konfigurationssprache | River (proprietär) | YAML (Standard) |
| Herstellerbindung | Grafana-Ecosystem | Herstellerneutral (CNCF) |
| Prometheus-Scraping | Erstklassig (nativ) | Gut (via Receiver) |
| Log-Handling | Nativ (Loki-native) | Via Receivers (Filelog etc.) |
| Traces | Unterstützt | OTLP-native |
| Clustering | Eingebaut | Manuell (Load Balancing Exporter) |
| Backend-Support | LGTM-Stack + Externe | 50+ Backends über Contrib |
| Kubernetes-Operator | Grafana Alloy Operator | OpenTelemetry Operator |
| Community | Grafana-Community | CNCF (sehr groß) |
| SBOM/Compliance | ✓ | ✓ |
Kubernetes-Deployment: Helm Charts im Vergleich
Grafana Alloy in Kubernetes:
helm repo add grafana https://grafana.github.io/helm-charts
helm install alloy grafana/alloy --namespace monitoring --set alloy.configMap.content="$(cat alloy-config.alloy)"
OpenTelemetry Collector via Operator:
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm install opentelemetry-operator open-telemetry/opentelemetry-operator
# Dann: OpenTelemetryCollector Custom Resource deployen
Beide haben gute Helm-Chart-Support, aber die Grafana-Charts sind besonders auf den LGTM-Stack (Loki, Grafana, Tempo, Mimir) abgestimmt.
Wann welches Tool wählen?
Grafana Alloy wählen wenn:
- Du den kompletten Grafana-Stack (Loki, Mimir, Tempo, Grafana) betreibst
- Du bereits Grafana Agent nutzt und auf Alloy migrieren willst
- Einfaches Clustering für HA wichtig ist
- Du Prometheus-Scraping als erste Anforderung hast und Logs als Ergänzung
OpenTelemetry Collector wählen wenn:
- Dein Stack herstellerneutral bleiben soll und du verschiedene Backends (Datadog, New Relic, Splunk) nutzt
- Du OpenTelemetry-SDK-instrumentierte Applikationen hast und OTLP als nativen Transport nutzt
- Du auf CNCF-Standards setzen willst, die unabhängig von einem Hersteller sind
- Du eine breite Community und Contrib-Bibliothek für exotische Datenquellen benötigst
Fazit
Grafana Alloy und der OpenTelemetry Collector sind keine echten Konkurrenten – sie lösen ähnliche Probleme auf komplementäre Weisen. Grafana Alloy ist die erste Wahl, wenn du bereits im Grafana-Ökosystem bist: Der integrierte Support für Prometheus, Loki und Tempo macht komplexe Observability-Setups in einem Tool abbildbar. Der OTel Collector ist die richtige Wahl für herstellerneutrale, CNCF-konforme Setups mit breitem Backend-Support.
Viele produktive Setups nutzen beide Tools kombiniert: Den OTel Collector als Eingangs-Gateway für OTLP-Traces aus Applikationen und Grafana Alloy für Metrics-Scraping und Log-Shipping. Diese Kombination maximiert Flexibilität und Integration zugleich.
Weiterführende Artikel
- OpenTelemetry Deep Dive: Distributed Tracing für moderne Anwendungen
- Prometheus vs. Datadog: Open-Source vs. kommerzielles Monitoring
- Warum ich Grafana + Loki statt ELK-Stack nutze