Dev/Monitoring

Spring Boot actuator 와 함께 프로메테우스와 그라파나 사용해보기

린네의 2023. 12. 1. 02:19

 

 실습환경

-  macOS 13.4

 

Spring Boot 

1. build.gradle 파일에 prometheus 라이브러리 추가 한다.

implementation 'io.micrometer:micrometer-registry-prometheus' // 추가

 

 

2. 추가 후  프로젝트를 재기동 한 뒤 http://localhost:8080/actuator/prometheus 호출하여 라이브러리가 잘 반영되었는지 확인 할 수 있다.

 

 

프로메테우스 

 

1. 프로메테우스 다운로드 하기 

 

  https://prometheus.io/download/ 

 

 상단링크에서 다운로드 후 설치 위치에서 하단 명령어를 실행 한다.

 

 $ ./prometheus 

 

명령어 실행 후 http://localhost:9090 으로 접속시 아래와 같이 관리자 화면이 정상적으로 뜨면 성공이다.

( 기본 default 포트를 9090 으로 사용하고 있어서 9090 으로 접속한다. ) 

 

접속이 정상적으로 되었다면 [ Status > Targets ] 에 http://localhost:8080/actuator/prometheus  를 입력한다.

화면에서 http://localhost:8080/actuator/prometheus 가 실행중인지 아닌지도 확인 할 수 있다.

 

실행하면 뜨는 메인 페이지
[ Status > Targets ] 에서 Endpoint를  입력한 화면

 

EndPoint 가 실행되어 있을 때

 


2. 프로메테우스의 수집 설정 실습

 


 2-1. '/actuator/prometheus' 를 호출해서 메트릭을 주기적으로 수집하기 위해 사진과 같이 설정하도록 한다.

prometheus.yml 설정 파일

 

위 내용은  metrics_path ( localhost:8080/actuator/prometheusn ) 로 접근해서 1초 주기로 데이터를 수집하라는 뜻이다.

테스트를 위해 1초 주기로 지정하였지만 실제 운영에서는 10초에서 1분을 권장 한다.
 

 

2-2. 프로메테우스 재실행 후 http://localhost:9090/config 에 접속해서 추가한 설정 정보가 잘 반영 됨을 확인할 수 있다. 

 

yml 파일에 설정한 내용이 반영된 모습

 

 

2-3. 프로메테우스의 메인 화면에서 제공하는 [Table], [Graph] 항목에서 수집 정보를 조회할 수 있다. 

    

 

 

 

 cf. 검색시 { =, !=, =~ } 등을 통해 원하는 항목도 검색 가능하다.


    ex1) http_server_requests_seconds_count{method="/log"} 

            => "/log" 경로 호출에 대한 count 출력
    

    ex2) http_server_requests_seconds_count{method!="/actuator/prometheus"} 

             => "/actuator/prometheus" 경로를 제외하고 출력
    

    ex3) http_server_requests_seconds_count{method=~"POST | GET"} 

              => ~ 뒤에 정규식이 옴. GET 또는 POST 요청에 대해 모두 출력
   

     ex4) http_server_requests_seconds_count{method!~"/actuator.*} 

              => actuator 를 포함하는 요청을 필터링하고 출력 

 

 


  2-4.  http_server_requests_seconds_count offset 10m 를 입력하면 현재 시간을 기준으로 10분 전 데이터를 확인할 수 있다.

 


  2-5. 벡터범위 선택기
    http_server_requests_seconds_count[1m]  형식으로 사용할 수 있다.

    [] 안에 시간을 지정하면 지정한 시간동안 수집한 데이터를 계산해서 출력 해준다. 차트로는 바로 표현 불가능하고 가공해서 써야한다. 보통 그라파나를 통해서 가공해서 쓴다
   

요청한 데이터의 내용을 상세하게 볼 수 있다

 

 

 

3. 게이지와 카운터


 - 게이지 : 임의로 오르내리는 값 Ex. cpu 사용값을 의미한다
 - 카운터 : 단순하게 증가하는 단일 누적 값  Ex. http 요청 값을 의미한다

  3-1. increase(http_server_requests_seconds_count{uri="/log"}[1m])


   일반적으로 http_server_requests_seconds_count{uri="/log"} 로 호출하면 누적 그래프(데이터) 만 볼 수 있기 때문에 구간별로 얼마나 요청이 들어왔는지에 대해 확인이 어렵다.  따라서 보통은 increase 를 사용한다.
   increase(http_server_requests_seconds_count{uri="/log"}[1m]) 를 사용하면 이런 문제를 해결 할 수 있다. ( 아래 그래프 비교 참조 )
    cf.  rate : increase 와 유사한데 요청 비율을 알 수 있다
          irate : 급격히 증가한 값을 확인할 수 있다
 

누적데이터가 출력된 모습

 

구간별로 데이터가 출력된 모습



그라파나



 - 프로메테우스를 통해서 데이터를 조회하고 보여주는 역할을 한다. 여러가지 대시보드를 이용해서 한눈에 모니터링을 할 수 있다.
  

1. 그라파나를 다운로드 한다

 

https://grafana.com/grafana/download

 

Download Grafana | Grafana Labs

Overview of how to download and install different versions of Grafana on different operating systems.

grafana.com

 

위 링크에서 본인 OS 에 맞는 설치방법을 따르면 된다. 필자는 설치 환경이 MacOS 기 때문에 terminal 에  하단 명령어를 입력하여 다운로드를 진행했다.

 

$curl -O https://dl.grafana.com/enterprise/release/grafana-enterprise-10.2.2.darwin-amd64.tar.gz //  파일다운로드 명령어
$ tar -zxvf grafana-enterprise-10.2.2.darwin-amd64.tar.gz // 압축 제거 명령어 

 

 

다운로드 후 bin 폴더에서 ./grafana-server   명령어를 실행해서 그라파나를 실행할 수 있다. 실행하게 되면 default 포트가 3000 로 실행 된다.


3. 사이트 접속 후 home > connections > data sources  에서 프로메테우스를 추가한다.
 - 이때 프로메테우스 주소는 이전에 띄워놨떤 http://localhost:9090 로 실행 

4. 대시보드 만들기
  3-1. Home > Dashboards  에서  새로운 대시보드 추가할 수 있다.
  3-2. 패널 생성 후 디스크, cpu 등 직접 대시보드를 생성할 수 있다. 일반적으로는 이미 만들어 놓은 공유 대시보드를 이용해서 편리하게 작업할 수 있다.

5. 공용 대시보드
    https://grafana.com/grafana/dashboards 에서 원하는 대시보드의 id 카피 후  Home > Dashboards 에서 Newi > import 하여 사용할 수 있다.

 

 

Download | Prometheus

An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.

prometheus.io

   5-1. 

Dashboards > New > import 선택
하단에  Prometheus 를 선택한 후 Import 하여 공용 대시보드를 생성할 수 있음

 

생성된 대시보드를 확인할 수 있다