Was ist OpenTelemetry?

22 Oktober, 2026

Christian Stückl
Christian Stückl
Consultant

von | Okt. 22, 2026

Zuletzt aktualisiert: 22.10.2026 · Lesezeit: 9-13 Minuten

Was ist OpenTelemetry? Kurz gesagt: der offene, herstellerunabhängige Standard, um Metriken, Logs und Traces zu erfassen, zu verarbeiten und an ein Backend deiner Wahl zu senden.

Wer sich mit dem Thema Monitoring oder Observability befasst, stößt früher oder später (eher früher) auf das Thema OpenTelemetry. Hierbei kommt es immer wieder zu unterschiedlichen Ansichten und Meinungen, was sich denn wirklich dahinter verbirgt. Mit diesem Artikel versuche ich einen Überblick über das Thema zu verschaffen.

Die wichtigsten Punkte in 30 Sekunden

  • OpenTelemetry (OTel) ist ein herstellerunabhängiges Open-Source-Framework zum Erfassen, Verarbeiten und Exportieren von Telemetriedaten und mittlerweile der de-facto Industriestandard.
  • OTel ist kein Backend und kein Visualisierungssystem. Die Daten werden per OTLP (gRPC oder HTTP) an ein kompatibles Backend wie VictoriaMetrics, Grafana LGTM, Elasticsearch oder OpenSearch gesendet.
  • Metriken zeigen, dass etwas nicht stimmt, Traces zeigen, wo es passiert, Logs im Idealfall, warum.
  • Der OpenTelemetry Collector arbeitet mit Pipelines aus Receivers, Processors und Exporters, ergänzt durch Extensions und Connectors.
  • Semantic Conventions sorgen für einheitliche Attributnamen wie host.name und machen Daten aus unterschiedlichen Quellen direkt vergleichbar.

Was genau ist OpenTelemetry eigentlich?

OpenTelemetry (OTel) ist ein Open Source, herstellerunabhängiges Framework und Toolkit zum Erfassen, Verarbeiten und Exportieren von Telemetriedaten wie Logs, Traces, Metriken und Profiles. Es ist mittlerweile der de-facto Industriestandard für die erwähnten Anwendungsfälle (Profiles befindet sich aktuell noch im „Entwicklungsstadium“).

OTel bietet SDKs, APIs (für alle gängigen Programmiersprachen) und diverse Tools an, um Telemetriedaten aus Anwendungen zu generieren und in einem einheitlichen Datenformat zur Verfügung zu stellen. Zur Übertragung dieser Telemetriedaten wird das OpenTelemetry Protocol (OTLP) verwendet, implementiert über die Transportprotokolle gRPC und HTTP.

Da es immer wieder zu Missverständnissen kommt: OpenTelemetry ist kein Backend- oder ein Visualisierungssystem.

Anbei ein Beispiel, wie OpenTelemetry verwendet werden kann, hier am Beispiel des OTel Collectors.

Wie OpenTelemetry verwendet werden kann, hier am Beispiel des OTel Collectors.
Abb. 1: Beispielhafter Einsatz von OpenTelemetry mit dem OTel Collector.

OpenTelemetry ist ein Cloud Native Computing Foundation (CNCF) Projekt. Das Projekt verfolgt das Ziel, einen einheitlichen Standard für die Instrumentierung von Anwendungen sowie für die Erfassung und Weiterleitung von Telemetriedaten zu etablieren.

Was genau sind Telemetriedaten?

Um Systeme und Applikationen zu überwachen, werden Telemetriedaten benötigt. Diese werden uns über verschiedene Wege zur Verfügung gestellt bzw. können abgefragt werden. Wichtig dabei ist: Diese Daten stehen nicht einfach so auf magische Art und Weise zur Verfügung, sie müssen durch die Applikation bzw. das System bereit gestellt werden.

Bevor wir anfangen, Daten zu sammeln, sollten wir uns erst bewusst machen, was genau wir überhaupt überwachen/beobachten möchten. Als Grundlage hierzu ein kleiner Überblick über die drei gängigsten Datensignale, die gesammelt werden können, und was sich dahinter verbirgt:

SignalEigenschaftZweck
MetrikNumerische Messwerte, die zu einem bestimmten Zeitpunkt erfasst werden.Wie viel, wie oft, etc.?
LogTextbasierte Einträge, die ein Ereignis innerhalb eines Systems beschreiben, versehen mit einem Zeitstempel wann es auftrat.Was ist passiert?
TraceAufzeichnung des vollständigen Wegs, den eine Anfrage durch ein verteiltes System nimmt – aufgeteilt in einzelne Schritte, sogenannte Spans.Wo ist es passiert?

Metriken

Metriken sagen uns, dass etwas mit unserem System nicht stimmt, aber nicht warum. Die Messwerte der Metriken werden über sogenannte Messinstrumente erfasst, die Art des Instruments bestimmt, wie gemessen wird. Anbei eine kurze Erklärung zu den gängigsten Typen:

ArtBeschreibung
CounterZählt nur aufwärts, z. B. die Gesamtanzahl eingegangener HTTP-Anfragen.
GaugeMisst einen aktuellen Wert zum Zeitpunkt der Abfrage, z.B. die aktuelle CPU-Aulastung.
HistogramAggregiert Messwerte clientseitig, z. B. um die Verteilung von Antwortzeiten auszuwerten.

Traces

Zeigt uns eine Metrik z. B. eine hohe Latenz für unseren Webservice an, wissen wir zwar, dass dieser nicht wie vorgesehen funktioniert, aber noch nicht warum. Hierbei helfen uns dann Traces: Diese zeigen uns, an welcher Stelle die Latenz auf dem Weg durch mehrere Services (Datenbanken, APIs, Frontend usw.) entsteht.

Dazu folgt ein Trace der einzelnen Anfrage vom Anfangspunkt bis zur finalen Antwort und zeichnet dabei auf seinem Weg die benötigte Zeit pro Service auf.

Ein Trace ist in kleinere Einheiten unterteilt, sogenannte Spans. Jeder Span stellt eine Operation dar: HTTP Request Handling, Datenbankabfrage, Aufruf eines anderen Services usw. Die Darstellung erfolgt dann hierarchisch aufgebaut, ein übergeordneter Span kann mehrere untergeordnete Spans enthalten.

Logs

Logs zeigen uns im Idealfall, warum etwas nicht funktioniert. Ein Logeintrag zeigt ein bestimmtes Event zu einem spezifischem Zeitpunkt.

Wie sammele bzw. verarbeite ich Telemetriedaten mit OpenTelemetry?

Im nächsten Schritt möchten wir die festgelegten Telemetriedaten sammeln und an ein beliebiges Backend (VictoriaMetrics, Grafana LGTM, Elasticsearch, OpenSearch usw.) senden. Dazu verwenden wir den OpenTelemetry Collector (otelcol).

OpenTelemetry Collector installieren

Der otelcol kann über verschiedene Wege installiert werden:

  • Source
  • Docker
  • Kubernetes
  • Binarys (Linux, macOS, Windows)

Die Installation am Beispiel auf einem Debian System ist schnell erfolgt, da DEB Pakete zur Verfügung stehen. Bei der Paketinstallation wird auch gleich ein systemd Service angelegt.

Der Collector liegt in zwei Versionen vor, einmal Standard und in der Contrib Variante. In der Standardvariante sind nur einige gängige Receiver, Exporter, Extensions, Processors, Connectors sowie Provider (mehr dazu weiter unten) enthalten, während in der Contribvariante bereits alle verfügbaren integriert sind. Grundsätzlich lassen sich auch einzelne Module integrieren, um es uns einfach zu machen, wählen wir in unserem Beispiel aber die Contrib Variante.

sudo apt-get update
sudo apt-get -y install wget
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.158.0/otelcol-contrib_0.158.0_linux_amd64.deb
sudo dpkg -i otelcol-contrib_0.158.0_linux_amd64.deb

Nach der Installation kann mit der Konfiguration des Collectors begonnen werden, die Konfigurationsdatei liegt unter:

/etc/otelcol-contrib

Aufbau der Collector-Konfiguration

Die Konfigurationsdatei kann aus folgenden Pipelinekomponenten bestehen:

KomponenteZweck
ReceiversSammeln von Telemetriedaten von verschiedenen Quellen und Formaten
ProcessorsTransformieren, filtern oder ergänzen von Telemetriedaten
ExportersSenden von Telemetriedaten an ein Backend
ConnectorsZum verbinden von zwei Pipelines, agiert als Exporter und Receiver
ExtensionsStellt zusätzliche Funktionen bereit, wie etwa Authenfizierung

Anbei erstellen wir eine beispielhafte Konfiguration, um Metriken und Logfiles von einem Linux-System an ein VictoriaMetrics/VictoriaLogs-Backend mit Authentifizierung über vmauth zu senden.

Die Datei liegt Standardmäßig unter /etc/otelcol-contrib/config.yaml

Receivers

Wir beginnen mit dem Receivers Block für die Telemetriedaten unseres Hostystems. Hier wird definiert, was wir sammeln möchten und aus welcher Quelle. Am Beispiel der Hostmetrics gibt es zu jedem Scraper (CPU, Disk, …) vordefinierte Standardmetriken, die geliefert werden. Zusätzlich gibt es dann noch diverse optionale Metriken, diese müssen explizit definiert werden. Welche das sind finden wir unter folgendem Link. Weitere Receiver findet ihr hier.

---
receivers:
  hostmetrics:
    root_path: /hostfs
    collection_interval: 10s
    scrapers:
      cpu:
        metrics:
          system.cpu.utilization:
            enabled: true
          system.cpu.logical.count:
            enabled: true
      disk:
      load:
      filesystem:
        exclude_mount_points:
          match_type: regexp
          mount_points:
            - '/hostfs/proc.*'
            - '/hostfs/sys.*'
      memory:
        metrics:
          system.memory.utilization:
            enabled: true
          system.memory.limit:
            enabled: true
      network:
      paging:
        metrics:
          system.paging.usage:
            enabled: true
      processes:
      process:
        mute_process_exe_error: true
        mute_process_io_error: true
        mute_process_user_error: true
      system:
        metrics:
          system.uptime:
            enabled: true

Als nächstes widmen wir uns dem Receiver für unsere Logfiles, diese holen wir uns aus dem Journald des Hostsytem. Auch hier gibt es wieder diverse Konfigurationsparameter. Es lässt sich z.B. konfigurieren, welche systemd Units uns interessieren, es macht ja nicht unbedingt Sinn das komplette Journald in unser Backend zu schreiben.

Hierbei ist noch zu beachten, dass der otelcol-contrib Lesezugriff auf das journald benötigt.

journald:  
   directory: /var/log/journal
   priority: info  
   start_at: end

Processors: Resource Detection

Nun haben wir definiert, welche Telemetriedaten wir empfangen und weiterverarbeitet haben möchten, der nächste Schritt folgt dann mit den Processors. Hier könnten wir den Telemetriedaten noch weitere Attribute wie Labels usw. mitgeben, weitere Infos dazu findet ihr hier. In unserem einfachen Beispiel verwenden wir nur den Resource Detection Processor.

Der Resource Detection Processer erkennt die Metadaten unseres Hostsystems und „wandelt“ diese Informationen in die OpenTelemetry Resource Semantic Conventions um. Warum das gut und wichtig ist, findest du unter folgendem Absatz.

processors:  
 resourcedetection:  
   detectors: [system]
   system:
     hostname_sources: ["os", "dns"]

Extensions und Exporters

Damit haben wir alles Telemetriespezifische definiert. Als vorletzten Schritt definieren wir noch die Extensions und Exporters.

Extensions sind optionale Komponenten, die nicht direkt mit der Verarberbeitung von Telemetriedaten zu tun haben, wir verwenden Sie in unserem Beispiel Basicauth um uns am Backend authentifizieren zu können, weitere Erweiterungen findet ihr hier.

Exporter senden unsere gesammelten Telemetriedaten an das Backend oder andere Ziele, da wir in unserem Beispiel VictoriaMetrics bzw. VictoriaLogs verwenden und diese Backends nativ OTLP „sprechen“, verwenden wir den otlp_http Exporter, weitere sind hier gelistet. Zum einen definieren wir in diesem Block die Endpoints für Logs und Metriken, übergeben noch einen Header, der VictoriaLogs sagt, wo sich das Message-Feld in den Logfiles befindet, und zuletzt noch die Parameter zur Authentifizierung am Backend.

extensions:  
 basicauth:  
   client_auth:  
     username: xxx  
     password: xxx  
   
exporters:  
 otlp_http:  
   metrics_endpoint: http://localhost:8427/opentelemetry/v1/metrics  
   logs_endpoint: http://localhost:8427/insert/opentelemetry/v1/logs  
   headers:  
     VL-Msg-Field: "body,MESSAGE"    
   auth:  
     authenticator: basicauth

OpenTelemetry in deiner Umgebung einführen?
Unsere Consultants unterstützen dich bei Konzeption, Collector-Setup und der Anbindung an dein Observability-Backend.
Beratung anfragen →

Service-Block: die Pipeline

Abschließend haben wir noch den Service Block, in diesem wird definiert wie die erstellten Blöcke zusammenhängen, die sogenannte Pipeline.

service:  
 extensions: [basicauth]  
 pipelines:  
   metrics:  
     receivers: [hostmetrics]  
     processors: [resourcedetection]  
     exporters: [otlp_http]  
   logs:  
     receivers: [journald]  
     processors: [resourcedetection]  
     exporters: [otlp_http]

Am Beispiel der Metriken sagt diese Konfiguration: Nutze den Receiver hostmetrics gebe die Daten an den Processor resourcedetection weiter und zuletzt an den Exporter otlp_http. Extensions gehören keiner Pipeline an, können aber als „Hilfsdienste“ genutzt werden, im Exporters Block hatten wir ja die basicauth verwendet um uns am Backend zu authentifizieren. Haben wir Blöcke in der Konfiguration definiert, aber nicht in einer Pipeline verwendet, werden diese ignoriert.

Gestartet wird der otelcol mit:

sudo systemctl start otelcol-contrib.service

Wird die Konfiguration verändert, muss der Service neugestartet werden. Die Änderungen werden per default Settings nicht automatisch übernommen, dies machen wir mit:

sudo systemctl restart otelcol-contrib.service

Für das Troubleshooting können wir uns die Logeinträge im journald ansehen:

sudo journalctl -u otelcol-contrib

Werden weitere Informationen benötigt, lässt sich der debug Modus des otelcol aktivieren, in dem wir einen Debug Exporter erstellen und entsprechend der Pipeline hinzufügen. Der Exporter wird wie folgt definiert:

exporters:
  debug:
    verbosity: detailed

OpenTelemetry Semantic Convetions

Mit den Semantic Conventions werden Standards für einheitliche Bezeichnungen von verschiedenen Telemetriedaten geschaffen. Das bedeutet: Während es nicht unüblich war, dass Tool A für z. B. den Hostname eines Systems ein Attribut „hostname“ verwendete, verwendete Tool B dafür „host“ und zuletzt dann noch Tool C „instance“. In der Arbeit mit diesen Daten bedeutete das, dass ich alle drei möglichen Varianten in einer Datenabfrage in Betracht ziehen musste und es ein riesiger Aufwand war, Daten, die eigentlich dasselbe mitteilen, miteinander vergleichen zu können. Durch den Einsatz der OpenTelemetry Semantic Convention wird daraus ein einheitliches „host.name“, egal ob es sich beispielsweise um Logs, Traces oder Metriken handelt.

Fazit

OpenTelemetry schafft etwas, das in der Observability-Welt lange gefehlt hat: einen herstellerunabhängigen Standard für die Erfassung, Verarbeitung und den Transport von Telemetriedaten.

Der Collector zeigt diesen Ansatz in der Praxis. Daten werden an einer Stelle empfangen, verarbeitet und an ein beliebiges, kompatibles Backend weitergeleitet. Mit Einsatz der Semantic Conventions können wir sicherstellen, dass Telemetriedaten aus unterschiedlichen Quellen und Sprachen einheitlich benannt und damit direkt vergleichbar sind, was einen großen Vorteil in unserer täglichen Arbeit bietet.

OpenTelemetry ist kein fertiges Monitoring- oder Observability System, sondern eine grundlegende Basis dafür. Ich bin der Meinung: Wer heute auf OpenTelemetry setzt, investiert nicht in ein einzelnes Tool, sondern in den offenen Standard für Observability. Breit unterstützt, zukunftsfähig und unabhängig von einzelnen Herstellern.

Hast du Fragen oder benötigst du Hilfe, bei Themen Rund um OpenTelemetry, Monitoring oder Observability? Wir begleiten dich bei jedem Schritt, von der Konzeption bis zur erfolgreichen Umsetzung. Melde dich gerne bei unserem Team für eine unverbindliche Beratung!

Wie hat Dir unser Artikel gefallen?