스프링 부트(핵심 원리와 활용)

Ch08. 마이크로미터, 프로메테우스, 그라파나 - 그라파나(메트릭을 통한 문제 확인)

webmaster 2023. 5. 9. 00:18
728x90

애플리케이션에 문제가 발생했을 때 그라파나를 통해서 어떻게 모니터링하는지 확인해 보자.
실제 우리가 작성한 애플리케이션에 직접 문제를 발생시킨 다음에 그라파나를 통해서 문제를 어떻게 모니터링할 수 있는지 확인해 보자.
실무에서 주로 많이 발생하는 다음 5가지 대표적인 예시를 확인해 보자..

  • CPU 사용량 초과
  • JVM 메모리 사용량 초과
  • 커넥션 풀 고갈
  • 에러 로그 급증

CPU 사용량 초과

TrafficController - cpu() 추가

@GetMapping("cpu")
public String cpu(){
  log.info("cpu");
  long value = 0;
  for (long i =0; i< 10000000000000L; ++i){
    value++;
  }
  return "ok value=" + value;
}
  • 각자 컴퓨터 성능에 따라서 루프 횟수를 바꾸어야 할 수 있다.
  • 반복문을 계속 돌아 CPU 성능 수치를 높히자
  • 대시보드를 확인해보면 CPU 사용량이 증가하는 것을 확인할 수 있다.
    • 아마 요청 하나당 코어 하나를 100% 사용할 것이다. 더 많이 요청하면 더 많은 CPU를 사용한다.

JVM 메모리 사용량 초과

TrafficController - jvm() 추가

private List<String> list = new ArrayList<>();

@GetMapping("jvm")
public String jvm(){
  log.info("jvm");
  for(int i=0; i< 1000000;++i){
    list.add("hello jvm!" + i);
  }
  return "ok";
}
  • 리스트에 문자를 계속해서 추가한다.
  • 계속 요청하면서 대시보드를 확인해보면 JVM 메모리 사용량이 계속 증가하다가 최대치를 넘는 순간 메트릭이 잡히지 않는다.(JVM 내부에서 OOM이 발생했기 때문이다.)
  • 기다려보면 애플리케이션 로그에서 다음과 같은 오류를 확인할 수 있다.(java.lang.OutOfMemoryError: Java heap space)

커넥션 풀 고갈

TrafficController - jdbc() 추가


@Autowired
DataSource dataSource;

@GetMapping("/jdbc")
public String jdbc() throws SQLException {
  log.info("jdbc");
  Connection conn = dataSource.getConnection();
  log.info("connection info={}", conn);
  //conn.close(); // 커넥션을 닫지 않는다 => 커넥션을 계속 물고 있는 상태로 가지고 있는다.
  return "ok";
}
  • 10번 이상 실행하자
  • Active 커넥션이 커넥션 풀의 최대 숫자인 10개를 넘어가게 되면, 커넥션을 획득하기 위해 대기(Pending) 하게 된다.
    • 그래서 커넥션 획득 부분에서 쓰레드가 대기하게 되고 결과적으로 HTTP 요청을 응답하지 못한다.
  • DB 커넥션을 획득하기 위해 대기하던 톰캣 쓰레드가 30초 이상 DB 커넥션을 획득하지 못하면 다음과 같은 예외가 발생하면서 커넥션 획득을 포기한다.

에러 로그 급증

애플리케이션에서 ERROR 레벨의 로그가 급증한다면 심각한 문제가 발생한 것으로 이해할 수 있다.

TrafficController - errorLog() 추가

@GetMapping("/error-log")
public String errorLog(){
  log.error("error log");
  return "error";
}
  • ERROR Logs , logback_events_total 메트릭에서 ERROR 로그가 급증하는 것을 확인할 수 있다.

참고: 메트릭을 보는 것은 정확한 값을 보는 것이 목적이 아니다. 대략적인 값과 추세를 확인하는 것이 주목적이다..

728x90