Dropwizard 指标
必需的依赖项:io.ktor:ktor-server-metrics
代码示例: dropwizard-metrics
DropwizardMetrics 插件允许您配置 Metrics 库,以获取有关服务器和传入请求的有价值信息。
添加依赖项
要启用 DropwizardMetrics,您需要在构建脚本中包含以下构件:
添加
ktor-server-metrics依赖项:KotlinGroovyXML(可选)为特定报告器添加所需的依赖项。以下示例展示了如何添加通过 JMX 报告指标所需的构件:
KotlinGroovyXML您可以将
$dropwizard_version替换为metrics-jmx构件所需的版本,例如4.2.15。
安装 DropwizardMetrics
要在应用程序中安装 DropwizardMetrics 插件,请将其传递给指定
install 函数。 以下代码片段展示了如何安装 DropwizardMetrics ... - ... 在
embeddedServer函数调用中。 - ... 在显式定义的
module中,该模块是Application类的扩展函数。
配置 DropwizardMetrics
DropwizardMetrics 允许您使用 registry 属性来使用任何支持的指标报告器。让我们来看看如何配置 SLF4J 和 JMX 报告器。
SLF4J 报告器
SLF4J 报告器允许您定期向 SLF4J 支持的任何输出发送报告。 例如,要每 10 秒输出一次指标,您可以:
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,输出将如下所示:
[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=millisecondsJMX 报告器
JMX 报告器允许您将所有指标公开给 JMX,从而允许您使用 jconsole 查看这些指标。
install(DropwizardMetrics) {
JmxReporter.forRegistry(registry)
.convertRatesTo(TimeUnit.SECONDS)
.convertDurationsTo(TimeUnit.MILLISECONDS)
.build()
.start()
}您可以在此处找到完整示例:dropwizard-metrics。
如果您运行应用程序并使用 JConsole 连接到其进程,指标将如下所示:

公开的指标
DropwizardMetrics 公开了以下指标:
全局指标
全局指标包括以下 Ktor 特定指标:
ktor.calls.active:Count- 未完成的活跃请求数。ktor.calls.duration- 有关调用持续时间的信息。ktor.calls.exceptions- 有关异常数量的信息。ktor.calls.status.NNN- 有关特定 HTTP 状态码NNN发生次数的信息。
请注意,指标名称以 ktor.calls 前缀开头。您可以使用 baseName 属性对其进行自定义:
install(DropwizardMetrics) {
baseName = "my.prefix"
}每个端点的指标
"/uri(method:VERB).NNN"- 对于此路径和谓词,特定 HTTP 状态码NNN发生次数的信息。"/uri(method:VERB).meter"- 有关此路径和谓词的调用次数的信息。"/uri(method:VERB).timer"- 有关此端点持续时间的信息。
JVM 指标
除了 HTTP 指标外,Ktor 还公开了一组用于监控 JVM 的指标。您可以使用 registerJvmMetricSets 属性禁用这些指标:
install(DropwizardMetrics) {
registerJvmMetricSets = false
}您可以在此处找到完整示例:dropwizard-metrics。
