Skip to content
Server Plugin

Dropwizard Metrics

必須の依存関係: io.ktor:ktor-server-metrics

コード例: dropwizard-metrics

ネイティブサーバー
モジュールを使用すると、ルートをグループ化してアプリケーションを構造化できます。
のサポート: ✖️

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`関数呼び出し内。
  • ... `Application`クラスの拡張関数である、明示的に定義された`module`内。
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 Metrics: 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