본문 바로가기
공부

[모니터링] Prometheus + SpringBoot

by 꾸돼지 2025. 6. 6.
320x100

전 글에서 프로메테우스와 그라파나를 연결해서 모니터링 시스템은 구축해둔 상태이다.

백엔드의 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를 클릭한다.

 


 

위처럼 그라파나에서 제공하는 각종 메트릭에 대한 정보를 거의 실시간으로 확인할 수 있다.

 

서비스를 단순히 개발하는 입장에선 사실 필요없는 정보들일 수도 있지만...

운영하는 상황에선 로그와 함께 꼭 필요한 정보이기도 하다.

프로메테우스는 시간 별로 메트릭을 수집하고 있기 때문에, 로그와 함께 이 데이터를 보며 어떤 문제가 발생했을 때 확인하기 좋다.

320x100