[docker] 프로메테우스와 그라파나로 스프링부트 모니터링 환경 구성하기

앞서 springboot 프로젝트에 액츄에이터를 활성화 시켜서 docker 에 올리는 작업을 진행했습니다. 이제 프로메테우스(prometheus)와 그라파나(grafana)를 설치해 스프링부트 서버 모니터링 환경을 구성해보려 합니다.

프로메테우스는 스프링부트에서 제공해주는 메트릭스 정보를 수집하는 서버이고 그라파나는 이 데이터를 시각화 해서 보여주는 시각화툴입니다.

 

 

프로메테우스(prometheus) 설치

 

 

먼저 프로메테우스를 설치하기 위해 config 파일을 작성해줍니다.

prometheus.yml 파일을 만들어 아래 내용을 작성해줍니다.

전역으로 15초 인터벌로 데이터를 수집하도록 설정이 되었으며 scrape_configs 내 접근 대상 정보를 기입해줍니다.

 

job_name 으로 프로메테우스와 스프링액츄에이터를 설정해주고 targets로 서버 정보를 넣어줍니다.

host.docker.internal 은 localhost 와 같은 정보를 제공합니다.

 

전 프로메테우스, 도커, 스프링액츄에이터 3개로 구성해두었습니다. 공식문서에서 제공해준 파일에 살짝 수정을 가했습니다.

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
      monitor: 'codelab-monitor'

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first.rules"
  # - "second.rules"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ['host.docker.internal:9090'] # Only works on Docker Desktop for Windows
        
        
  - job_name: 'docker'
         # metrics_path defaults to '/metrics'
         # scheme defaults to 'http'.

    static_configs:
      - targets: ['host.docker.internal:9323']
      
  # 추가 설정
  - job_name: "spring-actuator"
    metrics_path: '/actuator/prometheus'
    scrape_interval: 1s
    static_configs:
      - targets: ['host.docker.internal:9201']

 

아래 명령어로 프로메테우스를 설치하고 도커 컨테이너에서 실행시키도록 합니다.

포트는 외부내부 9090 으로 설정해서 올립니다.

 docker run -d -p 9090:9090 -v /d/share/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

 

 

 

브라우저로 붙어보면 정상적으로 프로메테우스가 실행되는 것을 확인하실 수 있습니다.

 

 

 

api 호출을 통해 프로메테우스가 추적 수집하는 시계열 데이터 메트릭도 확인이 가능합니다.

 

 

그라파나 설치

 

이번에는 모니터링 시각화툴 그라파나를 설치해봅니다. 프로메테우스가 수집하는 정보를 시각화해서 보여주기 위함입니다.

 

이미지 설치가 안되어 있으면 자동으로 최신버전을 당겨받아서 설치까지 진행해줍니다. docker 참 좋네요

$ docker run -d -p 3000:3000 grafana/grafana

Unable to find image 'grafana/grafana:latest' locally

latest: Pulling from grafana/grafana
f56be85fc22e: Pull complete
daab7161a82a: Pull complete
30e41aec0231: Pull complete
8875670ca84a: Pull complete
858307447358: Pull complete
c0c60e9591cf: Pull complete
553b6de9d0f4: Pull complete
0ba4f358049d: Pull complete
9f16abacf851: Pull complete
Digest: sha256:a1808702a37c8b389a97aa0ded6db863725e3840dfb7d2483b1d244ba45330fe
Status: Downloaded newer image for grafana/grafana:latest
ff4688f1e9571f0890a0242594a3b41baff03ad96b3fdbb1f846208f1bd269a4

 

 

설치가 끝난 뒤 localhost:3000 으로 접속해보면 아래와 같은 로그인 화면이 나타납니다.

최초 로그인 정보는 admin/admin 인데 테스트용이라 그대로 쭉 가져가봅니다.

 

 

 

다음으로 데이터 소스를 추가해주어야 합니다. 앞서 설치했었던 프로메테우스로 부터 정보를 끌어올 수 있게 셋팅하는 과정입니다.

좌측 메뉴의 톱니바퀴를 통해 Data Sources 를 찾아들어오셔서 Add data Source 를 눌러줍니다.

 

 

 

모니터링 객체명을 지정해주시고 type은 Prometheus를 선택, http 서버 url은 앞서 프로메테우스 설치 때 설정했었던 localhost:9090으로 지정해줍니다. Access 는 direct 까지 선택해주신뒤 Save & Test 를 눌러 정상동작하는지 확인해줍니다.

 

 

 

그라파나 대쉬보드 

 

다음으로 모니터링 dashboard 를 선택해줄 차례입니다.

 다양한 환경을 위해 사전에 제작되어 배포되고 있는 대쉬보드들이 많이 있습니다. 

 

https://grafana.com/grafana/dashboards

 

Dashboards | Grafana Labs

 

grafana.com

 

대쉬보드 사이트에 들어가보시면 아래처럼 다양한 플랫폼을 위해 사전 제공되고 있는 것 중에 본인 환경에 맞는 대쉬보드를 가져와서 등록해 사용하시면 됩니다.

전 spring 환경이라서 spring 으로 검색해서 가져왔습니다.

 

 

그중에 가장 다운로드수가 많은 JVM(Micrometer)를 가져와보았습니다.

항목을 선택해서 들어가보시면 아래와 같은 대쉬보드에 대한 설명화면이 나오는데 우측에 Copy ID to clipboard 를 눌러 이 대쉬보드의 아이디값을 클립보드에 저장해둡니다.

 

 

JVM 대쉬보드의 아이디 값은 4701입니다. 

json 파일을 다운로드 받아서 import 하는 방법도 제공해주고 있으나 아이디 값만 입력하면 되는것을 굳이 수고할 필요는 없을것 같습니다.

 

그라파나의 import 메뉴를 찾아들어가서 4701 아이디를 입력 해주고 나머지 정보를 선택한뒤 Import 작업을 진행하면 끝이 납니다.

 

 

 

최종적으로 모니터링 대쉬보드가 완성이 되었습니다. 

스프링 서버가 제공하는 액츄에이터로부터 프로메테우스가 정보를 수집, 그라파나에서 시각화해 보여주고 있는 최종적인 모습입니다. 

액츄에이터가 제공해주는 정보가 상당히 많고 또 이를 어떻게 활용해야 하는지를 스터디하는게 다음 단계인듯 합니다. 로그파일 모니터링 및 처리도 필요한데 이 부분도 더 파보아야 겠습니다.

 

 

https://quantrader.tistory.com/157

 

[docker] spring boot 도커 환경에 빌드 배포하기

앞서 카카오톡 메신저봇 챗봇 서버를 돌리기 위해 윈도우11에 docker desktop 환경을 구축했었습니다. [docker] docker desktop 설치, 챗봇 서버 이미지 배포 테스트 윈도우에 WSL2 docker 설치 후 테스트 서버

quantrader.tistory.com