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-clientFür TypeScript müssen auch die Typen installiert werden:
npm install @types/prom-client --save-devErstellen 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); // +22. 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); // -512B3. 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
Auch in der Bibliothek
TipKit für Swift: Vollständiges Tutorial mit Beispielen
Internationalisierung (i18n) in C++: Vollständiger Leitfaden mit gettext und ICU