Überwachung vs. Beobachtbarkeit: Der wahre Unterschied mit Protokollen, Metriken und Traces
Die Überwachung sagt Ihnen, dass etwas nicht stimmt. Mithilfe der Beobachtbarkeit können Sie herausfinden, warum, selbst wenn es sich um einen Fehler handelt, den Sie nie vorhergesehen haben. Verfolgen Sie einen Kassenvorfall, um zu sehen, wie die beiden zusammenarbeiten.
- Überwachung überwacht bekannte Probleme mithilfe vordefinierter Metriken und Warnungen.
- Beobachtbarkeit gibt an, wie gut Sie den internen Zustand eines Systems anhand seiner Ausgaben verstehen können.
- Protokolle, Metriken und Spuren sind gängige Signale, aber deren Sammlung garantiert keinen Einblick.
- Sie arbeiten zusammen: Die Überwachung schlägt Alarm und die Beobachtbarkeit hilft Ihnen, die Ursache zu finden.
Das Dashboard ist grün, und dennoch beschweren sich Kunden darüber, dass der Checkout kaputt ist. Wenn Sie in dieser Position waren, verstehen Sie bereits den Unterschied zwischen Überwachung und Beobachtbarkeit. Ihre Überwachung hat nur das überprüft, was Sie überprüfen wollten, und dieser Fehler ist etwas Neues.
Dieser Leitfaden erklärt beide Ideen ohne die Marketingsprache und verfolgt einen fiktiven Vorfall von der Warnung bis zur Grundursache. Die Protokolle, Spuren und Zahlen werden erfunden, um den Prozess zu veranschaulichen. Sie sollten auch wissen, dass Anbieter und Praktiker diese Grenze unterschiedlich ziehen und einige sie teilweise als Marketingunterscheidung betrachten. Wir konzentrieren uns auf den praktischen Teil.
Die kurze Antwort
Überwachung ist eine Aktivität. Sie entscheiden im Voraus, was Sie beobachten möchten, z. B. CPU, Fehlerrate oder Speicherplatz, und legen Schwellenwerte fest, die Warnungen auslösen. Es antwortet: „Ist das passiert, worüber ich mir Sorgen gemacht habe?“
Beobachtbarkeit ist eine Eigenschaft Ihres Systems. Der Begriff stammt aus der Kontrolltheorie und beschreibt dort, wie gut man aus seinen externen Ausgängen auf den internen Zustand eines Systems schließen kann. In der Praxis lautet die Antwort: „Was passiert und warum, auch bei Problemen, mit denen ich nie gerechnet habe?“
Denken Sie an ein Auto. Die Warnleuchten auf dem Armaturenbrett überwachen. Sie decken eine Reihe bekannter Probleme ab. Der vollständige Diagnoseanschluss eines Mechanikers, der es jemandem ermöglicht, neue Fragen zu jedem Teil des Motors zu stellen, ist eher beobachtbar.
Überwachung und Beobachtbarkeit nebeneinander
| Aspekt | Überwachung | Beobachtbarkeit |
|---|---|---|
| Hauptfrage | Stimmt etwas nicht? | Warum ist es falsch? |
| Am besten für | Bekannte Fehlermodi | Unbekannte und neuartige Fehler |
| Ansatz | Vordefinierte Prüfungen und Dashboards | Offene Erkundung umfangreicher Daten |
| Typische Ausgabe | Warnungen und Statusdiagramme | Antworten auf neue Fragen |
| Datendetail | Oft zusammengefasst | Ausführlich, wenn möglich auf Anfrage |
| Einrichtung | Konfigurieren Sie Prüfungen von außen | Erfordert die Instrumentierung Ihres Codes |
| Verwendet von | Einsatz, Bereitschaftsdienst | Entwickler und Bereitschaftspersonal |
Dies ist keine Wahl zwischen den beiden. Sie benötigen weiterhin Benachrichtigungen, die Ihnen sagen, wann Sie nachsehen müssen.
Warum Überwachung allein nicht ausreicht
Bei einer Anwendung auf einem Server ist die Liste der Dinge, die schief gehen können, ziemlich kurz, sodass Sie sie alle im Auge behalten können. Ein modernes System verfügt möglicherweise über Dutzende von Diensten, Warteschlangen und APIs von Drittanbietern sowie über Container, die kommen und gehen. Fehler werden zu Kombinationen, die niemand vorhergesehen hat: eine Region, ein Kundentyp, eine bestimmte App-Version und eine einzige langsame Abhängigkeit.
Sie können nicht im Voraus ein Dashboard für eine Frage schreiben, an die Sie noch nicht gedacht haben. Sie benötigen Daten, die es Ihnen ermöglichen, sie im Nachhinein abzufragen.
Protokolle, Metriken und Traces
Diese drei Arten der Telemetrie werden oft als die Säulen der Beobachtbarkeit bezeichnet. Jeder beantwortet eine andere Frage:
| Signal | Was es ist | Antworten | Schwäche |
|---|---|---|---|
| Metriken | Zahlen im Zeitverlauf | Wie viel? Wird es schlimmer? | Wenig Details zu einzelnen Ereignissen |
| Protokolle | Aufzeichnungen einzelner Ereignisse | Was genau ist passiert? | Kann teuer und laut sein |
| Spuren | Der Pfad einer Anfrage durch Dienste | Wo ist die Zeit geblieben? | Erfordern eine Instrumentierung und werden oft gesampelt |
Metriken
http_requests_total{service="checkout", status="500"} 1832
http_request_duration_seconds{service="checkout", quantile="0.95"} 2.4
Metriken sind kostengünstig zu speichern und schnell abzufragen, was sie ideal für Dashboards und Warnungen macht. Seien Sie vorsichtig bei Etiketten mit hoher Kardinalität, wie z. B. einer Benutzer-ID, in vielen metrischen Systemen, da diese die Kosten erheblich erhöhen können.
Spuren
Ein Trace folgt einer Anfrage dienstübergreifend. Jeder Schritt ist eine Spanne mit einer Startzeit und einer Dauer:
POST /checkout 2410 ms
├─ auth-service: verify token 18 ms
├─ cart-service: load cart 42 ms
├─ pricing-service: calculate 2290 ms <-- slow
│ └─ SELECT coupons ... 2265 ms
└─ payment-service: not reached
Ein Trace macht einen langsamen Schritt offensichtlich, der in separaten Protokollen verschiedener Dienste nur sehr schwer zu erkennen ist.
Protokolle
Protokolle liefern detaillierte Informationen darüber, was zu einem bestimmten Zeitpunkt passiert ist. Wir schauen uns gleich an, wie wir sie nützlich machen können.
Eine exemplarische Vorgehensweise für den Vorfall
Hier sehen Sie in einem fiktiven Beispiel, wie die Teile zusammenpassen.
| Schritt | Signal | Was wir lernen |
|---|---|---|
| 1. Feueralarm | Metrisch | Die p95-Latenz beim Auschecken hat ihr 1-Sekunden-Ziel überschritten |
| 2. Zerlegen Sie es | Metrisch | Betroffen ist nur die mobile App, nicht das Web |
| 3. Überprüfen Sie eine Anfrage | Spur | Die Zeit liegt im Preisservice, bei einer Coupon-Abfrage |
| 4. Lesen Sie die Details | Protokolle | Bei langsamen Anfragen wird für alle ein Gutschein aus der heutigen Kampagne verwendet |
| 5. Bestätigen Sie die Ursache | Abfrageplan | Coupon-Suche hat keinen passenden Index |
| 6. Reparieren Sie es | Bereitstellung | Fügen Sie den Index hinzu und beobachten Sie, wie sich die Latenz erholt |
Die Überwachung behandelte Schritt 1. Alles danach war Beobachtbarkeit. Beachten Sie, wie jede Frage aus der vorherigen Antwort hervorgegangen ist. Niemand hätte im Voraus ein Dashboard für die „Abfrage von Gutscheinen für mobile Apps aus der heutigen Kampagne“ erstellen können. Für den Fix selbst zeigt unser Leitfaden zur SQL-Abfrageoptimierung, wie man einen solchen Plan liest.
Bessere Protokolle
Nur-Text-Protokolle sind für das menschliche Auge gemacht und schwer abzufragen. Strukturierte Protokolle verwenden Felder, nach denen eine Maschine filtern kann:
# Hard to search
ERROR Payment failed for user 42 after 3 tries
# Easy to search
{"level":"error","event":"payment_failed","user_id":"42",
"attempts":3,"provider":"acme","trace_id":"a1b2c3","duration_ms":2410}
Mit dem zweiten Formular können Sie sofort fragen: „Wie viele Ausfälle pro Anbieter in der letzten Stunde?“ Das Feld trace_id ist besonders wertvoll, da es eine Protokollzeile mit der gesamten Anfrage verknüpft, und zwar über jeden Dienst hinweg, den sie berührt.
Protokollieren Sie niemals Passwörter, Token oder Kartennummern und gehen Sie vorsichtig mit persönlichen Daten um. Wie unser Leitfaden erklärt, können JWTs von jedem wiederverwendet werden, der sie aus einem Protokoll liest.
Tipp: Fügen Sie den Kontext hinzu, den Sie während eines Vorfalls benötigen, z. B. Version, Region, Kundenstufe und Feature-Flag-Status. Die Aussage „nur Version 2.14 in einer Region“ löst das Problem oft von alleine.
Die goldenen Signale
Sie sind sich nicht sicher, was Sie überwachen sollen? Das Site Reliability Engineering-Buch von Google schlägt vier Signale für benutzerorientierte Systeme vor:
| Signal | Frage | Beispiel |
|---|---|---|
| Latenz | Wie lange dauern Anfragen? | p95- und p99-Reaktionszeit |
| Verkehr | Wie groß ist die Nachfrage? | Anfragen pro Sekunde |
| Fehler | Wie viele Anfragen schlagen fehl? | Rate von 5xx Antworten |
| Sättigung | Wie voll ist das System? | CPU-, Speicher- und Verbindungspoolnutzung |
Verwenden Sie Perzentile für die Latenz, da Durchschnittswerte langsame Anfragen verbergen, wie wir in Lasttests im Vergleich zu Stresstests gezeigt haben.
Warnt Menschen, denen Menschen vertrauen
Wenn ständig Warnungen ausgelöst werden, hören die Leute auf, sie zu lesen. Gute befolgen einige Regeln:
- Warnung zu Symptomen, die Benutzer spüren. „Checkout-Fehler über 2 %“ schlägt „CPU bei 85 %“. Eine hohe CPU, die niemandem schadet, sollte niemanden aufwecken.
- Machen Sie jede Warnung umsetzbar. Wenn niemand etwas tun muss, machen Sie sie zu einem Dashboard-Element oder entfernen Sie sie.
- Link zu einem Runbook. Sagen Sie dem Antwortenden, wo er suchen und was er ausprobieren soll.
- Überprüfen Sie sie regelmäßig. Löschen oder korrigieren Sie alle Warnungen, die letzten Monat ignoriert wurden.
Service-Level-Ziele
Ein SLO verwandelt „die Website sollte schnell und zuverlässig sein“ in ein messbares Ziel, wie zum Beispiel „99,9 % der Checkout-Anfragen innerhalb von 30 Tagen erfolgreich“. Dies ermöglicht etwa 0,1 % der Ausfälle, was als Fehlerbudget bezeichnet wird. Wenn Sie noch viel übrig haben, können Sie schneller versenden, und wenn es fast aufgebraucht ist, können Sie der Zuverlässigkeit Priorität einräumen. Dies ist eine hilfreiche Möglichkeit, Streitigkeiten zwischen Liefergeschwindigkeit und Stabilität beizulegen.
OpenTelemetry und Tools
OpenTelemetry ist ein herstellerneutraler Open-Source-Standard zum Generieren und Exportieren von Telemetriedaten. Es handelt sich um ein Projekt der Cloud Native Computing Foundation. Durch die Instrumentierung können Sie Ihr Backend später ändern, ohne Ihren Code neu schreiben zu müssen. Da es sich selbst nicht um ein Speicher- oder Dashboard-Produkt handelt, koppeln Sie es mit einem:
| Zweck | Open-Source-Beispiele | Kommerzielle Beispiele |
|---|---|---|
| Metriken | Prometheus | Datadog, neues Relikt |
| Dashboards | Grafana | Datadog, Dynatrace |
| Protokolle | Loki, OpenSearch | Splunk, elastisch |
| Spuren | Jäger, Tempo | Honeycomb, Datadog |
Überprüfen Sie selbst die aktuellen Funktionen und Preise, da sich diese Produkte häufig ändern. Mit der Datenmenge können die Kosten schnell steigen. Nutzen Sie daher Stichproben und legen Sie Aufbewahrungsgrenzen fest.
So fangen Sie an
- Beginnen Sie mit den goldenen Signalen für Ihren wichtigsten Dienst.
- Fügen Sie eine oder zwei Warnungen hinzu zu Symptomen, die Benutzer bemerken.
- Wechseln Sie zu strukturierten Protokollen mit einer Anforderungs-ID in jeder Zeile.
- Fügen Sie Tracing zu Ihrer Hauptbenutzerreise mit OpenTelemetry hinzu, da die automatische Instrumentierung viele gängige Frameworks abdecken kann.
- Verknüpfen Sie Bereitstellungen mit Ihren Diagrammen, damit Sie sehen können, ob eine Veröffentlichung aus Ihrer CI/CD-Pipeline eine Änderung verursacht hat.
- Lernen Sie aus jedem Vorfall. Fragen Sie nach jedem Vorfall, welche Daten eine schnellere Lösung ermöglicht hätten, und fügen Sie diese hinzu.
Ein kleines Team mit einem Service benötigt keine riesige Plattform. Grundlegende Messwerte, gute Protokolle und ein paar Warnungen können ausreichend sein. Die Rückverfolgung verdient ihren Lebensunterhalt, da die Zahl der Dienste wächst.
Häufige Fehler
- Ein Tool kaufen und es Beobachtbarkeit nennen. Der Wert ergibt sich aus einer guten Instrumentierung und der Art und Weise, wie Sie die Daten nutzen.
- Drei Säulen als Checkliste behandeln. Wenn Sie Daten ohne Möglichkeit zur Verknüpfung trennen, müssen Sie sich durch Tabs wühlen. Geteilte IDs sind wichtig.
- Alles sammeln. Ungefilterte Telemetrie wird teuer und verursacht zusätzliches Rauschen.
- Zu viele Dashboards. Ein paar vertrauenswürdige Ansichten sind besser als hundert, die niemand öffnet.
- Ich denke, es ersetzt das Testen. Sie benötigen vor der Veröffentlichung noch Tests. Canary-Veröffentlichungen passen jedoch gut zu diesen Signalen.
Fazit
Die Überwachung sagt Ihnen, dass etwas schief gelaufen ist, und die Beobachtbarkeit gibt Ihnen die Möglichkeit, herauszufinden, warum. Der praktische Test ist einfach: Wenn ein unbekanntes Problem auftritt, können Sie die Ursache finden, ohne neuen Code zu versenden? Wenn Sie das nächste Mal in einen Vorfall verwickelt werden, schreiben Sie jede Frage auf, die Sie nicht beantworten konnten. Diese Liste ist Ihre Roadmap.
Häufige Fragen
Was ist der Unterschied zwischen Überwachung und Observability?
Die Überwachung verfolgt vordefinierte Metriken und Warnungen zu bekannten Problemen. Beobachtbarkeit ist die Fähigkeit, den Zustand eines Systems anhand seiner Ausgaben zu verstehen, auch bei unerwarteten Problemen.
Was sind die drei Säulen der Beobachtbarkeit?
Es handelt sich um Protokolle, Metriken und Traces. Protokolle zeichnen Ereignisse auf, Metriken messen Werte im Zeitverlauf und Traces folgen einer einzelnen Anfrage dienstübergreifend.
Benötige ich Beobachtbarkeit, wenn ich über eine Überwachung verfüge?
Für ein kleines, einfaches System können gute Überwachung und Protokolle ausreichen. Je verteilter Systeme werden und Ausfälle weniger vorhersehbar sind, desto wertvoller wird die Beobachtbarkeit.
Was ist OpenTelemetry?
Es handelt sich um einen Open-Source-Standard und eine Reihe von Tools zum Erstellen und Exportieren von Protokollen, Metriken und Traces, sodass Sie nicht an den Agenten eines einzelnen Anbieters gebunden sind.
Was sind die vier goldenen Signale?
Dies sind Latenz, Datenverkehr, Fehler und Sättigung. Die SRE-Leitlinien von Google empfehlen diese als Ausgangspunkt für die Überwachung benutzerorientierter Systeme.
Lerne weiter
Benötigen Sie Hilfe beim Testen, WordPress oder SEO?
Wir helfen Teams, bessere Software zu liefern und ihre Websites zu erweitern. Sagen Sie uns, woran Sie gerade arbeiten, und wir schlagen Ihnen einen klaren nächsten Schritt vor.
Weitere Anleitungen finden Sie unter Tests, KI und moderne Entwicklung
Hat Ihnen dieser Artikel gefallen? Wählen Sie ein Thema und springen Sie direkt in unsere neuesten Tutorials.
KI-Halluzinationen erklärt: Warum Sprachmodelle Dinge erfinden und wie man sie reduziert
KI-Halluzinationen erklärt: Was sie sind, warum Sprachmodelle sie produzieren, gängige Typen, wie man sie mit Erdung und Eingabeaufforderungen reduz…
Artikel lesen →DevOpsErklärte Umgebungsvariablen: .env-Dateien, Geheimnisse und Konfiguration richtig gemacht
Umgebungsvariablen anhand von Python-Beispielen erklärt, die wir ausgeführt haben: Sie lesen und festlegen, warum jeder Wert ein String ist, .env-Da…
Artikel lesen →SoftwareentwicklungAPI-Ratenbegrenzung erklärt: Algorithmen, Header und Behandlung von 429-Fehlern
API-Ratenbegrenzung anhand einer von uns durchgeführten Simulation erklärt: Token-Bucket, festes Fenster, gleitendes Fenster, 429 Antworten, Ratenbe…
Artikel lesen →TestautomatisierungSpott in Python: unittest.mock, Patch und die Fehler, die Tests zum Lügen machen
Mocking in Python mit unittest.mock, getestet: Mock und return_value, side_effect, Patchen, wo ein Name verwendet wird, Spezifikation und Autospec, …
Artikel lesen →SoftwaretestsCode-Abdeckung erklärt: Leitungs- und Zweigstellenabdeckung und was 100 % wirklich bedeutet
Erklärung der Codeabdeckung anhand eines echten Coverage.py-Laufs: Zeilen-, Zweig- und Bedingungsabdeckung, Lesen eines Berichts, warum bei 100 % Ab…
Artikel lesen →Datenbanken & SQLDELETE vs. TRUNCATE vs. DROP in SQL: Unterschiede, Rollback und Verwendungszweck
DELETE vs. TRUNCATE vs. DROP erklärt mit getestetem SQL: was jeweils entfernt wird, Rollback, Trigger, Identitätsrücksetzung, Geschwindigkeit und wi…
Artikel lesen →Datenbanken & SQLErklärte SQL-Ansichten: Erstellen, nutzen und vermeiden Sie Fallstricke mit Beispielen
SQL-Ansichten anhand der von uns ausgeführten Abfragen erklärt: Erstellen einer Ansicht, Live-Ergebnisse, Ausblenden von Spalten, Leistung, aktualis…
Artikel lesen →SoftwareentwicklungTypeScript-Schnittstelle vs. Typ: Echte Unterschiede, getestet mit dem Compiler
TypeScript-Schnittstelle vs. Typ, überprüft mit dem echten Compiler: Was beide können, was nur einer kann, Deklarationszusammenführung, Erweiterunge…
Artikel lesen →SoftwareentwicklungPython *args und **kwargs erklärt: Flexible Funktionen mit klaren Beispielen
Python *args und **kwargs erklärt mit Code, den wir ausgeführt haben: Packen und Entpacken, Parameterreihenfolge, Nur-Schlüsselwort- und Nur-Positio…
Artikel lesen →SoftwareentwicklungPython-Lambda-Funktionen: Syntax, tatsächliche Verwendung und wann man sie nicht verwendet
Python-Lambda-Funktionen erklärt mit Code, den wir ausgeführt haben: Syntax, Sortierung mit Schlüssel, Karte und Filter, Abschlüsse, die Late-Bindin…
Artikel lesen →Künstliche IntelligenzWas sind KI-Agenten? Wie sie funktionieren, mit einer einfachen Agentenschleife, die Sie ausführen können
Was sind KI-Agenten? Eine einfache Anleitung zur Agentenschleife, zu Tools, Speicher und Leitplanken, mit einer kleinen Python-Schleife, die wir aus…
Artikel lesen →DevOpsÜberwachung vs. Beobachtbarkeit: Der wahre Unterschied, mit Protokollen, Metriken und Traces
Überwachung vs. Beobachtbarkeit erklärt: bekannte und unbekannte Fehler, Protokolle, Metriken und Spuren, eine exemplarische Vorgehensweise für Chec…
Artikel lesen →DevOpsDocker-Volumes vs. Bind Mounts: Containerdaten auf die richtige Art und Weise beibehalten
Docker-Volumes vs. Bind-Mounts erklärt: Warum Containerdaten verschwinden, benannte Volumes, Bind-Mounts, tmpfs, Compose-Beispiele, Backups, Berecht…
Artikel lesen →TestautomatisierungTDD vs. BDD: Hauptunterschiede, eine Funktion, die auf beide Arten entwickelt wurde und wann sie jeweils verwendet werden sollte
TDD vs. BDD erklärt mit einer Rabattfunktion, die in beide Richtungen aufgebaut ist: Rot-Grün-Refaktor mit Code, den wir ausgeführt haben, Gegeben-W…
Artikel lesen →SoftwareentwicklungGit merge vs rebase: Unterschiede, Beispiele und wann man was nutzt
Git merge vs rebase erklärt mit echter Log-Ausgabe, einer Vergleichstabelle, der goldenen Regel des Rebase und einem sicheren Team-Workflow.
Artikel lesen →SoftwareentwicklungPython List Comprehension: Syntax, Beispiele und wann man darauf verzichtet
Python List Comprehension erklärt: Syntax, Filter, if-else, verschachtelte Schleifen, gemessene Zeiten und Fälle, in denen eine normale for-Schleife…
Artikel lesen →Datenbanken & SQLSQL Joins erklärt mit Beispielen (Inner, Left, Right, Full)
SQL Joins Schritt für Schritt mit Beispieltabellen und Abfragen verstehen: INNER, LEFT, RIGHT, FULL, CROSS und SELF, plus typische Fehler und Perfor…
Artikel lesen →