StringBoot 를 사용하고 있는 어플리케이션에서 모니터링 방법중에서, Micrometer + Prometheus + Grafana 조합으로 모니터링 하는 방법을 알아보도록 하자.
Micrometer : JVM 기반의 어플리케이션의 메트릭을 제공한다. Spring Boot 2.0 부터 Micrometer 를 지원하고 있다.
Prometheus : metric을 수집하고 모니터링 및 알람에 사용되는 오픈소스 어플리케이션이다. 시계열 데이터베이스에 실시간 metric을 저장하고 query를 사용하여 metric을 조회할 수 있다.
Grafana : 데이터 시각화, 모니터링 및 분석을 위한 오픈소스 어플리케이션이다. 시계열 매트릭 데이터를 시각화 하는데 가장 최적화된 대시보드를 제공한다. 사용자는 Grafana에서 패널(panel)을 사용해 설정된 기간 동안 특정 metric을 나타내는 dashboard를 만들 수 있다.
1. SpringBoot Dependency 에 추가
Spring Boot 2.0 부터 Micrometer 를 지원하고 있으므로, spring-boot-starter-actuator 를 추가해주면 자동으로 micrometer-core 가 추가된다. 추가적으로 micrometer-registry-prometheus 가 필요한데, 이것은 micrometer 가 만들어 내는 metric 을 Prometheus 포멧으로 제공하기 위함이다.
Prometheus의 url에 basic auth 추가를 위해 spring boot security를 사용한다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'io.micrometer:micrometer-registry-prometheus'
}
2. Configuration 추가
Prometheus url에 basic auth 추가를 위해 Configuration을 추가한다.
@Configuration
@EnableWebSecurity
public class PrometheusWebConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.passwordEncoder(passwordEncoder())
.withUser("actuator")
.password(passwordEncoder().encode("password"))
.roles("prometheus-user");
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
public void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/actuator/prometheus")
.authorizeRequests()
.anyRequest()
.hasRole("prometheus-user")
.and()
.httpBasic();
}
}
3. Actuator Endpoint 설정
application.yml 설정을 통해서 actuator endpoint 를 설정한다.
management:
endpoints:
web:
exposure:
include: health, info, prometheus
metrics:
distribution:
percentiles[http.server.requests]: 0.5, 0.9, 0.99
http://localhost:8080/actuator/prometheus URL 로 접속해보자.
(인증은 2번에서 설정했던 id, password 를 입력한다.)
'개발관련' 카테고리의 다른 글
Spring Boot 3 (Spring Framework 6) 무엇이 달라졌을까? (0) | 2023.08.01 |
---|---|
JPA Auditing 으로 CreatedDate / LastModifiedDate 기능 넣기 (0) | 2021.02.22 |
[Mysql] INNER JOIN + ORDER BY 에서 filesort 제거해보기 (0) | 2020.12.11 |
Reactive Streams 이해하고 구현해보기 (0) | 2020.11.25 |
commit 메시지에 자동으로 branch명 추가해보기 (0) | 2020.11.04 |