1 분 소요

스프링 프로젝트에 Prometheus로 데이터를 수집하고, Grafana로 모은 데이터를 시각화해서 모니터링해보자.
Prometheus와 Grafana는 docker 컨테이너로 띄워서 사용하려고 한다!

Prometheus

docker 컨테이너 실행

# Prometheus docker image 받기
docker pull prom/prometheus

# docker 컨테이너로 실행
docker run -d -p 9090:9090 -v {prometheus.yml 파일 경로}:/etc/prometheus/prometheus.yml --name prometheus prom/prometheus
  • {prometheus.yml 파일 경로}는 내 PC에 있는 prometheus.yml 경로를,
    /etc/prometheus/prometheus.yml은 docker 컨테이너 내 파일 경로를 의미

스프링 부트 의존성 설정

Prometheus

implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-core'
implementation 'io.micrometer:micrometer-registry-prometheus'

prometheus.yml

Prometheus에서 적용할 설정 파일을 작성해주자.

global:
  scrape_interval: 10s # 10초마다 매트릭을 수집
  evaluation_interval: 1m # 1분마다 규칙을 평가

  external_labels: # 외부 시스템에 표시할 이 서버의 레이블
    monitor: 'server-monitor'

rule_files: # 규칙을 로딩 및 평가 (evaluation_interval 기준)
# - "first.rules"
# - "second.rules"
        
scrape_configs:
  - job_name: 'monitoring-app'
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['host.docker.internal:8080'] # 도커 인스턴스 내부 호스트 (디폴트: 8080)
  • /actuator/prometheus는 데이터를 수집할 주소를 의미

스프링 시큐리티를 적용했을 때

일부 경로에 대해 인증없이는 넘어갈 수 없도록 설정했을 것이다. /actuator/prometheus는 데이터를 수집하는 주소이므로,
이 경로에 한해서 인증없이도 접근할 수 있도록 만들어주자.

public class SecurityConfig {

  private final UserDetailsService userDetailsService;
  private final JwtTokenProvider jwtTokenProvider;

  @Bean
  SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http
        .authorizeHttpRequests((authorizeHttpRequests) ->
                authorizeHttpRequests
                        .requestMatchers("/actuator/prometheus/**").permitAll()
                        .anyRequest().authenticated()
        )
        ...
    return http.build();
  }
  ...
}


모니터링

위에서 Prometheus를 컨테이너로 띄워서 실행중이라면 localhost:9090으로 접속이 가능할 것이다. 해당 주소로 들어가고나면
[Status - Targets]에서 prometheus.yml를 적용한 정보를 확인할 수 있으며 스프링 프로젝트를 실행중이라면 일정 주기마다
데이터를 수집하고 있을 것이다. StatusUP이면 정상이다.
prometheus_tutorial_targets prometheus_targets_sample

Grafana

docker 컨테이너 실행

# Grafana docker image 받기
docker pull grafana/grafana

# docker 컨테이너로 실행
docker run -d -p 3000:3000 --name grafana grafana/grafana

Dashboard 생성

컨테이너를 실행했다면 localhost:3000로 접속할 수 있다. 들어간 뒤 [Dashboards - New - Import]를 눌러주자.
그리고 import할 주소에 https://grafana.com/grafana/dashboards/4701을 적은 뒤 Load 버튼을 누르자.
grafana_tutorial_dashboard

스프링 프로젝트에 대해 Prometheus로 수집한 데이터를 최종적으로 Grafana에서 시각화해 metric 정보들을 모니터링할 수 있다!

grafana_tutorial_dashboard_import

References

카테고리:

업데이트:

댓글남기기