Observability in JavaScript: Tracing, Metriken und Logs für Node.js

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Ihre Anwendung – eine Blackbox? Zeit, das zu ändern

\n\n

Haben Sie sich schon einmal dabei ertappt zu denken: „Warum läuft mein Node.js-Dienst langsam, obwohl der Code perfekt ist?“ Oder haben Sie eine Beschwerde von einem Benutzer erhalten, konnten aber nicht verstehen, was schiefgelaufen ist? Kommt Ihnen bekannt vor? Willkommen in der Welt, in der Sie ohne Observability in JavaScript im Blindflug arbeiten.

\n\n

Observability ist nicht nur ein Modewort. Es ist ein Ansatz, der Ihren Code von einer Blackbox in ein transparentes System verwandelt. Wir lernen, ihm Fragen zu stellen: „Wer ist schuld?“ (Tracing), „Was passiert gerade jetzt?“ (Metriken) und „Was ist gestern um 3:15 Uhr passiert?“ (Logs).

\n\n

In diesem Artikel behandeln wir die drei Säulen der Observability in Node.js: Tracing, Metriken und Logs. Sie erhalten fertige Codebeispiele und verstehen, wie Sie diese Praktiken noch heute einführen können. Los geht's!

\n\n

Tracing in JavaScript: Die Reise einer Anfrage

\n\n

Stellen Sie sich vor, ein Benutzer klickt auf die Schaltfläche „Bestellung aufgeben“. Diese Anfrage durchläuft das API-Gateway, den Authentifizierungsdienst, den Warenkorb, das Zahlungs-Gateway und die Datenbank. Wenn etwas kaputt geht – wo suchen? Tracing (oder verteiltes Tracing) gibt Ihnen eine Karte dieser Reise.

\n\n

Was ist Tracing in einfachen Worten

\n\n

Tracing ist eine Möglichkeit, den Weg einer bestimmten Anfrage durch alle Microservices und Funktionen zu verfolgen. Jeder Schritt ist ein Span und die gesamte Kette ein Trace. Sie sehen, wie viel Zeit jeder Schritt in Anspruch genommen hat und wo ein Fehler aufgetreten ist.

\n\n

OpenTelemetry: Der Standard für Observability in JavaScript

\n\n

OpenTelemetry (OTel) ist der Industriestandard für die Erfassung von Traces, Metriken und Logs. Es wird von allen großen Cloud-Anbietern und Tools (Jaeger, Zipkin, Grafana) unterstützt.

\n\n

Installation:

\n
npm install @opentelemetry/api @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-node
\n\n

Basisbeispiel für Tracing in einer Express-Anwendung:

\n
const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node');\nconst { SimpleSpanProcessor } = require('@opentelemetry/sdk-trace-base');\nconst { ConsoleSpanExporter } = require('@opentelemetry/exporter-console');\nconst { ExpressInstrumentation } = require('@opentelemetry/instrumentation-express');\nconst { HttpInstrumentation } = require('@opentelemetry/instrumentation-http');\n\nconst provider = new NodeTracerProvider();\nprovider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));\nprovider.register();\n\nconst { getTracer } = require('@opentelemetry/api');\nconst tracer = getTracer('my-app');\n\n// Automatisches Tracing von HTTP und Express\nconst { registerInstrumentations } = require('@opentelemetry/instrumentation');\nregisterInstrumentations({\n  tracerProvider: provider,\n  instrumentations: [\n    new ExpressInstrumentation(),\n    new HttpInstrumentation()\n  ]\n});\n\n// Jetzt erstellt jede Anfrage einen Trace mit Spans\nconst express = require('express');\nconst app = express();\n\napp.get('/api/order', async (req, res) => {\n  // Manueller Span für die Geschäftslogik\n  const span = tracer.startSpan('processPayment');\n  try {\n    // ... Ihre Logik\n    await new Promise(r => setTimeout(r, 100)); // Simulation\n    span.setStatus({ code: 1 }); // OK\n  } catch (err) {\n    span.setStatus({ code: 2, message: err.message }); // ERROR\n    throw err;\n  } finally {\n    span.end();\n  }\n  res.send('Order created');\n});\n\napp.listen(3000);
\n\n

Jetzt sehen Sie in der Konsole strukturierte Daten: welche Anfrage, wie lange jeder Middleware-Schritt gedauert hat, wo ein Fehler aufgetreten ist. Das ist Observability JavaScript in Aktion.

\n\n

Metriken: Der Puls Ihrer Anwendung

\n\n

Tracing ist gut für einzelne Anfragen, aber was ist mit dem Gesamtbild? Wie viele Anfragen pro Sekunde? Welche Latenz? Wie viel Speicher verbraucht Ihr Node.js? Dafür sind Metriken zuständig.

\n\n

Prometheus und Client für Node.js

\n\n

Prometheus ist der De-facto-Standard für die Metrikenerfassung. Es „zieht“ Daten aus Ihrer Anwendung über HTTP.

Blogs

Buchempfehlungen