전 글에서 프로메테우스와 그라파나를 연결해서 모니터링 시스템은 구축해둔 상태이다.
백엔드의 SpringBoot 서버의 메트릭을 수집해서 프로메테우스가 해당 서버에 질의할 수 있게 엔드포인트를 열어줘야 한다.
1. 스프링 부트 Actuator 라이브러리 추가, Prometheus 전용 메트릭으로 변경해서 엔드포인트 노출 라이브러리 추가
// Actuator, Prometheus
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-registry-prometheus'
1) Spring Actuator의 health 체크 기능은 LoadBalancer에서도 사용된다고 한다.
많이 써본적 없는 라이브러리여서 검색하다보니 좋은 글이 있다. 장애를 일으켜서 확인해봐야겠다.
https://toss.tech/article/how-to-work-health-check-in-spring-boot-actuator
Spring Boot Actuator의 헬스체크 살펴보기
서버의 상태를 알려주는 헬스 체크에 대해 알고 계시나요? 단순히 200 OK만 내려주겠거니 하고 별로 신경을 안 쓰고 계셨나요? 해당 포스트에서는 Spring Boot Actuaor가 제공해주는 헬스 체크는 어떤
toss.tech
[요약]
** Actuator의 HealthCheck 기능은 서버와 연동하고 있는 의존서버들의 health 체크를 수행하고 전부 살아있을 때 200 OK 발행
** 따라서 서비스 DB가 살아있어도 다른 연동 서버 중 하나가 문제가 있는 경우 로드벨런서에 서버가 사용 불가임을 알림
** 특정 서버의 장애 상황이 격리되지 않고 서비스 전체로 전이될 수 있는 문제 지점이 될 수 있음
2) micrometer-registry-prometheus는 Spring Actuator의 metrics를 Prometheus가 이해할 수 있게 번역해주는 변환기이다.
Micrometer는 메트릭 퍼사드 (Metric Facade) 역할을 수행한다.
Micrometer-core를 통해 Actuator가 수집한 메트릭을 표준API로 변경한다.
registry-*를 통해 연동하고 싶은 플랫폼에 알맞는 메트릭 포멧으로 변경하고, 엔드포인트를 생성까지 해준다.
2. 서버의 설정을 변경한다.
1) yml 파일 설정 수정
management:
endpoints:
web:
exposure:
include: health, prometheus
metrics:
tags:
# 수집되는 모든 메트릭에 공통 태그를 추가
application: upload-platform
나는 health와 prometheus 엔드포인트를 열어주고 싶다. 따라서 위처럼 설정 파일에 추가해주었다.
2) Security 설정
private Customizer<AuthorizeHttpRequestsConfigurer<HttpSecurity>.AuthorizationManagerRequestMatcherRegistry> authorizeRequests() {
return auths -> auths
.requestMatchers(LOGIN.toArray(new String[0])).permitAll()
.requestMatchers("/actuator/**")
.access(new WebExpressionAuthorizationManager("hasIpAddress('192.168.0.151') or hasIpAddress('127.0.0.1')"))
.anyRequest().authenticated();
}
RestAPI를 통해 메트릭을 수집하는 프로메테우스가 접속하기 위해서는 보안 설정을 열어줘야 한다.
프로메테우스 서버가 있는 IP인 151번과 내 개발 PC인 127.0.0.1의 접근을 허용했다.
이후 서버를 재시작하고, 다음의 URL로 브라우저에서 접근하면 메트릭이 보여진다.
http://127.0.0.1:9001/actuator/prometheus
3. 프로메테우스에서 SpringBoot에 데이터를 요청하도록 설정한다.
- job_name: "upload-platform"
metrics_path: /actuator/prometheus
scrape_interval: 15s
static_configs:
- targets: ["192.168.0.150:9001"] # Spring Boot 애플리케이션의 IP와 포트
이렇게 하고, 프로메테우스 서버를 재시작하면 데이터가 수집된다.
4. Grafana에서 대시보드에 추가한다.
나는 공식홈페이지의 사용자들이 만들어놓은 대시보드 중 12900 대시보드 모델을 추가해서 사용했다.
1) 그라파나 웹 페이지에 접속한 후, 왼쪽의 Dashboards에 들어간다.
2) 왼쪽 상단의 New 버튼을 클릭하고 Import를 선택한다.
3) Find and Import dashboards for common application at grafana.com/dashboards 에 12900을 입력하고 Load를 클릭한다.
4) 다음 나온 설정 창에 Name: SpringBoot-Upload-1, Prometheus: prometheus를 선택하고 Import를 클릭한다.
위처럼 그라파나에서 제공하는 각종 메트릭에 대한 정보를 거의 실시간으로 확인할 수 있다.
서비스를 단순히 개발하는 입장에선 사실 필요없는 정보들일 수도 있지만...
운영하는 상황에선 로그와 함께 꼭 필요한 정보이기도 하다.
프로메테우스는 시간 별로 메트릭을 수집하고 있기 때문에, 로그와 함께 이 데이터를 보며 어떤 문제가 발생했을 때 확인하기 좋다.
'공부' 카테고리의 다른 글
[React] 참조 동일성 (1) | 2025.06.08 |
---|---|
[모니터링] APM & Distributed Tracing (2) | 2025.06.07 |
[모니터링] Prometheus + Grafana (0) | 2025.06.06 |
[BE] RabbitMQ 장애 - 메시지 중복 처리, 메모리 부족, 디스크 공간 부족 (0) | 2025.06.05 |
[BE] RabbitMQ 장애 - 메시지 유실 (1) | 2025.06.05 |