Lexikon · L

Label (Attribut)

Ein Schlüssel-Wert-Paar an Telemetrie, etwa service="checkout", das eine Dimension zum Filtern und Gruppieren ergänzt.

Von Obseria-RedaktionAktualisiert

Definition

Ein Label ist ein Schlüssel-Wert-Paar an einer Metrik, einem Log oder Trace, das eine Dimension der Daten beschreibt, etwa service="checkout" oder region="eu-central-1". Prometheus spricht von Labels, OpenTelemetry von Attributen. Labels machen Telemetrie filter- und gruppierbar, und jede eindeutige Label-Kombination einer Metrik bildet eine eigene Zeitreihe.

Was ein Label ist

Ein Label gibt einem Messwert Kontext. Die Zahl 412 allein sagt nichts; http_requests_total{service="checkout", method="POST", status="500"} 412 verrät, welcher Service, welche Methode und welches Ergebnis gezählt wird. Über Labels schneiden Sie Daten in Abfragen, Dashboards und Alerts nach diesen Dimensionen zu.

Verschiedene Systeme verwenden unterschiedliche Begriffe für dasselbe Konzept:

SystemBegriffBeispiel
PrometheusLabeljob="api", instance="10.0.0.5:9100"
OpenTelemetryAttribut (Resource- oder Signal-Ebene)service.name, http.route
KubernetesLabel (Objekt-Metadaten)app.kubernetes.io/name: checkout
Viele APM-WerkzeugeTag oder Dimensionenv:prod

Wie Labels in Prometheus und OpenTelemetry funktionieren

In Prometheus ist eine Zeitreihe durch ihren Metriknamen und ihr vollständiges Label-Set eindeutig bestimmt; der Name selbst wird intern als Label __name__ gespeichert. Ändert sich ein einziger Label-Wert, entsteht eine andere Zeitreihe. Labels mit doppeltem Unterstrich am Anfang sind für interne Zwecke reserviert, etwa die Labels __meta_kubernetes_pod_label_*, die die Service Discovery beim Relabeling bereitstellt.

OpenTelemetry unterscheidet zwei Ebenen. Resource-Attribute beschreiben die Quelle der Telemetrie, etwa service.name, service.version, k8s.pod.name oder cloud.region, und gelten für alles, was diese Quelle sendet. Signal-Attribute gehören zu einem einzelnen Span, Log-Eintrag oder Metrik-Datenpunkt, etwa http.request.method oder http.response.status_code. Die Semantic Conventions vereinheitlichen diese Namen, damit alle SDKs und Backends dieselben Schlüssel verwenden.

Labels und Kardinalität

Jede eindeutige Kombination von Label-Werten einer Metrik erzeugt eine neue Zeitreihe. Eine Metrik mit 20 Services, 5 Methoden, 10 Statuscodes und 50 Pods kann 50.000 Zeitreihen erreichen. Kommt ein Label mit Nutzer-IDs hinzu, explodiert die Zahl. Deshalb sind Labels der wichtigste Treiber der Kardinalität und damit von Speicherbedarf, Abfragegeschwindigkeit und Kosten in Metriksystemen.

Die Faustregel: Metrik-Labels sollten begrenzte Wertebereiche mit niedriger Kardinalität haben. Unbegrenzte Kennungen wie Nutzer-IDs, Request-IDs oder vollständige URLs gehören an Spans und Logs, wo sie erwartet werden. Auf Metriken verwenden Sie stattdessen Vorlagen wie http.route="/users/{id}" statt roher Pfade. Log-Systeme, die Labels indexieren, etwa Loki, wenden dasselbe Prinzip auf Stream-Labels an.

Beispiel: Relabeling

Relabeling verändert Labels, bevor Daten gespeichert werden. Eine beispielhafte Prometheus-Scrape-Konfiguration, die ein Kubernetes-Label übernimmt und ein verrauschtes Label entfernt:

relabel_configs:
  - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_name]
    target_label: app
metric_relabel_configs:
  - action: labeldrop
    regex: pod_template_hash

relabel_configs wirken vor dem Scrape auf Targets, metric_relabel_configs danach auf die Samples. In OpenTelemetry übernimmt der Collector diese Arbeit, etwa mit den Prozessoren attributes, resource oder transform in einer Telemetrie-Pipeline.

Labels in Kubernetes

In Kubernetes sind Labels nicht nur Metadaten für das Monitoring, die Plattform selbst arbeitet damit. Services, Deployments und NetworkPolicies wählen Pods über Label-Selektoren wie app.kubernetes.io/name=checkout aus. Zum empfohlenen Label-Set gehören app.kubernetes.io/name, app.kubernetes.io/instance, app.kubernetes.io/version, app.kubernetes.io/component, app.kubernetes.io/part-of und app.kubernetes.io/managed-by. Monitoring-Werkzeuge übernehmen diese Labels und machen daraus Prometheus-Labels oder OpenTelemetry-Resource-Attribute, etwa über den Kubernetes-Attributes-Prozessor des Collectors. Saubere Kubernetes-Labels sind damit der günstigste Weg zu einheitlichen Service-Namen und klarer Zuständigkeit in Ihrer gesamten Telemetrie. Einigen Sie sich auf ein kleines Pflicht-Set, etwa Name, Team und Umgebung, und setzen Sie es per Admission Policy durch. So lassen sich neue Workloads nicht mehr ohne diese Labels ausrollen, und Dashboards, Alerts und Kostenauswertungen können sich verlässlich darauf stützen.

Best Practices

  • Konventionen folgen. Nutzen Sie die OpenTelemetry Semantic Conventions und die empfohlenen Kubernetes-Labels, statt pro Team eigene Namen zu erfinden.
  • Über alle Signale konsistent bleiben. Derselbe service.name an Metriken, Logs und Traces macht Korrelation erst möglich.
  • Metrik-Labels begrenzt halten und neue Labels vor dem Produktivgang auf ihren Wertebereich prüfen.
  • Keine Secrets oder personenbezogenen Daten in Labels. Sie landen in Indizes, Dashboards und Alerts.
  • An der Quelle oder in der Pipeline anreichern statt Ad-hoc-Joins zur Abfragezeit.

Typische Fehler

Typische Fehler sind unterschiedliche Schlüssel für dasselbe (env, environment, stage), Zeitstempel oder IDs in Metrik-Labels, Informationen im Metriknamen statt in Labels (requests_checkout_total statt eines Labels service) und Labels, die sich bei jedem Deployment ändern. Letzteres unterbricht die Kontinuität von Zeitreihen in PromQL-Abfragen. Ebenfalls problematisch sind Labels, die nur auf einem Teil der Zeitreihen gesetzt werden: Aggregationen und Joins liefern dann unvollständige Ergebnisse, ohne dass es auf den ersten Blick auffällt. Prüfen Sie neue Labels deshalb in einem Review, genau wie Änderungen an Schnittstellen.

Wie Obseria unterstützt

Obseria übernimmt OpenTelemetry-Attribute und Prometheus-Labels und hält sie über Metriken, Logs und Traces hinweg konsistent, sodass ein Filter auf service.name überall funktioniert. Obseria Lake speichert Logs und Spans indexfrei mit Schema-on-Read, hochkardinale Attribute müssen dort also nicht vorab deklariert werden. Obseria Pipeline kann Attribute beim Ingest anreichern, entfernen oder maskieren. In Kubernetes werden Pod- und Namespace-Metadaten über das Kubernetes-Monitoring automatisch ergänzt.

Häufig gestellte Fragen

Vor allem im Namen. Prometheus und Kubernetes nennen Schlüssel-Wert-Metadaten Labels, OpenTelemetry nennt sie Attribute. OpenTelemetry trennt zusätzlich Resource-Attribute, die die Quelle beschreiben, von Attributen an einzelnen Spans, Logs und Datenpunkten.

Eine feste Grenze gibt es nicht, aber das Produkt der Wertanzahlen aller Labels bestimmt die Zahl der Zeitreihen. Beschränken Sie sich auf Dimensionen, nach denen Sie tatsächlich abfragen und alarmieren, jeweils mit begrenztem Wertebereich.

Auf Metriken nicht: Unbegrenzte Werte erzeugen pro Nutzer eine neue Zeitreihe und treiben Kardinalität und Kosten. Erfassen Sie Nutzer- oder Request-IDs als Attribute an Spans und Logs, wo Details pro Ereignis erwartet werden.

Relabeling schreibt Labels um, bevor Daten gespeichert werden: umbenennen, aus Discovery-Metadaten übernehmen, verrauschte Labels oder ganze Zeitreihen verwerfen. Prometheus nutzt dafür relabel_configs und metric_relabel_configs, OpenTelemetry Prozessoren im Collector.

Setzen Sie das Wissen in die Praxis um

Testen Sie Obseria 14 Tage kostenlos, mit OpenTelemetry und ohne proprietäre Agenten.