Cloud/MSA

[MSA] Prometheus와 Grafana

문승주 2024. 12. 7. 22:02
반응형

본 내용은 인프런의 이도원 님의 강의 "Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)" 내용을 바탕으로 정리한 내용입니다.

Prometheus

  • 시스템 모니터링 및 경고 알람에 사용되는 오픈소스 애플리케이션

특징

  • 다양한 메트릭 수집: Prometheus는 다양한 방식으로 메트릭을 수집하는데 HTTP를 통한 pull 메커니즘을 사용하며, 이를 위해 다양한 exporter들이 존재한다.
  • 시계열 데이터베이스: 수집된 메트릭을 시계열 데이터베이스로 저장하며 각 데이터 포인트는 타임스탬프와 라벨이 붙어 있다.
  • PromQL: Prometheus Query Language를 통해 복잡한 질의를 수행하고 데이터를 분석할 수 있다.
  • 알림 시스템: 특정 조건에 따른 알림을 설정할 수 있으며, Alertmanager를 통해 알림을 관리한다.
  • 자동화된 서비스 발견: Kubernetes, Consul, Etcd 등 다양한 서비스 디스커버리 메커니즘을 지원한다.

Grafana

  • 시각화 도구로서, 다양한 데이터 소스에서 데이터를 가져와 대시보드 형태로 시각화하는 데 사용되고 Prometheus를 포함한 여러 데이터 소스를 지원한다.

특징

  • 다양한 데이터 소스 지원: Prometheus, Graphite, InfluxDB, Elasticsearch 등 여러 데이터 소스를 지원한다.
  • 대시보드: 사용자가 데이터를 시각화할 수 있는 대시보드를 생성할 수 있고 여러 가지 차트, 그래프, 테이블 등을 제공한다.
  • 알림: 특정 조건에 따라 알림을 설정하고, 이메일, Slack 등의 다양한 채널로 알림을 보낼 수 있다.
  • 플러그인: 다양한 플러그인을 통해 기능을 확장할 수 있다.
  • 사용자 관리: 사용자와 권한을 관리할 수 있어, 조직 내 여러 사용자가 협업할 수 있다.

실습

Prometheus 설치

  • https://prometheus.io/download/ 에서 zip 파일 다운로드 후 압축 해제
  • prometheus.exe 파일로 실행
  • http://localhost:9090 URL 호출 시 Prometheus 대시 보드에 접근할 수 있다.
  • Expression에서 검색 시 메소드 호출 결과 정보를 확인할 수 있다.
  • Graph 탭을 확인하면 시간대별로 메소드 호출 결과를 확인할 수 있다.

Prometheus 폴더

prometheus.yml
  - job_name: "userService"
    scrape_interval: 15s
    metrics_path: "userService/actuator/prometheus"
    static_configs:
    # GatewatService의 포트번호
    - targets: ["localhost:8080"]

  - job_name: "orderService"
    scrape_interval: 15s
    metrics_path: "orderService/actuator/prometheus"
    static_configs:
    # GatewatService의 포트번호
    - targets: ["localhost:8080"]

  - job_name: "gatewayService"
    scrape_interval: 15s
    metrics_path: "actuator/prometheus"
    static_configs:
    - targets: ["localhost:8080"]
  • job_name: 메트릭을 수집할 작업의 이름을 정의한다.
  • scrape_interval: 메트릭 수집 간격을 설정하며, 15초로 설정되어 있다.
  • metrics_path: 메트릭 수집 경로로, 각 서비스의 actuator 경로를 지정한다.
  • static_configs: Prometheus가 수집할 대상을 설정하며, 예시에서는 localhost:8080이 사용된다.

실행 및 확인

  • prometheus.exe 파일을 실행하면, Prometheus가 동작하며 http://localhost:9090 에서 대시보드를 확인할 수 있다.
  • Expression 창에 PromQL 쿼리를 입력해 메트릭 데이터를 검색하고 Graph 탭을 통해 시간대별 메트릭 변화를 시각화할 수 있다.

GatewayService

application.yml
  • GatewayService와 OrderService의 Actuator 엔드포인트가 Prometheus에서 메트릭을 수집할 수 있도록 설정해야 한다.
spring:    
  cloud:  
    gateway:   
      routes:
        ...
        - id: OrderService  
          uri: lb://OrderService  
          predicates:  
            - Path=/orderService/actuator/**  
            - Method=GET,POST  
          filters:  
            - RemoveRequestHeader=Cookie  
            - RewritePath=/orderService/(?<segment>.*), /$\{segment} # /orderService 패턴이 들어오면 제거해서 호출
  • Path=/orderService/actuator/: /orderService/actuator/ 경로로 들어오는 요청만 매핑한다.
  • Method=GET,POST: GET, POST 메서드만 허용한다.
  • RewritePath: /orderService/ 패턴을 제거하여 서비스에 전달한다.
  • RemoveRequestHeader: 쿠키 정보를 제거하고 요청을 보낸다.
  • uri: lb://OrderService: 서비스 디스커버리를 통해 OrderService에 요청을 전달한다.
  • Grafana 설치
  • https://grafana.com/grafana/download?platform=windows 에서 zip 파일 다운로드 후 압축 해제
  • ./bin/grafana-server.exe 파일 실행
  • http://localhost:3000 URL 호출 후 ID:admin, PW:admin 입력하여 로그인한다.

Prometheus 연동

  • Administration > Plugins and data > Plugins 클릭 > Prometheus 검색 후 Select > Add new data source 클릭
  • Name에 Prometheus 입력 Connection에 http:/localhost:9090 입력
  • Save&Test 클릭하여 연결 상태 확인

  • 복사한 ID를 붙여넣기 한 후 Load 버튼 클릭

Prometheus와 Grafana의 연동 시 기대 효과

1. 모니터링 자동화

  • Prometheus는 사용자 정의 경로에서 메트릭을 자동으로 수집하며, 별도의 요청 없이 메트릭을 저장한다.
  • 서비스 디스커버리 기능을 통해 Kubernetes와 같은 환경에서도 자동으로 메트릭을 수집할 수 있다.
2. 효율적인 시각화
  • Grafana는 Prometheus의 시계열 데이터를 직관적인 대시보드로 시각화해 운영팀이 시스템 상태를 실시간으로 모니터링할 수 있게 한다.
  • 서비스의 응답 시간, 지연 시간, 오류 비율 등을 실시간으로 확인할 수 있어 빠른 대응이 가능하다.

3. 경고 알림 시스템

  • Prometheus의 Alertmanager를 통해 조건에 따른 알림을 생성하고, Grafana를 통해 알림을 이메일이나 Slack으로 보낼 수 있다.
  • 예를 들어, 특정 서비스의 CPU 사용량이 80%를 초과하면 알림을 전송할 수 있다.
반응형