[Spring] Grafana + Prometheus 연동해서 모니터링 하기
스프링 프로젝트에 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
를 적용한 정보를 확인할 수 있으며 스프링 프로젝트를 실행중이라면 일정 주기마다
데이터를 수집하고 있을 것이다. Status
가 UP
이면 정상이다.
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
버튼을 누르자.
스프링 프로젝트에 대해 Prometheus로 수집한 데이터를 최종적으로 Grafana에서 시각화해 metric 정보들을 모니터링할 수 있다!
댓글남기기