StringBoot 를 사용하고 있는 어플리케이션에서 모니터링 방법중에서, Micrometer + Prometheus + Grafana 조합으로 모니터링 하는 방법을 알아보도록 하자.

 

Micrometer : JVM 기반의 어플리케이션의 메트릭을 제공한다. Spring Boot 2.0 부터 Micrometer 를 지원하고 있다.

Prometheus : metric을 수집하고 모니터링 및 알람에 사용되는 오픈소스 어플리케이션이다. 시계열 데이터베이스에 실시간 metric을 저장하고 query를 사용하여 metric을 조회할 수 있다.

Grafana : 데이터 시각화, 모니터링 및 분석을 위한 오픈소스 어플리케이션이다. 시계열 매트릭 데이터를 시각화 하는데 가장 최적화된 대시보드를 제공한다. 사용자는 Grafana에서 패널(panel)을 사용해 설정된 기간 동안 특정 metric을 나타내는 dashboard를 만들 수 있다.

 

SpringBoot + Prometheus + Grafana

 

 

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 를 입력한다.)

actuator/prometheus

 

반응형
댓글