송민준의 개발노트

Prometheus, Grafana 세팅 본문

인프라/Prometheus-Grafana

Prometheus, Grafana 세팅

송민준 2023. 5. 7. 22:37

Prometheus란?

Prometheus는 클라우드 네이티브 애플리케이션 모니터링 시스템으로, SoundCloud에서 개발되어 CNCF(Cloud Native Computing Foundation)의 프로젝트 중 하나로 관리되고 있는 오픈소스 프로젝트입니다.

Prometheus는 다양한 데이터 소스에서 지표(metric)를 수집하고, 이를 시각화하고 경고(alerting)하는 기능을 제공합니다. 이를 통해 시스템의 성능, 가용성, 상태 등을 모니터링할 수 있습니다. 또한, Prometheus는 매우 확장 가능하며, 수천 대의 머신에서 대규모로 사용할 수 있습니다.

 

Prometheus의 장단점

장점 

  • 다양한 데이터 소스와의 연동 가능
    • Prometheus는 다양한 데이터 소스에서 지표 데이터를 수집할 수 있습니다. 예를 들어, HTTP, SNMP, JMX 등의 프로토콜을 지원하며, 커스텀 컬렉터를 만들어서 데이터를 수집할 수도 있습니다.
  • 확장 가능
    • Prometheus는 확장 가능하며, 여러 대의 서버에서 수천 개의 지표를 수집할 수 있습니다. 또한, 대규모 클러스터에서도 높은 가용성을 제공하며, 데이터를 분산하여 저장하여 데이터 손실을 방지합니다.
  • 쿼리 언어의 강점
    • Prometheus는 매우 강력한 쿼리 언어(promQL)를 제공하여, 데이터에 대한 다양한 질의를 수행할 수 있습니다. 이를 통해, 데이터를 빠르고 쉽게 분석할 수 있으며, 다양한 경고 규칙을 생성할 수 있습니다.
  • 경고 기능 제공
    • Prometheus는 경고(alerting) 기능을 제공합니다. 이를 통해, 시스템 이상 상황에 대해 신속하게 대응할 수 있습니다. 또한, 경고 규칙은 매우 유연하게 설정할 수 있으며, 여러 조건을 조합하여 사용할 수 있습니다.
  • 커뮤니티 지원
    • Prometheus는 CNCF(Cloud Native Computing Foundation)의 프로젝트 중 하나로, 매우 활발한 커뮤니티 지원을 받고 있습니다. 따라서, 다양한 확장 기능과 지원 서비스를 쉽게 찾을 수 있으며, 문제 해결을 위한 도움을 받을 수 있습니다.

단점

  • 지원하는 데이터베이스 종류가 한정적 
    • Prometheus는 기본적으로 Time-series 데이터를 수집하기 위한 데이터베이스를 사용하고 있으며, 이 데이터베이스는 내부적으로 메모리와 디스크에 데이터를 저장합니다. 하지만, 이 데이터베이스의 경우 쿼리 처리 속도가 느리고, 대용량 데이터를 처리하기에는 한계가 있습니다. 따라서, 대규모 데이터 처리가 필요한 경우, 다른 데이터베이스와의 연동이 필요합니다.
  • 운영 및 유지보수의 어려움
    • Prometheus는 매우 복잡한 시스템이며, 모니터링 대상의 수가 증가하면 운영 및 유지보수가 어려워집니다. 특히, PromQL 쿼리 작성이 어렵고, 알람 규칙의 관리가 복잡합니다.
  • 저장소 용량 제한
    • Prometheus는 저장소 용량이 제한되어 있으며, 데이터를 오랫동안 보관하기에는 한계가 있습니다. 이 문제를 해결하기 위해서는 데이터를 외부 시스템으로 이전하거나, 더 많은 저장소를 추가해야 합니다.
  • 설치 및 설정의 복잡성
    • Prometheus는 매우 복잡한 시스템이며, 설치와 설정에 대한 이해가 필요합니다. 특히, 모니터링 대상의 추가와 모니터링 대상에서 지표를 수집하기 위한 설정이 어렵습니다.

 

Docker 기준 설치 방법

1. bitnami에서 패키징한 prometheus를 사용하기 위해 이미지 Pull

2. config file 위치(prometheus.yml)

3. Job 등록

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"]
  # User Custom
  - job_name: "user-service"
    # interval 15s
    scrape_interval: 15s
    # scrap url
    metrics_path: '/user-service/actuator/prometheus'
    static_configs:
    - targets: ['192.168.219.104:8000']
  # api-gateway  
  - job_name: "gateway-service"
    # interval 15s
    scrape_interval: 15s
    # scrap url
    metrics_path: '/actuator/prometheus'
    static_configs:
    - targets: ['192.168.219.104:8000']

 

4. 연동될 Application 세팅

pom.xml

<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

application.yml

management:
  endpoints:
    web:
      exposure:
        include: info, metrics, prometheus

gateway filter

- id: user-service
  uri: lb://USER-SERVICE
  predicates:
    - Path=/user-service/actuator/**
    - Method=GET,POST
  filters:
    - RemoveRequestHeader=Cookie
    - RewritePath=/user-service/(?<segment>.*), /$\{segment}

 

 

 

 

Grafana란?

Grafana는 데이터 시각화 도구로, 다양한 데이터 소스를 지원하여 대시보드를 구성하고, 시계열 데이터를 시각적으로 분석할 수 있습니다. 이를 통해, 데이터 분석 및 감시에 필요한 다양한 시각화 기능을 제공합니다. Grafana는 다양한 시각화 도구를 제공하며, 경고 기능을 통해 시스템의 성능과 상태를 모니터링하고 경고를 설정할 수 있습니다. 또한, 다양한 플러그인을 지원하여, 추가 기능을 구현하거나 다양한 데이터 소스와 연결할 수 있습니다. Grafana는 대규모 시스템의 모니터링 및 감시에 유용하게 사용됩니다.

 

Docker 기준 설치 방법

1. grafana에서 공식으로 지원해주는 grafana 이미지 pull

2. grafana와 prometheus 연동 설정

- http://localhost:3000/datasources 접속

- Add new data source 클릭

- prometheus 클릭

- docker로 구성되어 있기에 localhost가 아닌 ip 로 세팅

- Save & Test 로 정상 작동 확인

 

3. 대시보드 추가

- http://localhost:3000/dashboards 이동

 

- dashboard 추가를 하는데 남들이 만들어놓은 dashboard를 가져옴(import)

 

- import를 위해선 grafana에서 dashboard를 format을 가져와야 함. 아래 id를 copy

 

- import 실행!

 

- prometheus 데이터 소스 세팅 후 Load

JVM Dashboard

 

 

- JVM 정보 외에도 Prometheus에 대한 정보만 나타내는 대시보드도 추가

 

 

Grafana 대시보드 수정 방법

1. Spring Cloud Gateway 대시보드 기반으로 수정함

2. Edit으로 진입

 

3. query에 있는 변수 값이 실제 prometheus에서 검색이 가능한 값이여야 한다.(없으면 N/A)

 

4. prometheus에 실제 검색을 해보니 위 변수 말고 사용가능한 변수가 있다.

변경해주자.

 

5. 변수명 말고도 job 이름도 변경해야 한다. 이전 prometheus 세팅에서 config 설정하는 곳이 있는데 api-gateway를 세팅한게 있다. 그 job의 이름을 넣어주자.

 

6. 우측 option에 Fields도 변경

7. 혹시나 필터조건 값이 없어서 N/A가 나오면 아래와 같이 기본값 0으로 사용하자.

 

 

* Bitnami 이미지를 왜 사용할까? *

  • 쉬운 설치 및 구성
    • Bitnami Prometheus를 사용하면, Prometheus를 손쉽게 설치하고 구성할 수 있습니다. Bitnami Prometheus는 미리 구성된 설정 파일과 커맨드 라인 도구를 제공하여, 초기 설정이나 구성 변경이 쉬워집니다.
  • 다양한 플러그인 및 확장 기능 제공
    • Bitnami Prometheus는 다양한 플러그인 및 확장 기능을 제공합니다. 이를 통해, Prometheus를 더욱 강력하게 사용할 수 있으며, 데이터 소스에 대한 수집 및 분석, 경고, 대시보드 등의 기능을 추가할 수 있습니다.
  • 보안성 강화
    • Bitnami Prometheus는 보안성을 강화하기 위해 다양한 기능을 제공합니다. 예를 들어, SSL/TLS 암호화를 지원하며, 인증 및 권한 부여를 위한 인증서와 권한 부여 파일을 제공합니다.
  • 지원 서비스 제공
    • Bitnami Prometheus는 고객 지원을 제공합니다. 이를 통해, 문제 해결을 위한 도움을 받을 수 있으며, 제품 개선 및 업데이트 정보를 얻을 수 있습니다.

 

참고

chatgpt

이도원님 MSA 강의