Skip to content
Server Plugin

Dropwizard 메트릭

필수 종속성: 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 속성을 사용하여 지원되는 모든 Metric 리포터를 사용할 수 있도록 합니다. 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.