Dropwizard Metrics
必需的依赖项: io.ktor:ktor-server-metrics
代码示例: dropwizard-metrics
DropwizardMetrics 插件允许你配置 Metrics 库,以获取关于服务器和传入请求的有用信息。
添加依赖项
要启用 DropwizardMetrics
,你需要将以下 artifact 包含在构建脚本中:
添加
ktor-server-metrics
依赖项:KotlinGroovyXML可选地,添加特定 reporter 所需的依赖项。下面的示例展示了如何添加一个通过 JMX 报告 metrics 所需的 artifact:
KotlinGroovyXML你可以将
$dropwizard_version
替换为metrics-jmx
artifact 的所需版本,例如4.2.15
。
安装 DropwizardMetrics
要将 DropwizardMetrics
插件安装到应用程序中, 请将它传递给指定
install
函数。 下面的代码片段展示了如何安装 DropwizardMetrics
... - ... 在
embeddedServer
函数调用内部。 - ... 在显式定义的
module
内部,该module
是Application
类的一个扩展函数。
配置 DropwizardMetrics
DropwizardMetrics
允许你使用 registry
属性来使用任何支持的 Metric reporter。让我们看看如何配置 SLF4J 和 JMX reporter。
SLF4J reporter
SLF4J reporter 允许你定期向 SLF4J 支持的任何输出发送报告。 例如,要每 10 秒输出一次 metrics,你可以:
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=milliseconds
JMX reporter
JMX reporter 允许你将所有 metrics 暴露给 JMX,从而允许你使用 jconsole
查看这些 metrics。
install(DropwizardMetrics) {
JmxReporter.forRegistry(registry)
.convertRatesTo(TimeUnit.SECONDS)
.convertDurationsTo(TimeUnit.MILLISECONDS)
.build()
.start()
}
你可以在这里找到完整示例:dropwizard-metrics。
如果你运行应用程序并使用 JConsole 连接到其进程,metrics 将如下所示:
暴露的 metrics
DropwizardMetrics
暴露以下 metrics:
- 全局 metrics,包括 Ktor 特有的和 JVM metrics。
- 针对端点的 metrics。
全局 metrics
全局 metrics 包括以下 Ktor 特有的 metrics:
ktor.calls.active
:Count
- 未完成的活跃请求的数量。ktor.calls.duration
- 关于调用持续时间的信息。ktor.calls.exceptions
- 关于异常数量的信息。ktor.calls.status.NNN
- 关于特定 HTTP 状态码NNN
发生的次数的信息。
请注意,metric 名称以 ktor.calls
前缀开头。你可以使用 baseName
属性自定义它:
install(DropwizardMetrics) {
baseName = "my.prefix"
}
每个端点的 metrics
"/uri(method:VERB).NNN"
- 关于特定 HTTP 状态码NNN
发生的次数的信息,针对此路径和动词。"/uri(method:VERB).meter"
- 关于此路径和动词的调用次数信息。"/uri(method:VERB).timer"
- 关于此端点持续时间的信息。
JVM metrics
除了 HTTP metrics,Ktor 还暴露了一组用于监控 JVM 的 metrics。你可以使用 registerJvmMetricSets
属性禁用这些 metrics:
install(DropwizardMetrics) {
registerJvmMetricSets = false
}
你可以在这里找到完整示例:dropwizard-metrics。