🔥스파르타 TIL (MSA)

Prometheus를 사용해보자

승승장규 2025. 4. 17. 12:14

Prometheus란 시간에 따라 수집된 시계열 데이터를 기반으로 하는 모니터링 및 경고 시스템으로, 서버, 컨테이너, 애플리케이션, 마이크로서비스 등에서 메트릭을 수집하고, 이를 저장 및 분석하는 도구이다.

 

구성 요서

  • Prometheus 서버 : 메트릭 데이터를 수집하고 저장하는 핵심 컴포넌트로, 각 애플리케이션 또는 엔드 포인트로부터 데이터를 주기적으로 스크랩하여 시계열 데이터 베이스에 저장한다.
  • 시계열 데이터베이스 : 시간에 따라 변화하는 데이터를 효율적으로 저장하고 조회할 수 있도록 최적화된 데이터베이스
  • Exporters : 특정 애플리케이션이나 시스템의 메트릭 데이터를 Prometheus가 이해할 수 있는 형식으로 변환해주는 도구 ex) micrometer-registry-prometheus 의존성 추가
  • Pushgateway : 짧은 수명의 작업에서 메트릭을 수집하여 Prometheus 서버에 푸시할 수 있으며, 일반적으로 지속적이지 않은 작업에 사용된다. ex) 크론 작업
  • AlertManager : Prometheus 서버에서 발생하는 경고를 처리하고, 이메일, slack 등 다양한 방법으로 알림을 보낼 수 있다.
  • Grafana : Prometheus 데이터를 시각화하기 위해 자주 사용되는 대시보드 도구
  • PromQL : 강력한 쿼리 언어

우선 Prometheus를 사용하기 위한 의존성과 설정을 추가해주자.

implementation 'io.micrometer:micrometer-registry-prometheus'
management:
  endpoint:
    web:
      exposure:
        include: '*'   # 모든 Actuator endpoint를 웹에 노출시킴 (ex: /actuator/health, /actuator/prometheus)
    health:
      show-details: always # /actuator/health 호출 시, 세부 상태 정보를 항상 보여줌
    prometheus:
      access: unrestricted # /actuator/prometheus에 인증 없이 접근 허용 (보안 환경에서는 주의 필요)
global:
  scrape_interval: 15s # Prometheus가 모든 타겟의 메트릭을 15초마다 수집하도록 설정

scrape_configs:
  - job_name: 'gateway-service' # 'gateway-service'라는 이름의 작업 단위 정의
    metrics_path: '/actuator/prometheus' # 메트릭을 수집할 엔드포인트 경로
    static_configs:
      - targets: [ 'host.docker.internal:{포트 번호}' ] # 수집 대상의 주소와 포트 설정 (현재는 도커에서 호스트로 접근하기 위해 설정함)
services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml # 작성한 prometheus.yml 경로로 지정
    restart: always

 

이후 docker-compose up -d 로 prometheus를 받아오면 모든 준비가 끝나게 된다. 이제 해당 애플리케이션을 실행시킨 뒤 http://localhost:9090에 접속해보면

이런 대시보드가 보이게 된다. 여기서 Status -> Targets를 클릭하면

현재 등록한 애플리케이션의 상태를 볼 수 있는데 현재는 애플리케이션을 실행시키지 않아서 DOWN 상태지만, 애플리케이션을 실행시킨뒤 새로고침 해보면

잘 동작하는 것을 볼 수 있다.

 

이후에는 Grafana를 통해 모니터링을 진행해보겠습니다.