[Spring] Grafana와 Prometheus로 서버 모니터링 하기
개발자가 되어 프로그램을 개발할 때 개발하는 과정도 중요하지만 개발하고 난 후 프로그램의 오류가 발생했을 때 바로바로 인지하여 고치는 것 등 서비스 운영도 매우 중요합니다~
프로그램을 안정적으로 운영하기 위해서는 모니터링 시스템이 필요한데 모니터링 툴중에서 Spring을 할 때 많이 사용한다는 Actuator, Prometheus, Grafana에 대해서 알아보겠습니다!
Actuator
Spring Boot는 서버의 여러 지표들을 제공하는 Actuator라는것을 제공합니다. Actuator 메모리, CPU 사용량, 에러가 난 횟수처럼 서비스를 운영하는 데 도움이 되는 정보들을 제공하고 Grafana와 Prometheus와도 쉽게 연동할 수 있게 되어있습니다. 이러한 정보들은 API 형태로 호출 가능하고, json 형태로 보여집니다.
build.gradle에 의존성을 추가하고 http://localhost:8080/actuator를 호출하면 아래와 같이 엔드포인트들이 보이게 됩니다.
implementation 'org.springframework.boot:spring-boot-starter-actuator'
{"_links":{
"self":{
"href":"http://localhost:8080/actuator",
"templated":false},
"health-path":{
"href":"http://localhost:8080/actuator/health/{*path}",
"templated":true},
"health":{
"href":"http://localhost:8080/actuator/health",
"templated":false}
}}
Prometheus
Actuator는 엔드포인트가 호출된 순간의 지표를 반환하지, 지속적으로 수집하고 저장하는 것이 아닙니다.
여기서 지표를 지속적으로 수집하고 저장하게 해주는 것이 Prometheus입니다.
우선 개발머신에 Prometheus를 설치합니다.
저는 Homebrew를 이용해서 설치를 했습니다~
brew install prometheus
설치가 완료되면 prometheus를 실행시켜 줍니다.
brew services start prometheus
그리고 localhost:9090으로 prometheus에 접근할 수 있습니다.
다음으로 Spring Boot와 prometheus를 연동시켜 줄겁니다.
우선 의존성을 추가해줍시다~
implementation 'io.micrometer:micrometer-registry-prometheus'
그리고 application.properties에 아레 내용을 추가해줍니다. 모든 actuator 기능을 활성화하는 것입니다.
management.endpoints.web.exposure.include=*
그리고 서버를 재실행하고 다시 localhost:8080/actuator를 호출하여 확인해보면 prometheus관련 엔드포인트가 추가되어 있습니다!
"prometheus":{"href":"http://localhost:8080/actuator/prometheus","templated":false}
Grafana
프로메테우스에 저장된 지표들을 보기편하게 시각화해주는 툴이 바로 Grafana입니다.
Grafana설치도 Prometheus와 똑같이 해줍니다.
brew install grafana
그리고 prometheus와 마찬가지로 실행시켜줍니다.
brew services start grafana
그리고 localhost:3000 을 호출하하고 id:admin, pw:admin 을 입력해주면 grafana의 초기화면을 볼 수 있습니다.
Add your first data source을 눌러 Prometheus를 클릭해주고 URL에 http://localhost:9090을 입력하고 save&test를 눌러줍니다.
그리고 대시보드로 들어가 Import 로 들어가주고 https://grafana.com/grafana/dashboards/4701-jvm-micrometer/(많이 사용하는 대시보드)를 로드해줍니다
그럼 아래와 같이 여러 지표들을 보여주는 대시보드가 생성됩니다.
참고 자료
'Spring Boot' 카테고리의 다른 글
[Spring] Servlet에서 예외 처리는 어떻게 진행 될까? (3) | 2024.04.28 |
---|---|
[Spring Boot] Spring Boot와 MongoDB 연동하기 (2) | 2023.07.19 |
[Spring] Spring MVC의 구조 (0) | 2023.06.03 |
[Spring] Spring boot JPA사용해 로그인, 회원가입 구현 (0) | 2023.05.29 |
[Spring]@ModelAttribute 어노테이션의 기능과 사용법 (0) | 2023.05.23 |
댓글