Spring

Spring Boot + Prometheus + Grafana를 이용한 모니터링(2/3)

Beekei 2021. 12. 14. 17:32
반응형

Prometheus, Grafana에 대한 것은 이전 블로그글에서 확인하면 된다.

 

Spring Boot Project 생성 및 설정

Spring Boot Project(Gradle)를 생성하고 build.gradle에 의존성을 주입해준다.

dependencies {
	
    ...

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

 

application.yml에 다음과 같이 설정한다.

spring:
  application:
    name: monitoring

management:
  endpoint:
    metrics:
      enabled: true
    prometheus:
      enabled: true

  endpoints:
    web:
      exposure:
        include: health, info, metrics, prometheus

  metrics:
    tags:
      application: ${spring.application.name}
  • management.endpoint.{id}.enabled: true
    endpoint들을 활성화 한다.
    web 과 관련된 endpoint들은 infohealth를 제외하고는 모두 disabled 처리 되어있다.
    Boot 2.0 이상에서는 endpoints.{id}가 아닌 endpoint.{id}로 설정해야 한다.
  • management.endpoints.web.exposure.include: {id}, {id}, {id}
    {id} endpoint들을 활성화한다.
    management.endpoints.web.exposure.exclude를 사용해서 제외시킬 수 도 있다.
  • metrics.tags.application: {application name}
    metic application 정보를 설정한다. 

 

테스트해볼 endpoint를 만들고 서버를 가동시킨다.

@RestController
public class MetricsController {

    @GetMapping("/end-point1")
    public String endPoint1() {
        return "Metrics for endPoint1";
    }

    @GetMapping("/end-point2")
    public String endpoint2() {
        return "Metrics for endPoint2";
    }

}

 

Prometheus 설치

Prometheus는 docker로 설치할 것 이다.

prometheus.yml을 생성해 다음과 같이 작성한다.

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

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

rule_files: # 규칙을 로딩하고 evaluation_interval 설정에 따라 정기적으로 평가한다.
# - "first.rules"
# - "second.rules"
        
scrape_configs:
  - job_name: 'monitoring-app' # 잡 이름
    metrics_path: '/actuator/prometheus' # 메트릭을 수집할 path 설정
    static_configs:
      - targets: ['host.docker.internal:8080'] # 도커 인스턴스 내부 호스트:8080

Spring boot Application이 기본 포트인 8080으로 가동하고 있기 때문에 targets을 8080으로 잡아준다.

 

 

이제 도커로 Prometheus를 설치한다.

$ docker run -d -p 9090:9090 -v {prometheus.yml 파일 경로}/prometheus.yml --name prometheus prom/prometheus

도커의 명령어가 낯설다면 이전 도커 블로그 글을 참고하면 된다.

컨테이너가 생성되고 실행됬으면 http://localhost:9090으로 접속해보면 Prometheus 홈페이지가 나올것이다.

 

Status -> Targets으로 접속해보면 prometheus.yml에 설정한대로 활성화 된 것을 확인할 수 있다.

아까전에 만들었던 Test Endpoint에 접속한 후 http_server_requests_seconds_max를 검색해 메트릭을 잘 수집되고 있는지 확인해보자.

 

 

 

Prometheus만 사용하여 모니터링하기엔 너무나 역부족이다.

이 메트릭 정보들을 Grafana를 이용해 시각화하여 볼것이다.

 

 

 

Grafana의 사용예제는 다음 블로그글에 정리하겠다. 

 

Spring Boot + Prometheus + Grafana를 이용한 모니터링(3/3)

이 전 블로그 글에서 Spring Boot 프로젝트를 생성하고 Prometheus와 연동까지 해봤다. 이제 Grafana를 연동해 시각화를 해보자. Grafana 설치 및 사용 Grafana 역시 도커로 설치하겠다. docker run -d -p 3000:30..

devbksheen.tistory.com

 

반응형