Skip to content
Server Plugin

Dropwizard metrics

所需依賴項: 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 內部,該 moduleApplication 類別的一個擴展函數。
kotlin
kotlin

配置 DropwizardMetrics

DropwizardMetrics 允許您使用任何支援的 Metric 報告器,透過 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.active:Count - 未完成的活躍請求數量。
  • 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