Prometheus-Metriken in Node.js: Bibliothek prom-client

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

Prometheus-Metriken in Node.js: Bibliothek prom-client

\n\n

Prometheus ist ein leistungsstarkes Open-Source-System für Monitoring und Alarmierung, das Metriken aus Ihren Anwendungen und Ihrer Infrastruktur sammelt. Für die Integration von Prometheus mit Node.js-Anwendungen gibt es die offizielle und am weitesten verbreitete Bibliothek prom-client. Sie bietet fertige Werkzeuge zum Erstellen, Registrieren und Exportieren von Metriken in einem Format, das Prometheus versteht.

\n\n

In diesem Artikel werden wir im Detail besprechen, wie man prom-client installiert und verwendet, welche Metriktypen verfügbar sind und wie man einen Endpunkt für die Datenerfassung einrichtet.

\n\n

Installation von prom-client

\n\n

Die Installation der Bibliothek erfolgt mit dem Standard-Paketmanager npm:

\n\n
npm install prom-client
\n\n

Nach der Installation können Sie die Bibliothek in Ihr Projekt importieren:

\n\n
const client = require('prom-client');
\n\n

Wichtige Metriktypen von Prometheus

\n\n

Prometheus unterstützt vier Hauptmetriktypen, von denen jeder eine bestimmte Aufgabe erfüllt:

\n\n
    \n
  • Counter — ein Zähler, der nur erhöht werden kann (z. B. Anzahl der Anfragen, Fehler).
  • \n
  • Gauge — ein Wert, der sowohl erhöht als auch verringert werden kann (z. B. Anzahl aktiver Benutzer, Speichernutzung).
  • \n
  • Histogram — ein Histogramm zur Messung der Werteverteilung (z. B. Antwortzeit von Anfragen).
  • \n
  • Summary — ähnlich wie Histogramm, berechnet jedoch Quantile auf der Anwendungsseite.
  • \n
\n\n

Beispiele zur Verwendung von prom-client

\n\n

Betrachten wir die Erstellung jedes Metriktyps am Beispiel einer einfachen Express-Anwendung.

\n\n

1. Counter (Zähler)

\n\n

Der Counter eignet sich ideal zum Zählen von Ereignissen wie HTTP-Anfragen oder Fehlern.

\n\n
const httpRequestsCounter = new client.Counter({\n  name: 'http_requests_total',\n  help: 'Total number of HTTP requests',\n  labelNames: ['method', 'status']\n});\n\n// Verwendung:\nhttpRequestsCounter.inc({ method: 'GET', status: 200 });\nhttpRequestsCounter.inc({ method: 'POST', status: 500 });
\n\n

2. Gauge (Messer)

\n\n

Der Gauge ermöglicht die Verfolgung eines aktuellen Werts, der sich in beide Richtungen ändern kann.

\n\n
const activeUsersGauge = new client.Gauge({\n  name: 'active_users',\n  help: 'Number of active users'\n});\n\n// Um 1 erhöhen:\nactiveUsersGauge.inc();\n// Um 1 verringern:\nactiveUsersGauge.dec();\n// Bestimmten Wert setzen:\nactiveUsersGauge.set(42);
\n\n

3. Histogram (Histogramm)

\n\n

Das Histogramm hilft bei der Analyse der Verteilung von Ausführungszeiten von Operationen.

\n\n
const requestDurationHistogram = new client.Histogram({\n  name: 'http_request_duration_seconds',\n  help: 'Duration of HTTP requests in seconds',\n  labelNames: ['method', 'route'],\n  buckets: [0.1, 0.5, 1, 2, 5] // Grenzen der Buckets (in Sekunden)\n});\n\n// Zeitmessung:\nconst end = requestDurationHistogram.startTimer();\n// ... Ausführung der Anfrage ...\nend({ method: 'GET', route: '/api/users' });
\n\n

4. Summary (Zusammenfassung)

\n\n

Die Summary ähnelt dem Histogramm, liefert jedoch genaue Quantile (z. B. Median, 95. Perzentil).

\n\n
const requestDurationSummary = new client.Summary({\n  name: 'http_request_duration_summary_seconds',\n  help: 'Summary of HTTP request duration in seconds',\n  labelNames: ['method', 'route'],\n  percentiles: [0.5, 0.9, 0.99] // Quantile zur Berechnung\n});\n\n// Verwendung analog zum Histogramm:\nconst endSummary = requestDurationSummary.startTimer();\n// ... Ausführung der Anfrage ...\nendSummary({ method: 'GET', route: '/api/data' });
\n\n

Einrichtung des Endpunkts für Prometheus

\n\n

Damit Prometheus Metriken sammeln kann, muss ein separater HTTP-Endpunkt (normalerweise /metrics) erstellt werden, der die Da

Empfehlungen