Monitoring von JavaScript-Anwendungen: Metriken und Alarme auf fortgeschrittenem Niveau

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

Monitoring von JavaScript-Anwendungen: Metriken und Alarme (fortgeschrittenes Niveau)



Moderne JavaScript-Anwendungen auf Node.js werden immer komplexer: Mikroservices, Event-driven Architekturen, Echtzeitsysteme. Ein einfaches "Lebt/liegt"-Monitoring reicht nicht mehr aus, um ein vollständiges Bild zu erhalten. Für Stabilität und hohe Leistung ist ein fortgeschrittener Ansatz erforderlich: Erfassung von Geschäftsmetriken, Latenzanalyse, Einrichtung intelligenter Alarme und Observability. In diesem Artikel besprechen wir, wie man ein Monitoringsystem auf fortgeschrittenem Niveau mit Node.js, Prometheus und Grafana aufbaut.



1. Schlüsselmetriken für Node.js-Anwendungen



Monitoring beginnt mit der richtigen Auswahl von Metriken. Für die Produktionsumgebung sind drei Gruppen kritisch:



  • RED-Metriken (Rate, Errors, Duration) – Anfragehäufigkeit, Anzahl der Fehler, Antwortzeit.
  • USE-Metriken (Utilization, Saturation, Errors) – CPU-Auslastung, Speichernutzung, Anzahl offener Dateideskriptoren.
  • Geschäftsmetriken – Anzahl aktiver Benutzer, Warteschlangengröße, Ereignisverarbeitungsgeschwindigkeit.


Beispiel für die Erfassung von Metriken mit der Bibliothek prom-client:



const client = require('prom-client');const httpRequestDuration = new client.Histogram({    name: 'http_request_duration_seconds',    help: 'Duration of HTTP requests in seconds',    labelNames: ['method', 'route', 'status_code'],    buckets: [0.1, 0.3, 0.5, 1, 3, 5]});

app.use((req, res, next) => { const end = httpRequestDuration.startTimer(); res.on('finish', () => { end({ method: req.method, route: req.route?.path || 'unknown', status_code: res.statusCode }); }); next();});


Ebenso wichtig ist die Überwachung von Garbage Collection (GC) und Event Loop Lag – dies hilft, Leistungsprobleme zu erkennen, bevor sie kritisch werden.



2. Einrichtung von Alarmen: vom Einfachen zum Intelligenten



Alarme sind nicht nur Benachrichtigungen über Serverausfälle. Auf fortgeschrittenem Niveau sollten Alarme sein:



  • Kontextbezogen – Berücksichtigung von Tageszeit, Wochentag, Geschäftszyklen.
  • Mehrstufig – Warning, Critical, Pager.
  • Prädiktiv – basierend auf Trends (z. B. Anstieg der Latenz um 20% in 15 Minuten).


Beispiel für eine Regel für den Prometheus Alertmanager mit Prognose:



groups:  - name: nodejs_alerts    rules:      - alert: HighErrorRate        expr: rate(http_requests_errors_total[5m]) / rate(http_requests_total[5m]) > 0.05        for: 2m        labels:          severity: critical        annotations:          summary: "Hohe Fehlerrate ({{ $value | humanizePercentage }})"          description: "Mehr als 5% der Anfragen geben in den letzten 2 Minuten Fehler zurück."

- alert: MemoryLeak expr: predict_linear(nodejs_heap_bytes_used{space="total"}[30m], 3600) > 1e9 for: 5m labels: severity: warning annotations: summary: "Vorhergesagter Speicherleck" description: "Die Heap-Nutzung könnte in einer Stunde 1GB überschreiten."


Es ist wichtig, Deduplizierung und Gruppierung von Alarmen einzurichten, um den diensthabenden Ingenieur nicht mit Hunderten gleichartiger Nachrichten zu überfluten. Verwenden Sie group_wait und group_interval in der Alertmanager-Konfiguration.



3. Fortgeschrittenes Logging: strukturierte Logs und Tracing



Das Standard-console.log ist für die Produktion nicht geeignet. Verwenden Sie strukturiertes Logging mit den Bibliotheken pino oder winston im JSON-Format. Dies ermöglicht einfaches Parsen von Logs und deren Integration mit Aggregationssystemen (ELK, Loki).



Beispiel für die Einrichtung von pino:



const pino = require('pino');const logger = pino({    level: process.env.LOG_LEVEL ||                

Blogs

Buchempfehlungen