Überwachung von JavaScript-Anwendungen (Node.js): Vollständiger Überblick über Tools und Praktiken
Die Entwicklung mit Node.js ist leistungsstark, aber ohne richtiges Monitoring kann Ihre Anwendung zu einer „Black Box“ werden. In diesem Artikel behandeln wir die wichtigsten Tools und Bibliotheken, die Ihnen helfen, den Zustand serverseitiger JavaScript-Anwendungen zu verfolgen, Engpässe zu identifizieren und Ausfälle zu verhindern.
Warum ist Node.js-Monitoring notwendig?
Node.js arbeitet in einem Single-Threaded Event Loop, daher kann jede blockierende Operation (z. B. eine schwere Schleife oder synchrones Lesen einer Datei) die gesamte Anwendung lahmlegen. Ohne Monitoring riskieren Sie:
- Speicherlecks zu übersehen — der GC kommt nicht nach, die Anwendung stürzt ab.
- Ansteigende Antwortzeiten nicht zu bemerken — Benutzer gehen verloren.
- Die Kontrolle über Fehler zu verlieren — unbehandelte Rejections töten den Prozess.
1. Integrierte Node.js-Mittel
Beginnen wir mit dem, was bereits im Kern vorhanden ist. Node.js bietet die Module process und perf_hooks für die grundlegende Metrik-Erfassung.
// Beispiel: Erfassung von Speicher- und Antwortzeitmetrikenconst { performance, PerformanceObserver } = require('perf_hooks');
// Event Loop überwachenconst obs = new PerformanceObserver((items) => { const entry = items.getEntries()[0]; console.log(`Event Loop Verzögerung: ${entry.duration}ms`);});obs.observe({ entryTypes: ['function'] });
// Ausführungszeit einer Funktion messenperformance.mark('start');// ... Ihr Code ...performance.mark('end');performance.measure('myFunction', 'start', 'end');
// Speicher überwachensetInterval(() => { const memory = process.memoryUsage(); console.log(`RSS: ${memory.rss}, Heap: ${memory.heapUsed}`);}, 5000);2. PM2 — Prozessmanager mit Monitoring
PM2 ist der De-facto-Standard für Node.js in der Produktion. Es verwaltet nicht nur Prozesse, sondern bietet auch integriertes Monitoring über den Befehl pm2 monit.
- Automatischer Neustart bei Prozessabstürzen.
- Metrik-Erfassung: CPU, Speicher, Anzahl der Anfragen.
- Protokollierung von stdout/stderr.
- Cluster-Modus für maximale Auslastung der Kerne.
// Installation und Startnpm install pm2 -gpm2 start app.js --name "my-app" --instances max
// Integriertes Monitoringpm2 monit
// Export von Metriken als JSONpm2 jlist > metrics.jsonFür erweitertes Monitoring verwenden Sie pm2-metrics — ein Plugin, das Daten an Prometheus sendet.
3. Clinic.js — Leistungsdiagnose
Clinic.js ist eine Tool-Suite von NearForm zur Profilerstellung von Node.js. Sie umfasst drei Dienstprogramme:
- Clinic Doctor — allgemeine Diagnose (Event Loop, GC, I/O).
- Clinic Bubbleprof — Analyse asynchroner Operationen.
- Clinic Flame — Flame-Graphen zur Suche nach heißen Funktionen.
// Installationnpm install -g clinic
// Start mit Lasttestclinic doctor -- node app.js
// Dann in einem anderen Terminal:autocannon localhost:3000
// Nach dem Stoppen wird ein HTML-Bericht mit Visualisierung geöffnetClinic.js ist besonders nützlich, um Probleme mit dem Event Loop zu identifizieren (hohe Latenz, häufige GC-Pausen).
4. Prometheus + Node.js — benutzerdefinierte Metriken
Prometheus ist der Standard für die Metrik-Erfassung in der Microservice-Architektur. Für Node.js verwenden Sie die Bibliothek prom-client.
const prometheus = require('prom-client');
// Erstellen eines Anfragenzählersconst httpRequestsTotal = new prometheus.Counter({ name: 'http_requests_total', help: 'Total number of HTTP requests', labelNames: ['method', 'route', 'status']});
// Histogramm der Antwortzeitconst httpRequestDuration = new prometheus.Histogram({ name: 'http Auch in der Bibliothek
Elasticsearch-Client für Rust: Offizielle Bibliothek elasticsearch-rs
Swinject Swift: Dependency Injection leicht gemacht – Komplettguide
SMS-Versand in C++: API-Bibliotheken libcurl und cpprestsdk