2017-05-16 7 views
0

스프링 부트 API를 개발 중입니다.스프링 부트 API 응답 시간

이제 모니터링 부분이 있습니다. 나는 그것에 모니터링을 추가하고 싶다. 그래서 저는 액추에이터를 사용하여 데이터 (예 : gc, 메모리 등)를 & Grafana에 그려 봅니다.

이제 API의 응답 시간이 왔습니다. 액추에이터 게이지는 마지막 API Hit를 반환합니다. 그래서 기본적으로 evry 히트에 대한 모든 API의 응답 시간을 어떻게 계산합니까? 내가 게이지와 비교하고 때 나는

long startTime = System.currentTimeMillis(); 

내가 컨트롤러를 배치 시도

long endTime = System.currentTimeMillis(); 
long diff = endTime - startTime; 

를 배치해야하는 위치 내 말은, 컨트롤러 & 마지막 컨트롤러의 라인하지만 결과의 첫번째 라인은 다르다 .

정확하게 측정해야합니까?

+0

당신이 찾고있는 것은 히스토그램이다. 스프링 부트 액츄에이터는 히스토그램을 지원하지 않지만 Sprin g Boot Actuator는 히스토그램 지원이있는 Dropwizard의 메트릭 라이브러리 (http://metrics.dropwizard.io/3.2.2/)와 함께 작동하며 체크 아웃 할 수 있습니다. – pvpkiran

+0

나는 그 데이터를 수동으로 얻을 수있는 방법이 더 흥미로운 abt 무엇입니까? 모든 API 조회수에 대한 응답 시간은? XYZ –

답변

0

DispatcherServlet#service 방법에 대한 AOP "around"조언을 시도해 볼 수 있습니까?

테스트되지 않은 :

@Aspect 
@Component 
public class AroundExample { 

    @Around("org.springframework.web.servlet.DispatcherServlet.service()") 
    public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable { 
     // start stopwatch 
     Object retVal = pjp.proceed(); 
     // stop stopwatch 
     return retVal; 
    } 

} 

은 POM에 aop 스타터를 추가하는 것을 잊지 마십시오

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-aop</artifactId> 
</dependency> 

당신을 포함한 전체 요청 호출의 아주 가까이 타이밍을 줄 것 그 모든 핸들러, 콘트롤러 등과 같은 것들.

+0

공용 클래스는 { \t \t \t @Around는 ("실행 (org.springframework.web.servlet.DispatcherServlet.service * (...))") \t 공개 오브젝트 doBasicProfiling (ProceedingJoinPoint의 PJP)이 발생하는 Throwable를 { \t// 스톱워치 시작 \t \t \t System.out.println ("이전"); \t 개체 retVal = pjp.proceed(); \t // 스톱워치 중지 \t System.out.println ("Me here"); \t return retVal; \t} \t } 이 코드는 실행 중이지만 아무 것도 인쇄하지 않습니까? 나는 무엇을 놓치고 있습니까? –

+0

"실행 중이지만 아무것도 인쇄하지 않음"이란 무엇을 의미합니까? 디버거에서 중단 점을 설정 했습니까? – Strelok

+0

나는 컴파일 오류가 있다는 것을 의미하지만 여전히 인쇄물을 배치 한 후에도 아무 것도 인쇄되지 않습니다. 코드가 컴파일되고 있지만 아무것도 인쇄되지 않는다는 것을 의미합니다. –