Spring Boot actuator 와 함께 프로메테우스와 그라파나 사용해보기
실습환경
- 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 가 실행중인지 아닌지도 확인 할 수 있다.
2. 프로메테우스의 수집 설정 실습
2-1. '/actuator/prometheus' 를 호출해서 메트릭을 주기적으로 수집하기 위해 사진과 같이 설정하도록 한다.
위 내용은 metrics_path ( localhost:8080/actuator/prometheusn ) 로 접근해서 1초 주기로 데이터를 수집하라는 뜻이다.
테스트를 위해 1초 주기로 지정하였지만 실제 운영에서는 10초에서 1분을 권장 한다.
2-2. 프로메테우스 재실행 후 http://localhost:9090/config 에 접속해서 추가한 설정 정보가 잘 반영 됨을 확인할 수 있다.
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.