Observability: Zuverlässigkeit und Konsistenz mit OpenTelemetry Weaver

Nahaufnahme eines weissen Gitters aus ineinandergreifenden Y-förmigen Elementen, die sich über das ganze Bild wiederholen
Foto von JJ Ying / Unsplash

«Gute Erkenntnisse entstehen nur aus guten Daten»
opensight.ch - roman hüsler

OpenTelemetry: Semantic Conventions

Diagramm: Logs, Metrics und Traces aus Apps und Systemen fliessen über einen Collector als Observability-Daten in eine Observability-Plattform mit Dashboards, Alerts, Korrelationen und Reports
Bild: Ablauf der Telemetrie-Erfassung

In letzter Zeit bin ich bei der Governance von Observability-Daten auf erhebliche Probleme gestossen. Beim Onboarding von Telemetriedaten aus verschiedenen Systemen führt uneinheitliche Benennung und Labelung oft zu einem fragmentierten, chaotischen Durcheinander in der Observability-Plattform, aus dem sich kaum noch aussagekräftige Erkenntnisse gewinnen lassen.
Probleme, die durch inkonsistente Telemetriedaten entstehen können:

  • Kaputte Alerts und Dashboards, weil sich Metriknamen geändert haben
  • Schwer lesbare Queries wegen uneinheitlicher Benennung
  • Undokumentierte Telemetrie, die für Verwirrung sorgt
  • Fehlende Instrumentierung, die erst in Produktion auffällt

Bei der Recherche habe ich festgestellt, dass die Observability-Branche das Problem aktiv mit gemeinsamen Standardisierungsbemühungen angeht. Eine herausragende Initiative sind die OpenTelemetry Semantic Conventions, Teil des übergreifenden OpenTelemetry-Projekts der Cloud Native Computing Foundation (CNCF).

OpenTelemetry bringt grosse Anbieter wie Dynatrace, Datadog, Elastic und andere zusammen, um einen einheitlichen Standard für Telemetriedaten zu schaffen, über Metrics, Logs und Traces hinweg. Indem sie Benennung, Struktur und Metadaten einheitlich festlegen, ermöglichen die Semantic Conventions Interoperabilität zwischen Observability-Tools, verringern die Fragmentierung und verbessern die Portabilität der Daten. Dieser branchenweite Schritt zur Standardisierung verspricht schlankere Observability-Workflows, weniger Vendor Lock-in und packt die Herausforderungen der Daten-Governance direkt an. OpenTelemetry ist kein Allheilmittel, aber ein wichtiger Schritt hin zu einem kohärenteren und effizienteren Observability-Ökosystem.

Wie viel die OpenTelemetry Semantic Conventions zur Standardisierung von Telemetriedaten beitragen, zeigt die Metrik http.server.request.duration, die die Dauer von HTTP-Server-Requests in Millisekunden misst. Gemäss den OpenTelemetry Semantic Conventions für HTTP-Metriken (nachzulesen in der OpenTelemetry-Spezifikation) muss diese Metrik Pflichtattribute wie http.request.method (z. B. "GET" oder "POST") und http.response.status_code (z. B. 200 oder 404) enthalten, damit Tools wie Dynatrace oder Grafana Alloy sie einheitlich interpretieren. Eine konforme Metrik könnte etwa so aussehen: {name: "http.server.request.duration", value: 120.5, unit: "ms", attributes: {"http.request.method": "GET", "http.response.status_code": 200, "service.name": "my-web-app"}}. Diese Attribute folgen den strengen Benennungs- und Typregeln der Conventions, sodass sich Request-Dauern über verteilte Systeme hinweg nahtlos korrelieren lassen. Weil OpenTelemetry solche Standards durchsetzt, können Tools wie Weaver diese Metrik in CI/CD-Pipelines validieren, während Collectors wie Grafana Alloy nicht konforme Daten herausfiltern. So bleibt die Observability-Pipeline sauber und kontrollierbar.

OpenTelemetry Weaver

GitHub - open-telemetry/weaver: OTel Weaver lets you easily develop, validate, document, and deploy semantic conventions
OTel Weaver lets you easily develop, validate, document, and deploy semantic conventions - open-telemetry/weaver

Mit OpenTelemetry Weaver gibt es nun ein neues Tool (2025 vorgestellt), das auf Validierung zur Design-Zeit ausgerichtet ist und sich direkt in einer CI/CD-Pipeline ausführen lässt, um die Qualität der Observability-Daten zu prüfen.
Das Prinzip heisst «Observability by Design»: Observability wird von Anfang an ins Produkt eingeplant und eingebaut. Weil Weaver sich an den Semantic Conventions von OpenTelemetry orientiert, hilft es, Observability-Daten zu standardisieren, und ebnet so den Weg zu einem kohärenteren Ökosystem. Weaver ist als CLI v0.X versioniert, gilt aber als produktionsreif und wird aktiv weiterentwickelt (v0.16.1, Stand 4. Juli 2025).

Diagramm: Die App sendet über OpenTelemetry Telemetrie an Weaver, das sie gegen die Schema Registry der OpenTelemetry Semantic Conventions prüft und check_results.json ausgibt
Bild: Live Check mit OpenTelemetry Weaver (Übersicht)

Weaver ist im Grunde ein Kommandozeilen-Tool mit mehreren Funktionen:

  • Schema-Definition
    Telemetrie-Schemas über Semantic Conventions definieren
  • Validierung
    Telemetrie manuell oder in der CI gegen die definierten Schemas validieren
  • Typsichere Code-Generierung
    Idiomatische Client-SDKs (Go, Rust usw.) aus diesen Schemas generieren
  • Dokumentations-Generierung
    Markdown-Dokumentation für die eigenen Signale automatisch erzeugen
  • Live Checking (Schwerpunkt dieses Beitrags)
    In die CI oder zur Laufzeit einbinden, um sicherzustellen, dass die ausgegebene Telemetrie konform ist

In der CI/CD-Pipeline kann man die Applikation hochfahren und ihre Telemetrie an Weaver senden. Weaver validiert sie dann gegen die Semantic Conventions und gibt einen Report aus. Eine ausführlichere Architekturzeichnung von Weaver finden Sie hier.

Beispiel-App

Um Weaver auszuprobieren, habe ich eine Test-App gebaut, die in einem Docker-Container läuft. Sie startet einen OpenTelemetry Collector und Weaver direkt im eigenen Container und schickt ihnen Telemetrie. (Der Code liegt auf meinem GitHub.)

Architektur der Demo im Docker-Netzwerk: Beispiel-HTTP-App und Prometheus senden an den OpenTelemetry Collector, der per OTLP gRPC an OpenTelemetry Weaver weiterleitet
# start testapp on docker http://localhost:3000
docker-compose up -d --build

Sobald die Test-App läuft, können wir mit dem Button «send non-compliant metrics» Telemetrie an Weaver schicken, die nicht den OpenTelemetry Semantic Conventions entspricht. Die App startet dann einen OpenTelemetry Collector, startet Weaver und sendet fehlerhafte Telemetriedaten.

Weboberfläche Weaver OpenTelemetry Demo Controls: Weaver Live Check läuft, die Liste der absichtlich nicht konformen Metriken und das Session Log
Bild: Fehlerhafte Telemetriedaten an Weaver senden

Als Beispiel sendet sie die Metrik my_custom_counter_123{bad_label="test_value_1760100097079"}. Diesen Metriknamen gibt es in den OpenTelemetry Semantic Conventions nicht. Auch das Label-Attribut bad_label ist gemäss den Semantic Conventions nicht erlaubt. Schauen wir uns also die Ausgabe von Weaver an:

Weaver Logs mit Registry Coverage, 16 Advisories und den Verstössen missing_metric, missing_attribute und missing.service.name, darunter die JSON-Ausgabe von Weaver
Bild: Ergebnisse von Weaver

Im Ergebnis sehen wir, dass Weaver die Verstösse in den schlecht formatierten Telemetriedaten erkannt hat. Hier die vollständige Rohausgabe von Weaver: GitHub: Weaver-Beispielausgabe

Das Tool ist noch recht jung, aber ich bin gespannt, was es bringen wird. Das Wertversprechen überzeugt: Weaver behandelt Telemetrie-Schemas (abgeleitet aus den Semantic Conventions) als versionierte, durchsetzbare «Public APIs» und generiert daraus Code, Tests und Dokumentation, um Inkonsistenzen früh im SDLC abzufangen. Die Architektur von Weaver sieht ausdrücklich ein WASM-Plugin-System vor, um die Plattform zu erweitern. Das könnte eine direkte Integration zur Laufzeit mit Collectors (z. B. Grafana Alloy) ermöglichen, für Schema Injection, Validierung oder sogar eine dynamische Weiterentwicklung.
opensight.ch - roman hüsler