Skip to content
Server Plugin

Dropwizard 指标

必需的依赖项io.ktor:ktor-server-metrics

代码示例 dropwizard-metrics

原生服务器
Ktor 支持 Kotlin/Native,允许您在没有额外运行时或虚拟机的情况下运行服务器。
支持:✖️

DropwizardMetrics 插件允许您配置 Metrics 库,以获取有关服务器和传入请求的有价值信息。

添加依赖项

要启用 DropwizardMetrics,您需要在构建脚本中包含以下构件:

  • 添加 ktor-server-metrics 依赖项:

    Kotlin
    Groovy
    XML
  • (可选)为特定报告器添加所需的依赖项。以下示例展示了如何添加通过 JMX 报告指标所需的构件:

    Kotlin
    Groovy
    XML

    您可以将 $dropwizard_version 替换为 metrics-jmx 构件所需的版本,例如 4.2.15

安装 DropwizardMetrics

要在应用程序中安装 DropwizardMetrics 插件,请将其传递给指定

模块
模块允许您通过对路由进行分组来构建应用程序结构。
中的 install 函数。 以下代码片段展示了如何安装 DropwizardMetrics ...

  • ... 在 embeddedServer 函数调用中。
  • ... 在显式定义的 module 中,该模块是 Application 类的扩展函数。
kotlin
kotlin

配置 DropwizardMetrics

DropwizardMetrics 允许您使用 registry 属性来使用任何支持的指标报告器。让我们来看看如何配置 SLF4J 和 JMX 报告器。

SLF4J 报告器

SLF4J 报告器允许您定期向 SLF4J 支持的任何输出发送报告。 例如,要每 10 秒输出一次指标,您可以:

kotlin
install(DropwizardMetrics) {
    Slf4jReporter.forRegistry(registry)
        .outputTo(this@module.log)
        .convertRatesTo(TimeUnit.SECONDS)
        .convertDurationsTo(TimeUnit.MILLISECONDS)
        .build()
        .start(10, TimeUnit.SECONDS)
}

您可以在此处找到完整示例:dropwizard-metrics

如果您运行应用程序并打开 http://0.0.0.0:8080,输出将如下所示:

Bash
[DefaultDispatcher-worker-1] INFO  Application - Responding at http://0.0.0.0:8080
... type=COUNTER, name=ktor.calls.active, count=0
... type=METER, name=ktor.calls./(method:GET).200, count=6, m1_rate=1.2, m5_rate=1.2, m15_rate=1.2, mean_rate=0.98655785084844, rate_unit=events/second
... type=METER, name=ktor.calls./(method:GET).meter, count=6, m1_rate=1.2, m5_rate=1.2, m15_rate=1.2, mean_rate=0.9841134429134598, rate_unit=events/second
... type=METER, name=ktor.calls.exceptions, count=0, m1_rate=0.0, m5_rate=0.0, m15_rate=0.0, mean_rate=0.0, rate_unit=events/second
... type=METER, name=ktor.calls.status.200, count=6, m1_rate=1.2, m5_rate=1.2, m15_rate=1.2, mean_rate=0.9866015088545449, rate_unit=events/second
... type=TIMER, name=ktor.calls./(method:GET).timer, count=6, min=0.359683, max=14.213046, mean=2.691307542732234, stddev=5.099546889849414, p50=0.400967, p75=0.618972, p95=14.213046, p98=14.213046, p99=14.213046, p999=14.213046, m1_rate=1.2, m5_rate=1.2, m15_rate=1.2, mean_rate=0.9830677128229028, rate_unit=events/second, duration_unit=milliseconds
... type=TIMER, name=ktor.calls.duration, count=6, min=0.732149, max=33.735719, mean=6.238046092985701, stddev=12.169258340009847, p50=0.778864, p75=1.050454, p95=33.735719, p98=33.735719, p99=33.735719, p999=33.735719, m1_rate=0.2, m5_rate=0.2, m15_rate=0.2, mean_rate=0.6040311229887146, rate_unit=events/second, duration_unit=milliseconds

JMX 报告器

JMX 报告器允许您将所有指标公开给 JMX,从而允许您使用 jconsole 查看这些指标。

kotlin
install(DropwizardMetrics) {
    JmxReporter.forRegistry(registry)
        .convertRatesTo(TimeUnit.SECONDS)
        .convertDurationsTo(TimeUnit.MILLISECONDS)
        .build()
        .start()
}

您可以在此处找到完整示例:dropwizard-metrics

如果您运行应用程序并使用 JConsole 连接到其进程,指标将如下所示:

Ktor 指标:JMX

公开的指标

DropwizardMetrics 公开了以下指标:

全局指标

全局指标包括以下 Ktor 特定指标:

  • ktor.calls.activeCount - 未完成的活跃请求数。
  • ktor.calls.duration - 有关调用持续时间的信息。
  • ktor.calls.exceptions - 有关异常数量的信息。
  • ktor.calls.status.NNN - 有关特定 HTTP 状态码 NNN 发生次数的信息。

请注意,指标名称以 ktor.calls 前缀开头。您可以使用 baseName 属性对其进行自定义:

kotlin
install(DropwizardMetrics) {
    baseName = "my.prefix"
}

每个端点的指标

  • "/uri(method:VERB).NNN" - 对于此路径和谓词,特定 HTTP 状态码 NNN 发生次数的信息。
  • "/uri(method:VERB).meter" - 有关此路径和谓词的调用次数的信息。
  • "/uri(method:VERB).timer" - 有关此端点持续时间的信息。

JVM 指标

除了 HTTP 指标外,Ktor 还公开了一组用于监控 JVM 的指标。您可以使用 registerJvmMetricSets 属性禁用这些指标:

kotlin
install(DropwizardMetrics) {
    registerJvmMetricSets = false
}

您可以在此处找到完整示例:dropwizard-metrics