Prometheus-Metriken in TypeScript: Vollständiger Leitfaden
\n\nPrometheus ist ein Open-Source-System für Monitoring und Alarmierung, das Metriken in Echtzeit aus Ihren Anwendungen sammelt. In diesem Artikel betrachten wir, wie Sie Prometheus-Metriken in TypeScript-Anwendungen mithilfe der Bibliothek prom-client integrieren. Sie erfahren, wie Sie Metriken erstellen, registrieren und exportieren sowie einen Endpunkt zur Datenerfassung einrichten.
Was sind Prometheus-Metriken?
\n\nPrometheus arbeitet nach dem Pull-Modell: Es fragt regelmäßig (scrape) die Endpunkte Ihrer Anwendung ab, um Metriken zu erhalten. Die Metriken werden in mehrere Haupttypen unterteilt:
\n\n- \n
- Counter (Zähler) — erhöht sich nur (z. B. Anzahl der Anfragen). \n
- Gauge (Messwert) — kann steigen und fallen (z. B. aktuelle Anzahl aktiver Benutzer). \n
- Histogram (Histogramm) — misst die Verteilung von Werten (z. B. Antwortzeit). \n
- Summary (Zusammenfassung) — ähnlich einem Histogramm, berechnet jedoch Quantile auf Client-Seite. \n
Installation von prom-client in TypeScript
\n\nFür die Arbeit mit Prometheus in TypeScript verwenden wir die offizielle Bibliothek prom-client. Installieren Sie sie über npm:
npm install prom-client\n\nInstallieren Sie auch die Typen für TypeScript:
\n\nnpm install @types/prom-client --save-dev\n\nErstellen und Registrieren von Metriken
\n\nBetrachten wir ein grundlegendes Beispiel zum Erstellen von Metriken. Erstellen Sie eine Datei metrics.ts:
import client from 'prom-client';\n\n// Erstellen eines Registers für Metriken (standardmäßig wird das globale verwendet)\nconst register = new client.Registry();\n\n// Hinzufügen von Standardmetriken (z. B. Speicher, CPU)\nclient.collectDefaultMetrics({ register });\n\n// Erstellen eines Counters zum Zählen von Anfragen\nconst httpRequestsTotal = new client.Counter({\n name: 'http_requests_total',\n help: 'Total number of HTTP requests',\n labelNames: ['method', 'status', 'path'],\n registers: [register],\n});\n\n// Erstellen eines Gauges für aktive Verbindungen\nconst activeConnections = new client.Gauge({\n name: 'active_connections',\n help: 'Number of active connections',\n registers: [register],\n});\n\n// Erstellen eines Histogramms für die Antwortzeit\nconst httpRequestDuration = new client.Histogram({\n name: 'http_request_duration_seconds',\n help: 'Duration of HTTP requests in seconds',\n labelNames: ['method', 'path'],\n buckets: [0.01, 0.05, 0.1, 0.5, 1, 5],\n registers: [register],\n});\n\nexport { register, httpRequestsTotal, activeConnections, httpRequestDuration };\n\nVerwendung von Metriken in einer Express-Anwendung
\n\nErstellen wir nun eine einfache Express-Anwendung in TypeScript, die unsere Metriken verwendet:
\n\nimport express from 'express';\nimport { register, httpRequestsTotal, activeConnections, httpRequestDuration } from './metrics';\n\nconst app = express();\nconst port = 3000;\n\n// Middleware zum Zählen der Anfragezeit\napp.use((req, res, next) => {\n const end = httpRequestDuration.startTimer({ method: req.method, path: req.path });\n activeConnections.inc();\n\n res.on('finish', () => {\n httpRequestsTotal.inc({ method: req.method, status: res.statusCode.toString(), path: req.path });\n activeConnections.dec();\n end();\n });\n\n next();\n});\n\n// Endpunkt für Prometheus\napp.get('/metrics', async (req, res) => {\n res.set('Content-Type', register.contentType);\n res.end(await register.metrics());\n});\n\n// Beispiel-Endpunkt\napp.get('/', (req, res) => {\n res.send('Hello, Prometheus!');\n});\n\napp.listen(port, () => {\n console.log(`Server running at http://localhost:${port}`);\n});\n\nStarten und Überprüfen
\n\nStarten Sie die Anwendung:
\n\nnpx ts-node app.ts\n\nÖffnen Sie in
Auch in der Bibliothek
Room für Kotlin: Vollständiger Leitfaden mit Beispielen
OAuth-Client für Go (Golang): Verbindung zu OAuth 2.0-Anbietern
Java-Bildverarbeitung: Größenänderung und Zuschnitt (resize, crop)
Aufgabenplaner in C# (.NET): Quartz.NET, Hangfire, Coravel