Prometheus-Metriken in Java: Vollständige Anleitung zur Bibliothek simpleclient
Prometheus ist ein leistungsstarkes Open-Source-System für Monitoring und Alarmierung, das sich zum De-facto-Standard in der Cloud-Native-Welt entwickelt hat. Für Java-Entwickler gibt es mehrere Bibliotheken zur Integration, aber die offizielle Bibliothek simpleclient (auch bekannt als prometheus/client_java) ist die beliebteste und am besten unterstützte. In diesem Artikel werden wir im Detail besprechen, wie Sie Prometheus-Metriken mit dieser Bibliothek zu Ihrer Java-Anwendung hinzufügen.
Was ist simpleclient?
simpleclient ist der offizielle Java-Client für Prometheus, der eine einfache und effiziente Möglichkeit zur Erstellung und zum Export von Metriken bietet. Die Bibliothek unterstützt die vier grundlegenden Prometheus-Metriktypen:
- Counter (Zähler) — ein monoton steigender Wert (z. B. Anzahl der Anfragen).
- Gauge (Messwert) — ein Wert, der sich beliebig ändern kann (z. B. aktuelle CPU-Auslastung).
- Histogram (Histogramm) — Verteilung von Werten über vordefinierte "Buckets" (z. B. Antwortzeit).
- Summary (Zusammenfassung) — Quantile der beobachteten Werte (z. B. p50, p99 der Antwortzeit).
Installation und Konfiguration
Fügen Sie zunächst die folgenden Abhängigkeiten zu Ihrer pom.xml (Maven) oder build.gradle (Gradle) hinzu.
Maven
<dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient</artifactId> <version>0.16.0</version></dependency>
<!-- Für den Export von Metriken über HTTP --><dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient_httpserver</artifactId> <version>0.16.0</version></dependency>Gradle
implementation 'io.prometheus:simpleclient:0.16.0'implementation 'io.prometheus:simpleclient_httpserver:0.16.0'Erstellung und Verwendung von Metriken
Betrachten wir ein Beispiel zur Erstellung aller grundlegenden Metriktypen in einer Klasse.
import io.prometheus.client.Counter;import io.prometheus.client.Gauge;import io.prometheus.client.Histogram;import io.prometheus.client.Summary;
public class MetricsExample {
// 1. Counter: Anzahl der verarbeiteten Anfragen static final Counter requestsCounter = Counter.build() .name("app_requests_total") .help("Total number of processed requests.") .labelNames("endpoint", "method") .register();
// 2. Gauge: Aktuelle Anzahl aktiver Benutzer static final Gauge activeUsersGauge = Gauge.build() .name("app_active_users") .help("Current number of active users.") .register();
// 3. Histogram: Ausführungszeit der Anfrage in Millisekunden static final Histogram requestDurationHistogram = Histogram.build() .name("app_request_duration_ms") .help("Request duration in milliseconds.") .buckets(10, 50, 100, 200, 500, 1000, 5000) .register();
// 4. Summary: Quantile der Ausführungszeit static final Summary requestDurationSummary = Summary.build() .name("app_request_duration_summary_ms") .help("Request duration summary in milliseconds.") .quantile(0.5, 0.05) // p50 mit einer Toleranz von 5% .quantile(0.99, 0.01) // p99 mit einer Toleranz von 1% .register();
public static void main(String[] args) throws Exception { // Simulation der Anfrageverarbeitung for (int i = 0; i < 100; i++) { processRequest("/api/users", "GET"); }
// Starten des HTTP-Servers für den Metrikexport new HTTPServer(9090); System.out.println("Metrics server started