본문 바로가기

개발(합니다)/Java&Spring

[spring boot 설정하기-25] spring cloud Resilience4j(2)와 prometheus, grafana 연동 설정 및 테스트

반응형

1. 개요

circuit breaker가 오픈되었는지 닫혀있는지를 응답코드로 확인해야하는데

fallback이 적용되면 응답코드를 확인할 수 없습니다.

Resilience4j에서 모니터닝 툴을 제공하지 않고 Micrometer(https://micrometer.io/)로 metric을 제공합니다.

제공되는 메트릭을 수집하고 표현하는 대시보드는 Prometheus(https://prometheus.io/)와 Grafana(https://grafana.com/)로 모니터링을 할 수 있습니다.

Micrometer은 메트릭 수집 클라이언트에게 제공하는 표준 인터페이스입니다.

각 클라이언트에서 metric을 수집해서 원하는 형태의 format으로 변경하여 사용할 수 있어 유연합니다.

1-1. 참고 사이트

그라파나 대시보드 템플릿 사이트
https://grafana.com/grafana/dashboards?dataSource=prometheus&direction=desc&orderBy=downloads

rasilience4j 그라파나 대시보드 샘플

https://resilience4j.readme.io/docs/grafana-1

그라파나 래퍼런스
https://grafana.com/docs/grafana/next/datasources/prometheus/

2. prometheus 구성

prometheus.yml을 작성하고 docker로 프로메테우스를 구성합니다.

2-1. 의존성 추가

implementation 'io.micrometer:micrometer-registry-prometheus'

http://localhost:7979/actuator/ 로 접속하면 prometheus가 추가된걸 확인할 수 있습니다.

2-2. prometheus.yml

promethues의 설정 정보를 미리 작성합니다.

static_configs:
- targets: ['host.docker.internal:7979'] # Application host:port

해당 부분은 수집하고자 하는 서비스에 대한 정보를 입력합니다.
구현했던 Resilience4j의 port가 7979였고 docker로 구성하기 위해 host.docker.internal을 입력했습니다.

global:
  scrape_interval: 10s # 10초마다 매트릭을 수집 / default 60초
  evaluation_interval: 10s  # 10초마다 규칙 평가 / default 60초
scrape_configs:
  - job_name: 'spring-boot-app' # 수집하는 job 명칭
    metrics_path: '/actuator/prometheus' # Application prometheus endpoint
    #scrape_interval: 5s
    static_configs:
      - targets: ['host.docker.internal:7979'] # Application host:port

2-3. docker에서 prometheus 실행

prometheus.yml을 작성했던 위치에서 docker를 실행합니다.

docker run -p 9898:9090 -v ./prometheus.yml:/etc/prometheus/ --name cloud-resilience4j-prometheus -d prom/prometheus --config.file=/etc/prometheus/prometheus.yml

localhost:9898로 접속하면 prometheus를 확인할 수 있습니다.

jvm\_memory\_used\_bytes 를 입력하고 조회하면 매트릭정보를 얻을 수 있습니다.
글쓴이는 실시간으로 조회하는 방법을 찾지 못하였고
그라파나로 연결하면 정해진 시간마다 주기적으로 모니터링을 할 수 있습니다.

Status-Targets에서 현재 수집되고 있는 서비스를 확인할 수 있습니다.

3. grafana 구성

3-1. docker에서 grafana 실행

기본적으로 제공되는 docker 문법으로 그라파나를 실행합니다.

docker run -d --name=grafana -p 9988:3000 grafana/grafana

http://localhost:9988/로 접속하면 그라파나를 확인할 수 있습니다.

3-2. Resilience4j import

3-2-1. 아래 사이트에서 그라파나 템플릿을 다운

https://github.com/resilience4j/resilience4j/blob/master/grafana_dashboard.json

3-2-2. grafana import

글쓴이는 이미 대시보드를 생성한게 있어서 Name과 Unique identifier (uid)에 2를 붙였습니다.

처음하시는 분들은 바로 import를 누르셔도 됩니다.

3-3. 템플릿 수정

처음 만들면 아래 사진처럼 오류가 났다고 합니다.

템플릿과 서비스의 Datasource와 Variables가 맞지 않아 발생하는 오류입니다.

해결하기 위해 각각의 패널과 대시보드 설정 수정합니다.

3-3-1. 패널 수정

패널의 타이틀을 선택하면 아래 사진처럼 나옵니다.
편집을 선택하면 패널로 들어갈 수 있습니다.

패널로 들어오면 왼쪽 아래에 빨간색으로 표시된 부분이 있습니다.

표현하고자 하는 서비스를 선택하면 아래처럼 정상적으로 표시됩니다.

 

다른 패널도 모두 수정하면 아래 사진처럼 대시보드를 볼 수 있습니다.

3-3-2. 변수 수정

상단에 선언된 application, instance, CircuitBreaker Name, Retry Name, Bulkhead Name과 매트릭 정보가 일치하지 않아서 생기는 오류입니다.

 

대시보드의 설정을 클릭하고 Variables에 들어가면 선언된 변수들이 있습니다.

application을 들어가면 Datasource처럼 빨간색으로 표시된 부분을 클릭해서 원하는 서비스를 입력합니다.

그리고 query에 서비스에서 제공하는 매트릭 정보를 입력합니다.

알맞게 입력하면 update 버튼 위에 미리보기로 값을 확인할 수 있습니다.

다시 대시보드로 나오면 apllication 명칭이 알맞게 변경된걸 확인할 수 있습니다.

 

 

프로메테우스 쿼리는 아래 사이트를 참고하시면 됩니다.

https://grafana.com/docs/grafana/next/datasources/prometheus/

반응형