1. 개요
서비스를 운영하며 장애는 언제든지 발생할 수 있고, 장애에 대응하는 것은 중요한 일입니다.그렇기 위해서는 시스템의 상태를 실시간으로 모니터링하고 관리하는 것이 매우 중요합니다. 모니터링을 시스템을 이용하면 운영상 발생하는 오류에 대해 빠른 확인이 가능하고, 시스템 상태를 통해 성능을 개선할 수 있습니다.
지금부터는 스프링 Actuator, 프로메테우스, 그라파나를 이용해 모니터링 시스템을 구축해보도록 하겠습니다.
2. Spring Actuator
스프링 부트가 제공하는 액츄에이터는 지표 수집, 추적 감사 등의 모니터링하고 관리할 수 있는 다양한 편의 기능들을 제공합니다.
가장 먼저 Gradle 의존성을 추가해줍니다.
implementation 'org.springframework.boot:spring-boot-starter-actuator'
기본적으로 actuator 엔드포인트는 보안이 적용되어 있어 처음 /actuator 경로로 접속하면 아래와 같은 상황에 마주치게 됩니다.
애플리케이션 설정파일 properties, yml에서 actuator 엔드포인트를 활성화하거나 필요한 부분만 활성화할 수 있습니다.
management:
endpoints:
web:
exposure:
include: "*"
위와 같은 설정을 추가한 후 다시 애플리케이션을 실행해 /actuator 경로로 접속하면 액츄에이터가 제공해주는 여러 엔드포인트를 볼 수 있습니다. 해당 엔드포인트를 통해 애플리케이션 내부 상태와 성능 정보를 쉽게 확인할 수 있습니다.
*은 모든 경로를 노출시킵니다. 필요에 따라 include 부분에 노출시키기 원하는 엔드포인트들만 설정해줄 수 있습니다.
- health : 애플리케이션의 상태를 확인한다.
- info : 애플리케이션에 대한 정보(버전, 작성자)를 제공
- metrics : 애플리케이션의 다양한 메트릭(메모리 사용량, GC, 요청 수) 제공
3. Prometheus
프로메테우스는 오픈 소스 시스템 모니터링 도구입니다 주로 매트릭 데이터를 수집하고 저장하는데 사용되며 시간에 따른 변화 추적과 실시간 모니터링에 최적화된 도구입니다. 이 프로메테우스를 이용해 매트릭을 집계해보도록 하겠습니다.
가장먼저 Gradle 의존성을 추가해줍니다.
implementation 'io.micrometer:micrometer-registry-prometheus'
이후 yml 파일에 아래와 같이 설정을 변경해줍니다.
management:
endpoints:
web:
exposure:
include: "prometheus"
저는 스프링 부트를 이용하고 있으니 아래와 같은 설정도 추가해줍니다.
server:
tomcat:
mbeanregistry:
enabled: true
/actuator/prometheus 경로로 들어가면 위와 같은 모습을 확인할 수 있습니다.
이제 설정이 끝났으니 본격적으로 프로메테우스를 설치해보도록 하겠습니다. 도커로 편리하게 설치할 수 있지만 일단은 직접 서버에 다운받아 보도록 하겠습니다. (향후 도커 설치법도 포스팅하도록 하겠습니다.)
프로메테우스 설치
1.https://prometheus.io/download/ 사이트에서 자신이 사용하고 있는 클라우드, 컴퓨터 사양에 맞는 버전을 골라줍니다.
2. 해당 서버에서 복사한 링크를 이용해서 명령어를 실행해줍니다.
3. 해당 파일의 압축을 풀어줍니다.
4. 압축을 해제한 폴더로 이동해 prometheus.yml 파일을 수정해줍시다.
수정하는 방법
i를 눌러 insert 모드로 변경해준다 => 파일 내용을 수정하고 esc를 누른 후 :wq를 입력하면 된다.
metrics_path에 metric 경로를 지정해주고
scrape_interval 에 수집 주기를 설정합니다. (10s => 10초마다 해당 경로를 통해 매트릭을 수집해온다.)
targets : 매트릭 데이터를 수집할 대상(서비스) ex) localhost:8080
5. 수정이 완료되었다면 프로메테우스 파일을 실행합니다.
./prometheus
프로메테우스는 기본으로 9090포트를 사용합니다. 해당 포트로 들어가보도록 하겠습니다.
이곳에서 프로메테우스가 수집한 다양한 메트릭 값들을 확인해볼 수 있습니다.
다음편에서는 이 매트릭을 대시보드를 통해 아름답게 보여줄 그라파나 설정을 해보도록 하겠습니다.
'Backend > 프로젝트' 카테고리의 다른 글
QueryDsl을 활용한 카테고리별 조회(페이징) 기능 만들기 (0) | 2024.07.30 |
---|---|
Github Actions를 이용한 CI 구성 (0) | 2024.07.10 |
Spring Security + jwt + OAuth2(소셜 로그인 2편) (0) | 2024.06.30 |
OAuth란 무엇인가? (소셜 로그인 1편) (0) | 2024.06.17 |
모니터링 시스템 구축(2) Grafana 대시보드 구성하기 (0) | 2024.06.01 |