2017-12-18 53 views
2

Prometheus을 사용하여 계량 데이터를 수집하는 스프링 부트 응용 프로그램이 있습니다. Prometheus에는 Counter과 같은 측정 항목이 있는데, 이는 무언가가 발생한 횟수를 계산하는 데 유용하며 Gauge은 계속 계산하지만 감소 할 수 있습니다. 무언가의 요청 지속 시간을 추적 할 수있는 측정 항목이 있습니까? 예를 들어, api 호출이 이루어질 때와 api가 응답을 반환 할 때 사이에 걸리는 시간을 기록하고 싶다고 가정 해 봅시다. 전화가 걸려 올 때와 API 응답이 수신 될 때 사이의 시간을 어떻게 추적합니까? 그런 다음 그래프를 만들 수 있습니까? Y 좌표에는 응답에 걸린 시간 (초 또는 밀리 초)을 나열 할 수 있습니다. X 축에서 타임 스탬프 (메트릭을 수집 한 시간)를 표시 하시겠습니까?Prometheus를 사용하여 경과 시간을 기록하는 방법이 있습니까

답변

2

타이밍 대기 시간 (예 : api 대기 시간)의 경우 Summary이 필요합니다.

그런 다음 계산할 수있는 aggregate average latency와 :

sum without (instance)(rate(my_summary_latency_seconds_sum[5m])) 
/
    sum without (instance)(rate(my_summary_latency_seconds_count[5m]) 
+0

... 요약 # startTimer()를 사용하여 타이머를 가져오고 Summary.Timer # observeDuration()을 사용하여 경과 시간을 가져옵니다. – Joel

2

당신이 을 말할 때, 당신이 정말로 Micrometer 프로젝트에 보일 것입니다. Prometheus를 지원하는 벤더 중립적 메트릭 API를 제공합니다.

Timer 
    .builder("my.timer") 
    .tags("uri", "/api/endpoint") 
    .register(registry) 
    .record(() -> { 
    /* do something */ 
    }); 

// or 
registry.timer("my.timer", "uri", "api/endpoint").record(() -> { 
    /* do something */ 
}); 

당신이 micrometer-spring-legacy 의존성을 사용하십시오 스프링 부팅 1.5 프로젝트의 경우 : 마이크로 미터 타이머 원시적 특정 미터가 있습니다. Spring-Boot 2 (이 글을 쓰는 시점에서 2.0.0.M7)에서는 마이크로 미터 지원이 OOTB에 포함되어 spring-boot-starter-actuator입니다.

타이밍 API 요청을 언급 한대로 Spring MVC를 사용한다고 가정합니다. 타이밍을 자동으로 지원합니다. (당신은 시간 창 동안 롤링 최대 추적, 요청 기간 sum 및 추가로, 각 URI에 대한 maxcount를 얻을.)

을 경우 당신은 또한 서버 측 요청 대기 시간을 계산하는 wan't 백분위 수를 사용하면 히스토그램 버킷 생성도 가능합니다.

documentation을 살펴보십시오.