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