3 분 소요

이번에는 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을 다운받으면 된다.)

스크린샷 2022-10-15 오전 1 24 46

위 사이트에서 최신 버전을 다운 받은 뒤에 압축을 해제하자.
압축은 마우스 더블 클릭으로 해제해도 되고, 터미널로는 아래 명령어로 해제할 수 있다.

$ tar xvzf prometheus-2.39.1.darwin-amd64.tar.gz

압축을 해제해보면 아래와 같은 파일로 구성되어 있다.
스크린샷 2022-10-15 오전 1 36 35

이어서 code 혹은 viapplication.yml 파일을 열어, 아래 설정을 진행하자.

기본은 아래처럼 되어있는데, 여기에 job을 추가하자.
스크린샷 2022-10-15 오전 1 40 36

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에서 대시보드에 접근할 수 있다.
스크린샷 2022-10-15 오전 1 59 11

혹시 아래와 같은 에러가 발생한다면?
스크린샷 2022-10-15 오전 1 54 26

이는 MacOS에서 발생할 수 있는 에러이다.
[환경설정 > 보안 및 개인 정보 보호]에서 “확인 없이 허용” 버튼을 클기하면 된다.
스크린샷 2022-10-15 오전 1 56 18

다시 시도해보면 다른 메시지가 뜰텐데,”열기”를 클릭하자.
스크린샷 2022-10-15 오전 1 57 33

테스트

프로메테우스 대시보드에서 지표값을 입력해보자.
어떤 지표값을 입력할 지는 http://127.0.0.1:8000/user-service/actuator/prometheus에 접속해 확인하자.
(8000번은 api gateway의 포트번호이다.)

접속한 뒤, http_server_request라고 검색해보면, 아래와 같이 뜨는데,
스크린샷 2022-10-15 오전 2 03 58
그 중에서 http_server_requests_count가 무슨의미인지 프로메테우스에서 검색해보자.

스크린샷 2022-10-15 오전 2 07 51

Table 옆에 Graph를 클릭해보면, 그래프로 시각화하여 볼 수 있다.
스크린샷 2022-10-15 오전 2 06 59

Grafana

설치

https://grafana.com/
위 사이트에서 Downloads > Self-managed > Grafana Download > Mac 을 선택하면, 아래 커맨드를 확인할 수 있다.

스크린샷 2022-10-15 오전 1 25 12

$ 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

압축을 해제해보면 아래와 같은 파일로 구성되어 있다.
스크린샷 2022-10-15 오전 1 36 50

실행

$ ./bin/grafana-server

정상적으로 기동했다면, http://127.0.0.1:3000에서 대시보드에 접근할 수 있다.
스크린샷 2022-10-15 오전 2 11 55

초기 username과 password는 모두 admin 이다.
(패스워드를 변경하도록 유도하는데, 변경해도 되고 변경하지 않아도 된다.)

Grafana와 Prometheus 연동

프로메테우스에서 가져온 정보를 그라파나가 시각화하는 것이기 때문에, 둘을 연동해야 한다.
그라파나 대시보드에 접속해 아래 순서대로 진행하자.

datasource 추가

설정에서 Add data source를 클릭한다.
스크린샷 2022-10-15 오전 2 20 38

프로메테우스를 선택한다.
스크린샷 2022-10-15 오전 2 21 17

프로메테우스가 기동되고 있는 주소를 정확히 입력하자.
(지금은 localhost에서 기동되고 있지만, 나중에 변경된다면, 해당 주소도 변경해야 한다.)
스크린샷 2022-10-15 오전 2 22 22

이제 맨 마지막에 Save & test를 클릭하자.

Dashboard 추가

그라파나에 아래 대시보드를 추가하자.

  • JVM (Micrometer)
  • Prometheus
  • Spring Cloud Gateway

먼저 https://grafana.com/에 접속하자.
아까 그라파나를 다운 받을 때처럼, [Downloads > Self-managed > Grafana Download]에 들어가서 상단 메뉴 바에 Dashboards를 클릭한다.
스크린샷 2022-10-15 오전 2 28 46

검색 창에 jvm을 검색하자.
(아래에 있어서 찾기 어려울 수도 있다. 찾지 않고 11892 ID만 써도 괜찮다.)
스크린샷 2022-10-15 오전 2 45 25

Copy ID to clipboard를 클릭하자.
스크린샷 2022-10-15 오전 2 45 44

이제 다시 그라파나 대시보드로 돌아오자. (http://127.0.0.1:3000)
대시보드에서 아래 사진의 경로로 들어가자.
스크린샷 2022-10-15 오전 2 25 24

이제 아까 복사한 ID를 붙여넣고 Load 하자.
스크린샷 2022-10-15 오전 2 42 20

프로메테우스를 클릭한 뒤 Import 하자.
스크린샷 2022-10-15 오전 2 43 45

같은 방법으로 그라파나 홈페이지에서 Prometheus 2.0 0verviewspring cloud gateway를 검색해 import 하자.
스크린샷 2022-10-15 오전 2 38 36 스크린샷 2022-10-15 오전 2 49 59

모든 대시보드를 추가한 뒤에, 바로 사용할 것이 아니라 몇 가지 지표를 바꿔서 사용할 것이다.

대시보드 수정

Spring Cloud Gateway

Total Throughput

스크린샷 2022-10-15 오전 2 56 37

하단에 나오는 gateway_requests_seconds_count가 프로메테우스에서 가지고 올 수 있는 값이어야 한다.
스크린샷 2022-10-15 오전 2 58 13

이 값을 복사해 프로메테우스에서 검색해보자
스크린샷 2022-10-15 오전 3 01 03

해당 값을 검색해보니 매칭되는 결과가 없고, 우리는 spring_cloud_gateway_requests_seconds_count로 써야한다.
그리고 job의 이름도 변경해야 하는데, job의 이름은 prometheus.yml 파일에서 확인할 수 있다.
스크린샷 2022-10-15 오전 3 03 54

이제 지표 값을 변경하자.
아래 사진에 보이는 것처럼 지표값을 변경한 뒤에, TypeFields 부분도 바꿔야지 N/A가 뜨지 않고 수치가 뜬다.
스크린샷 2022-10-15 오전 3 12 39

그리고 왼쪽 상단의 Apply를 클릭하자.
이제 수치를 확인할 수 있다.
스크린샷 2022-10-15 오전 3 15 39

다른 값들도 마찬가지로 지표값을 변경해주자.

Total Successful Requests Served
스크린샷 2022-10-15 오전 3 17 55

Total Unsuccessful Requests Served
스크린샷 2022-10-15 오전 3 19 09

이제 값이 다 채워졌다.
스크린샷 2022-10-15 오전 3 21 16

Successful API Calls

해당 값도 채워보자.
스크린샷 2022-10-15 오전 3 22 38

All Success API Gateway Calls
변경 전
스크린샷 2022-10-15 오전 3 23 25
이 때, routeId는 라우터 id인데, gateway-service에 입력한 라우터의 이름을 입력하면 된다.

변경 후
스크린샷 2022-10-15 오전 3 25 50

그래프가 잘 채워졌다.
스크린샷 2022-10-15 오전 3 26 50

JVM

해당 값도 채워보자.
스크린샷 2022-10-15 오전 3 28 04

CPU Usage
변경 전
스크린샷 2022-10-15 오전 3 30 52

변경 후
쿼리를 추가해 order-serviceuser-service 두 개의 지표를 가지고 올 수도 있다. (원하는 지표를 가지고 오면 된다.)
스크린샷 2022-10-15 오전 3 36 16

Memory Used
변경 전
스크린샷 2022-10-15 오전 3 29 20

변경 후
스크린샷 2022-10-15 오전 3 29 54

그래프가 잘 채워졌다.
스크린샷 2022-10-15 오전 3 38 54



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기