Dropwizard metrics
所需依賴項: 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
內部,該module
是Application
類別的一個擴展函數。
配置 DropwizardMetrics
DropwizardMetrics
允許您使用任何支援的 Metric 報告器,透過 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=milliseconds
JMX 報告器
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。