Überwachung von TypeScript-Anwendungen: Metriken und Alarme von A bis Z

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

Einleitung: Warum Überwachung für TypeScript-Anwendungen kritisch ist

\n

TypeScript ist ein leistungsstarkes Werkzeug zur Erstellung skalierbarer Webanwendungen, aber selbst der beste Code ist nicht vor Ausfällen in der Produktion gefeit. Ohne ein Überwachungssystem riskieren Sie, Probleme von Benutzern statt von automatischen Alarmen zu erfahren. In diesem Artikel behandeln wir den gesamten Zyklus der Überwachungseinrichtung: von der Metrikerfassung bis zum Versand von Benachrichtigungen.

\n

Wir betrachten die drei wichtigsten Säulen der Observability: Metriken (numerische Systemkennzahlen), Logs (detaillierte Ereignisaufzeichnungen) und Tracing (Verfolgung von Anfragen). Besonderes Augenmerk legen wir auf die Integration mit beliebten Tools – Prometheus, Grafana und Sentry.

\n\n

1. Grundlegende Metriken für TypeScript-Anwendungen

\n

Bevor Sie Alarme einrichten, müssen Sie festlegen, welche Metriken für Ihre Anwendung kritisch sind. Unterteilen wir sie in drei Gruppen:

\n\n

1.1 Geschäftsmetriken

\n

Sie spiegeln die Gesundheit der Anwendung aus Benutzersicht wider:

\n
    \n
  • Anzahl der Anfragen pro Sekunde (RPS) – zeigt die Serverlast an
  • \n
  • Antwortzeit (Latenz) – p50-, p95-, p99-Perzentile
  • \n
  • Anzahl der Fehler – 4xx- und 5xx-Statuscodes
  • \n
  • Aktive Benutzer – Sitzungen, WebSocket-Verbindungen
  • \n
\n\n

1.2 Technische Metriken

\n

Sie zeigen den Zustand der Infrastruktur:

\n
    \n
  • CPU und Arbeitsspeicher – Prozessorauslastung und Speicherlecks
  • \n
  • Event Loop Lag – Verzögerungen in der Ereignisschleife von Node.js
  • \n
  • Garbage Collection – Häufigkeit und Dauer der Speicherbereinigung
  • \n
  • HTTP-Verbindungspool – Anzahl offener Verbindungen
  • \n
\n\n

1.3 Beispiel: Metrikerfassung mit Prometheus in TypeScript

\n

Installieren Sie die Bibliothek prom-client für Node.js:

\n
npm install prom-client @types/prom-client
\n\n

Erstellen Sie eine Datei metrics.ts:

\n
import client from 'prom-client';\nimport express, { Request, Response } from 'express';\n\n// Metrikregister erstellen\nconst register = new client.Registry();\nclient.collectDefaultMetrics({ register });\n\n// Benutzerdefinierte Metrik: Anzahl der HTTP-Anfragen\nconst httpRequestCounter = new client.Counter({\n  name: 'http_requests_total',\n  help: 'Total number of HTTP requests',\n  labelNames: ['method', 'route', 'status_code'],\n  registers: [register],\n});\n\n// Histogramm der Antwortzeit\nconst httpRequestDuration = new client.Histogram({\n  name: 'http_request_duration_seconds',\n  help: 'Duration of HTTP requests in seconds',\n  labelNames: ['method', 'route', 'status_code'],\n  buckets: [0.1, 0.5, 1, 2, 5],\n  registers: [register],\n});\n\n// Middleware zur Metrikerfassung\nexport function metricsMiddleware(req: Request, res: Response, next: Function) {\n  const end = httpRequestDuration.startTimer();\n  res.on('finish', () => {\n    const labels = {\n      method: req.method,\n      route: req.route?.path || 'unknown',\n      status_code: res.statusCode.toString(),\n    };\n    httpRequestCounter.inc(labels);\n    end(labels);\n  });\n  next();\n}\n\n// Endpoint für Prometheus\nexport function metricsEndpoint(req: Request, res: Response) {\n  res.set('Content-Type', register.contentType);\n  res.send(register.metrics());\n}
\n\n

2. Einrichtung von Alarmen: Von der Theorie zur Praxis

\n

Alarme sollten intelligent sein – zu viele Fehlalarme ermüden das Team. Verwenden Sie die "Drei-Sigma"-Regel für Anomalien und Schwellenwerte für kritische Metriken.

\n\n

2.1 Alarmregeln in Prometheus

\n

Erstellen Sie eine Datei alerts.yml:

\n
groups:\n  - name: typescript-app\n    rules:\n      - alert: HighErrorRate\n        expr: |\n          rate(http_requests_total{status_code=~"5.."}[5m]) \n          / \n          rate(http_requests_total[5m]) > 0.05\n        for: 2m\n        labels:\n          severity: critical\n        annotations:\n                

Blogs

Buchempfehlungen