Die Bibliothek prom-client: Monitoring von Node.js-Anwendungen mit Prometheus
In der modernen Webentwicklung ist das Monitoring der Leistung und des Zustands von Anwendungen zu einer Notwendigkeit geworden. Eine der beliebtesten Lösungen für die Erfassung und Analyse von Metriken ist Prometheus – ein Open-Source-System, das Daten in Form von Zeitreihen sammelt. Für die Integration mit Node.js gibt es die offizielle Bibliothek prom-client, mit der Sie Metriken einfach in einem für Prometheus verständlichen Format exportieren können.
In diesem Artikel werden wir im Detail besprechen, wie man prom-client installiert und verwendet, welche Metriktypen verfügbar sind und wie man sie in das Web-Framework Express integriert.
Installation und Einbindung
Installieren Sie zunächst die Bibliothek über npm:
npm install prom-clientNach der Installation importieren Sie sie in Ihre Anwendung:
const prometheus = require('prom-client');const express = require('express');const app = express();Wichtige Metriktypen
Die Bibliothek prom-client unterstützt vier Haupttypen von Prometheus-Metriken:
- Counter – ein Zähler, der nur erhöht werden kann (z. B. Anzahl der Anfragen).
- Gauge – ein Wert, der sowohl erhöht als auch verringert werden kann (z. B. Anzahl aktiver Verbindungen).
- Histogram – ein Histogramm, das die Verteilung von Werten misst (z. B. Antwortzeit).
- Summary – eine zusammenfassende Statistik, ähnlich wie Histogram, jedoch mit präziseren Quantilen.
Beispiel: Counter (Anfragenzähler)
Erstellen wir einen Zähler zur Verfolgung der Gesamtzahl der HTTP-Anfragen:
const httpRequestsTotal = new prometheus.Counter({ name: 'http_requests_total', help: 'Total number of HTTP requests', labelNames: ['method', 'route', 'status']});
// Middleware zum Zählen der Anfragenapp.use((req, res, next) => { res.on('finish', () => { httpRequestsTotal.inc({ method: req.method, route: req.path, status: res.statusCode }); }); next();});Beispiel: Gauge (aktive Verbindungen)
Gauge eignet sich zur Verfolgung des aktuellen Zustands, z. B. der Anzahl aktiver Benutzer:
const activeUsers = new prometheus.Gauge({ name: 'active_users', help: 'Number of active users'});
app.get('/login', (req, res) => { activeUsers.inc(); // Erhöhen beim Einloggen res.send('Logged in');});
app.get('/logout', (req, res) => { activeUsers.dec(); // Verringern beim Ausloggen res.send('Logged out');});Beispiel: Histogram (Antwortzeit)
Histogram ermöglicht es zu messen, wie lange die Verarbeitung von Anfragen dauert:
const httpRequestDuration = new prometheus.Histogram({ name: 'http_request_duration_seconds', help: 'Duration of HTTP requests in seconds', labelNames: ['method', 'route'], buckets: [0.1, 0.5, 1, 2, 5] // Grenzen der Buckets in Sekunden});
app.use((req, res, next) => { const end = httpRequestDuration.startTimer(); res.on('finish', () => { end({ method: req.method, route: req.path }); }); next();});Export von Metriken für Prometheus
Damit Prometheus Daten sammeln kann, müssen Sie einen Endpoint (normalerweise /metrics) erstellen, der alle registrierten Metriken zurückgibt:
app.get('/metrics', async (req, res) => { res.set('Content-Type', prometheus.register.contentType); res.end(await prometheus.register.metrics());});
app.listen(3000, () => { console.log('Server running on port 3000');});Benutzerdefinierte Metriken mit Labels
Sie können Labels (Markierungen) für eine detailliertere Filterung hinzufügen. Beispielsweise unterteilen wir die Metriken nach API-Versionen:
const apiCalls = new prometheus.Counte Auch in der Bibliothek
Caching in Node.js: Redis und Alternativen zur Beschleunigung von Anwendungen
Arbeiten mit CSV in Kotlin: Bibliotheken und Codebeispiele
Abseil C++: Vollständiges Tutorial mit Code-Beispielen
HTML-Parsing in C# (.NET): Bibliotheken HtmlAgilityPack und AngleSharp
Geolokalisierung und Karten in PHP: Bibliotheken, APIs und Codebeispiele