Prometheus-Metriken in Kotlin: Vollständige Anleitung zur Integration
\n\nIn der modernen Softwareentwicklung sind Überwachung und Metriksammlung entscheidend für die Aufrechterhaltung der Anwendungsstabilität. Prometheus ist ein führendes Open-Source-Überwachungssystem, mit dem Sie Leistungsdaten sammeln, speichern und analysieren können. In diesem Artikel betrachten wir, wie Sie Prometheus-Metriken in Kotlin-Anwendungen hinzufügen, indem Sie die Bibliothek Micrometer und einen konfigurierbaren HTTP-Server verwenden.
\n\nWarum Prometheus mit Kotlin verwenden?
\n- \n
- Flexibilität: Prometheus unterstützt viele Metriktypen: Zähler, Histogramme, Zusammenfassungen und Messfühler. \n
- Integrierte Integration: Kotlin ist vollständig kompatibel mit dem Java-Ökosystem, sodass Sie Micrometer nutzen können – ein beliebtes Tool zur Metriksammlung. \n
- Skalierbarkeit: Prometheus lässt sich leicht für die Überwachung von Mikrodiensten und verteilten Systemen skalieren. \n
Projekt mit Gradle einrichten
\nFügen Sie zunächst die Abhängigkeiten in der Datei build.gradle.kts hinzu:
dependencies {\n implementation("io.micrometer:micrometer-core:1.12.0")\n implementation("io.micrometer:micrometer-registry-prometheus:1.12.0")\n // Für den HTTP-Server (wir verwenden Ktor)\n implementation("io.ktor:ktor-server-netty:2.3.7")\n implementation("io.ktor:ktor-server-content-negotiation:2.3.7")\n}\n\nPrometheus-Registrierung erstellen
\nDie Grundlage der Metriksammlung ist der PrometheusMeterRegistry. Erstellen Sie ihn in Ihrer Anwendung:
\nimport io.micrometer.prometheus.PrometheusConfig\nimport io.micrometer.prometheus.PrometheusMeterRegistry\n\nval registry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT)\n\nMetriken definieren
\nBetrachten wir drei Hauptmetriktypen:
\n- \n
- Counter – ein Zähler, der nur erhöht wird (z. B. Anzahl der Anfragen). \n
- Gauge – ein aktueller Wert (z. B. Anzahl aktiver Benutzer). \n
- Timer – die Ausführungszeit von Operationen. \n
Beispiel für die Erstellung von Metriken:
\nimport io.micrometer.core.instrument.Counter\nimport io.micrometer.core.instrument.Gauge\nimport io.micrometer.core.instrument.Timer\n\nval requestCounter: Counter = Counter\n .builder("api.requests.total")\n .description("Gesamtzahl der API-Anfragen")\n .register(registry)\n\nval activeUsersGauge: Gauge = Gauge\n .builder("app.users.active")\n .description("Anzahl aktiver Benutzer")\n .register(registry) { activeUsersCount }\n\nval requestTimer: Timer = Timer\n .builder("api.requests.duration")\n .description("Ausführungszeit der Anfragen")\n .register(registry)\n\nvar activeUsersCount = 0\n\nMetriken über HTTP exportieren
\nDamit Prometheus Metriken sammeln kann, müssen sie im Format /metrics exportiert werden. Wir verwenden Ktor, um einen Endpunkt zu erstellen:
import io.ktor.server.engine.embeddedServer\nimport io.ktor.server.netty.Netty\nimport io.ktor.server.routing.get\nimport io.ktor.server.routing.routing\nimport io.ktor.server.response.respondText\n\nfun startMetricsServer(port: Int = 9090) {\n embeddedServer(Netty, port = port) {\n routing {\n get("/metrics") {\n val scrape = registry.scrape()\n call.respondText(scrape, contentType = io.ktor.http.ContentType.Text.Plain)\n }\n }\n }.start(wait = false)\n}\n\nIntegration mit der Geschäftslogik
\nAktualisieren Sie die Metriken im Code Ihrer Anwendung:
\nfun handleRequest() {\n requestTimer.record {\n // Simulation der Anfrageverarbeitung\n Thread.sleep(100)\n requestCounter.increment()\n }\n}\n\nfun userLoggedIn() {\n activeUsersCount++\n}\n\nfun userLoggedOut() {\n act Auch in der Bibliothek
better-sqlite3-typescript für TypeScript: Komplettguide mit Beispielen
Rate Limiting in Java: Bibliotheken und Tools zur Anfragenkontrolle (Bucket4j, Resilience4j)
Internationalisierung (i18n) in Node.js: i18next und polyglot