본문 바로가기
스프링부트/액추에이터

4. 스프링 부트 액추에이터 (그라파나를 통한 애플리케이션 장애 확인)

by amobu0 2024. 6. 6.

김영한 님의 강의에서는 마이크로미터, 그라파나, 프로메테우스에 대한 상세 내용을 다루는 것은 강의 범위를 벗어나기 때문에 기초 내용과 올바른 방향을 설명하는데 초점을 맞추고 더 자세한 내용이 필요한 경우 별도의 학습이 필요하고 공식 문서를 참고하라고 말씀하신다.


이전 내용을 통해서 프로메테우스와 그라파나를 성공적으로 연동하였다. 이제 애플리케이션에 직접 내가 문제를 발생시킨 다음 그라파나를 통해 어떻게 모니터링 하는지에 대한 내용을 다루고자 한다. 실무에서 주로 발생하는 예시를 다루고자 한다.

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

직접 장애 발생 시키기 (실습 환경: macOS /  Apple M2 )

1. CPU 사용량 초과(공유 대시 보드 ID: 11378)

cpu사용량을 늘리려면 루프를 통해 확인하는 것이 좋다. 컨트롤러를 생성하고 for문을 통해 루프를 간단하게 돌려본다.

cpu사용량을 증가시키기 위한 코드

 

http://localhost:8080/cpu를 2번 호출해 보았다. 아래의 사진처럼 로딩 중이라는 표시가 나타났다.

페이지를 불러오지 못하고 있는 상태

 

공유 대시 보드(ID: 11378)로 들어가보면 CPU Usage페널에 cpu 사용량이 증가하는 것을 확인 할 수 있다.

cpu 사용량이 증가한 상태 / 대시보드 ID:11378

 


2. JVM 메모리 사용량 초과(공유대시보드 ID: 4701)

JVM 메모리를 증가시킬 코드를 작성하고 http://localhost:8080/jvm를 여러번 호출하니 대시보드에 메모리가 증가하는 모습을 바로 확인할 수 있었다.

JVM 메모리 사용량을 증가시키기 위한 코드

 

JVM메모리 사용량이 증가한 상태 / 대시보드 ID:4701

 

메모리가 다 찼기 때문에 인텔리제이에서 OutOfMemoryError메시지를 보여준다. 

IDE에 표시된 에러 메시지

 


3. DB 커넥션 풀 고갈(공유대시보드 ID: 11378)

DB커넥션 풀을 고갈시키기 위한 코드를 작성하고 http://localhost:8080/jdbc를 5번 호출하면서 대시보드에서 HikariCp의 Connection이 증가하는 것을 확인한다.(기본적으로 10개를 제공해준다.)

DB 커넥션 풀을 증가시키기 위한 코드
Active가 5로 증가한 모습

 

 

커넥션 풀을 10번 이상 호출했을 때 페이지가 로딩 중이라는 화면이 뜬다. 잠시만 기다리면 인텔리제이에서 SQLTransientConnectionException메시지를  볼 수 있다. 마지막으로 대시보드로 접속해 Connection Timeout Count가 증가하는 것을 확인한다. 

커넥션 풀 개수를 초과했을 때 페이지를 불러오지 못하고 있는 상태
IDE에 SQLTransientConnectionException 메세지가
Timeout Count가 증가하고 대시보드의 그래프에도 Pending이라는 표시가 나타난다.


 

 

4. 에러 로그 급증(공유대시보드 ID: 11378)

지금까지의 1,2,3번의 문제상황을 읽었다면 이번 로그 확인하는 방법 실습도 똑같기 때문에 로그를 증가시킬 코드와 대시보드에 나타나는 결과만 보여주도록 하겠다.

로그를 증가시키기 위한 코드
http://localhost:8080/log를 시간차를 두고 여러번 호출한 상태

 


 

프로메테우스와 그라파나를 연동하고 실제로 장애를 일으켜 보면서 눈으로 확인하는 방법은 재미있었다. 하지만 실무에서는 장애가 발생한 상황이오면 빨리 모니터링 툴을 확인하고 대응해한다. 참고로 메트릭을 보는 것은 정확한 값을 보는 것이 목적이 아니라 실시간성과 대략적인 값과 추세를 확인하는 것이 주 목적이다.


출처: 인강 - https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%ED%95%B5%EC%8B%AC%EC%9B%90%EB%A6%AC-%ED%99%9C%EC%9A%A9?#curriculum

 

스프링 부트 - 핵심 원리와 활용 | 김영한 - 인프런

김영한 | 실무에 필요한 스프링 부트는 이 강의 하나로 모두 정리해드립니다., 백엔드 개발자를 위한 스프링 부트 끝판왕! 실무에 필요한 내용을 모두 담았습니다.  [임베딩 영상] 김영한의 스

www.inflearn.com