Kotlin中的Prometheus指标:与Micrometer和Ktor的集成

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Kotlin中的Prometheus指标:从基础到生产级解决方案



现代后端应用程序需要持续监控。Prometheus是微服务世界中指标收集的事实标准。在本文中,我们将探讨如何使用Micrometer库和Ktor框架将Prometheus集成到Kotlin应用程序中。您将学习如何创建自定义计数器、直方图和计时器,以及如何配置用于收集指标的端点。



1. 为什么需要Micrometer?

Micrometer是一个监控门面,类似于日志记录的SLF4J。它支持多种后端:Prometheus、Graphite、Datadog、InfluxDB等。使用Micrometer,您不会绑定到特定的监控系统——只需更换依赖即可。



对于Prometheus,Micrometer提供了一个特殊的注册表PrometheusMeterRegistry,它以Prometheus可理解的文本格式导出指标。



2. 添加依赖

在build.gradle.kts中添加以下依赖:



dependencies {    // Micrometer + Prometheus    implementation("io.micrometer:micrometer-core:1.12.5")    implementation("io.micrometer:micrometer-registry-prometheus:1.12.5")

// 用于Ktor implementation("io.ktor:ktor-server-core:2.3.9") implementation("io.ktor:ktor-server-netty:2.3.9") implementation("io.ktor:ktor-server-metrics-micrometer:2.3.9")}


如果您使用Spring Boot,只需添加spring-boot-starter-actuator和micrometer-registry-prometheus——Spring Boot会自动配置/actuator/prometheus端点。



3. Ktor中的基本配置

让我们创建一个带有Prometheus指标的简单Ktor应用程序。我们需要:

  • PrometheusMeterRegistry — 指标注册表
  • KtorMetricsPlugin — 用于自动收集HTTP指标的插件
  • /metrics端点用于Prometheus数据收集


import io.ktor.server.application.*import io.ktor.server.engine.*import io.ktor.server.netty.*import io.ktor.server.response.*import io.ktor.server.routing.*import io.micrometer.prometheus.PrometheusConfigimport io.micrometer.prometheus.PrometheusMeterRegistryimport io.ktor.server.plugins.metrics.micrometer.*

fun main() { val prometheusRegistry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT)

embeddedServer(Netty, port = 8080) { install(MicrometerMetrics) { registry = prometheusRegistry // 启用默认指标收集(JVM、CPU、内存) meterBinders = listOf( JvmGcMetrics(), JvmMemoryMetrics(), ProcessorMetrics() ) }

routing { // Prometheus端点 get("/metrics") { call.respondText( contentType = ContentType.parse("text/plain; version=0.0.4"), text = prometheusRegistry.scrape() ) }

// 业务端点示例 get("/hello") { call.respondText("Hello, Kotlin!") } } }.start(wait = true)}


4. 自定义指标

除了自动指标,您还可以创建自己的指标。我们来看三种主要类型:

  • Counter — 计数器(例如,请求数量)
  • Timer — 操作执行时间
  • Gauge — 当前值(例如,活跃用户数)


import io.micrometer.core.instrument.Counterimport io.micrometer.core.instrument.Timerimport io.micrometer.core.instrument.Gauge

// 创建指标val requestCounter: Counter = Counter .builder(

推荐