Prometheus-Metriken in Node.js: Die Bibliothek prom-client für das Monitoring

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

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-client


Nach 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                    

Empfehlungen