[E-commerce App] Prometheus와 Grafana
이번에는 Prometheus와 Grafana를 연동해 Micrometer의 정보를 시각화해보자.
개요
Prometheus
- Metrics를 수집하고 모니터링 및 알람에 사용되는 오픈소스 애플리케이션
- 2016년부터 CNCF에서 관리되는 2번째 공식 프로젝트
- Level DB -> Time Series Database(TSDB) - Pull 방식의 구조와 다양한 Metric Exporter 제공
- 시계열 DB에 Metrics 저장 -> 조회 가능 (Query)
Grafana
- 데이터 시각화, 모니터링 및 분석을 위한 오픈소스 애플리케이션
- 시계열 데이터를 시각화하기 위한 대시보드 제공
설치 및 실행
Prometheus
설치
https://prometheus.io/download/
(mac OS는 darwin을 다운받으면 된다.)
위 사이트에서 최신 버전을 다운 받은 뒤에 압축을 해제하자.
압축은 마우스 더블 클릭으로 해제해도 되고, 터미널로는 아래 명령어로 해제할 수 있다.
$ tar xvzf prometheus-2.39.1.darwin-amd64.tar.gz
압축을 해제해보면 아래와 같은 파일로 구성되어 있다.
이어서 code
혹은 vi
로 application.yml
파일을 열어, 아래 설정을 진행하자.
기본은 아래처럼 되어있는데, 여기에 job을 추가하자.
prometheus.yml
정보를 수집하고자 하는 target을 지정한다.
맨 마지막 부분만 수정하면 된다.
# 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: ["localhost:9090"]
- job_name: "user-service"
scrape_interval: 15s
metrics_path: "/user-service/actuator/prometheus"
static_configs:
- targets: ["localhost:8000"]
- job_name: "order-service"
scrape_interval: 15s
metrics_path: "/order-service/actuator/prometheus"
static_configs:
- targets: ["localhost:8000"]
- job_name: "gateway-service"
scrape_interval: 15s
metrics_path: "/actuator/prometheus"
static_configs:
- targets: ["localhost:8000"]
target에는 api gateway 주소와 포트 번호를 적으면 된다.
🚨 그런데!
이전에 오더 서비스 actuator 설정을 해주지 않았었다.
gateway-service
에 들어가서,
application.yml
파일의 맨 아래에 오더 서비스 actuator 설정을 추가하자.- id: order-service uri: lb://ORDER-SERVICE predicates: - Path=/order-service/actuator/** - Method=GET filters: - RemoveRequestHeader=Cookie - RewritePath=/order-service/(?<segment>.*), /$\{segment}
실행
$ ./prometheus --config.file=prometheus.yml
정상적으로 기동했다면, http://127.0.0.1:9090
에서 대시보드에 접근할 수 있다.
혹시 아래와 같은 에러가 발생한다면?
이는 MacOS에서 발생할 수 있는 에러이다.
[환경설정 > 보안 및 개인 정보 보호]에서 “확인 없이 허용” 버튼을 클기하면 된다.
다시 시도해보면 다른 메시지가 뜰텐데,”열기”를 클릭하자.
테스트
프로메테우스 대시보드에서 지표값을 입력해보자.
어떤 지표값을 입력할 지는 http://127.0.0.1:8000/user-service/actuator/prometheus
에 접속해 확인하자.
(8000번은 api gateway의 포트번호이다.)
접속한 뒤, http_server_request
라고 검색해보면, 아래와 같이 뜨는데,
그 중에서 http_server_requests_count
가 무슨의미인지 프로메테우스에서 검색해보자.
Table 옆에 Graph를 클릭해보면, 그래프로 시각화하여 볼 수 있다.
Grafana
설치
https://grafana.com/
위 사이트에서 Downloads > Self-managed > Grafana Download > Mac 을 선택하면, 아래 커맨드를 확인할 수 있다.
$ curl -O https://dl.grafana.com/enterprise/release/grafana-enterprise-9.2.0.darwin-amd64.tar.gz
$ tar -zxvf grafana-enterprise-9.2.0.darwin-amd64.tar.gz
압축을 해제해보면 아래와 같은 파일로 구성되어 있다.
실행
$ ./bin/grafana-server
정상적으로 기동했다면, http://127.0.0.1:3000
에서 대시보드에 접근할 수 있다.
초기 username과 password는 모두 admin
이다.
(패스워드를 변경하도록 유도하는데, 변경해도 되고 변경하지 않아도 된다.)
Grafana와 Prometheus 연동
프로메테우스에서 가져온 정보를 그라파나가 시각화하는 것이기 때문에, 둘을 연동해야 한다.
그라파나 대시보드에 접속해 아래 순서대로 진행하자.
datasource 추가
설정에서 Add data source를 클릭한다.
프로메테우스를 선택한다.
프로메테우스가 기동되고 있는 주소를 정확히 입력하자.
(지금은 localhost
에서 기동되고 있지만, 나중에 변경된다면, 해당 주소도 변경해야 한다.)
이제 맨 마지막에 Save & test
를 클릭하자.
Dashboard 추가
그라파나에 아래 대시보드를 추가하자.
- JVM (Micrometer)
- Prometheus
- Spring Cloud Gateway
먼저 https://grafana.com/에 접속하자.
아까 그라파나를 다운 받을 때처럼, [Downloads > Self-managed > Grafana Download]에 들어가서 상단 메뉴 바에 Dashboards를 클릭한다.
검색 창에 jvm
을 검색하자.
(아래에 있어서 찾기 어려울 수도 있다. 찾지 않고 11892
ID만 써도 괜찮다.)
Copy ID to clipboard
를 클릭하자.
이제 다시 그라파나 대시보드로 돌아오자. (http://127.0.0.1:3000
)
대시보드에서 아래 사진의 경로로 들어가자.
이제 아까 복사한 ID를 붙여넣고 Load
하자.
프로메테우스를 클릭한 뒤 Import
하자.
같은 방법으로 그라파나 홈페이지에서 Prometheus 2.0 0verview
와 spring cloud gateway
를 검색해 import 하자.
모든 대시보드를 추가한 뒤에, 바로 사용할 것이 아니라 몇 가지 지표를 바꿔서 사용할 것이다.
대시보드 수정
Spring Cloud Gateway
Total Throughput
하단에 나오는 gateway_requests_seconds_count
가 프로메테우스에서 가지고 올 수 있는 값이어야 한다.
이 값을 복사해 프로메테우스에서 검색해보자
해당 값을 검색해보니 매칭되는 결과가 없고, 우리는 spring_cloud_gateway_requests_seconds_count
로 써야한다.
그리고 job의 이름도 변경해야 하는데, job의 이름은 prometheus.yml
파일에서 확인할 수 있다.
이제 지표 값을 변경하자.
아래 사진에 보이는 것처럼 지표값을 변경한 뒤에, Type
과 Fields
부분도 바꿔야지 N/A
가 뜨지 않고 수치가 뜬다.
그리고 왼쪽 상단의 Apply
를 클릭하자.
이제 수치를 확인할 수 있다.
다른 값들도 마찬가지로 지표값을 변경해주자.
Total Successful Requests Served
Total Unsuccessful Requests Served
이제 값이 다 채워졌다.
Successful API Calls
해당 값도 채워보자.
All Success API Gateway Calls
변경 전
이 때, routeId
는 라우터 id인데, gateway-service
에 입력한 라우터의 이름을 입력하면 된다.
변경 후
그래프가 잘 채워졌다.
JVM
해당 값도 채워보자.
CPU Usage
변경 전
변경 후
쿼리를 추가해 order-service
와 user-service
두 개의 지표를 가지고 올 수도 있다. (원하는 지표를 가지고 오면 된다.)
Memory Used
변경 전
변경 후
그래프가 잘 채워졌다.
💛 개인 공부 기록용 블로그입니다. 👻