Prometheus-Metriken in TypeScript: Vollständiger Leitfaden zu client.js

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 TypeScript: Praxisleitfaden



Prometheus ist ein leistungsstarkes Open-Source-System für Monitoring und Alarmierung. Für die Integration in TypeScript-Anwendungen wird die Bibliothek prom-client (Prometheus Client) verwendet. Sie ermöglicht das Sammeln, Aggregieren und Exportieren von Metriken in einem Format, das der Prometheus-Server versteht. In diesem Artikel gehen wir detailliert darauf ein, wie man mit Prometheus-Metriken in TypeScript arbeitet, einschließlich Metriktypen, Codebeispielen und Best Practices.



Installation und Konfiguration



Installieren Sie zunächst das Paket über npm:

npm install prom-client


Für TypeScript müssen auch die Typen installiert werden:

npm install @types/prom-client --save-dev


Erstellen Sie nach der Installation eine Datei metrics.ts zur Initialisierung des Clients:



import client from 'prom-client';

// Standardmetriken aktivieren (GC, Speicher, CPU)const collectDefaultMetrics = client.collectDefaultMetrics;collectDefaultMetrics({ timeout: 5000 });

// Register zum Speichern der Metriken erstellenconst register = client.register;

export { client, register };


Wichtige Prometheus-Metriktypen



Prometheus unterstützt vier Hauptmetriktypen. Sehen wir uns jeden mit TypeScript-Beispielen an.



1. Counter (Zähler)

Wird zum Zählen von Ereignissen verwendet, die nur steigen (Anfragen, Fehler).



import { Counter } from 'prom-client';

const httpRequestsTotal = new Counter({ name: 'http_requests_total', help: 'Gesamtzahl der HTTP-Anfragen', labelNames: ['method', 'path', 'status_code'],});

// Zähler bei einer Anfrage erhöhenhttpRequestsTotal.inc({ method: 'GET', path: '/api', status_code: 200 });httpRequestsTotal.inc({ method: 'POST', path: '/users', status_code: 201 }, 2); // +2


2. Gauge (Messwert)

Kann steigen und fallen. Wird für aktuelle Werte verwendet (Speicher, Warteschlange).



import { Gauge } from 'prom-client';

const memoryUsageGauge = new Gauge({ name: 'memory_usage_bytes', help: 'Aktuelle Speichernutzung in Bytes',});

// Wert setzenmemoryUsageGauge.set(process.memoryUsage().heapUsed);

// Um eine Differenz ändernmemoryUsageGauge.inc(1024); // +1KBmemoryUsageGauge.dec(512); // -512B


3. Histogram (Histogramm)

Misst die Verteilung von Werten (z. B. Antwortzeit).



import { Histogram } from 'prom-client';

const httpRequestDuration = new Histogram({ name: 'http_request_duration_seconds', help: 'Dauer von HTTP-Anfragen in Sekunden', labelNames: ['method', 'route'], buckets: [0.1, 0.3, 0.5, 1, 2, 5], // Segmentgrenzen});

// Wert beobachtenconst start = Date.now();// ... Anfrage verarbeiten ...httpRequestDuration.observe( { method: 'GET', route: '/api' }, (Date.now() - start) / 1000);


4. Summary (Zusammenfassung)

Ähnlich wie Histogramm, berechnet jedoch Quantile auf Client-Seite.



import { Summary } from 'prom-client';

const responseTimeSummary = new Summary({ name: 'response_time_summary_seconds', help: 'Zusammenfassung der Antwortzeit in Sekunden', percentiles: [0.5, 0.9, 0.99], // Quantile});

responseTimeSummary.observe(0.42);responseTimeSummary.observe(0.35);


Export von Metriken für Prometheus



Erstellen Sie einen Endpunkt /metrics, der die Metriken im Textformat ausgibt:



import express from 'express';import { register } from './metrics';

const app = express();

app.get('/metrics', async (req, res) => { try { res.set('Content-Type', register.contentType); res.end(await register.metrics()); } catch (err) { res.status(500).end(err); }});

app.listen(3000, () => console.log('Server läuft auf Port 3000'));


Jetzt gibt der Server bei einer GET-Anfrage

Empfehlungen