ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Grafana와 Prometheus로 모니터링 구축하기
    백엔드 : 서버공부/Spring 2025. 8. 4. 15:38
    728x90

    들어가며

    이번 프로젝트를 진행하면서 서버의 메모리 사용량 등 시스템 상태를 모니터링할 필요가 생겼다. 이를 위해 GrafanaPrometheus를 활용한 모니터링 환경을 구축하고자 한다.

    사실 이전에도 스프링 레거시 환경에서 해당 도구들을 적용하려 했지만, 의존성 문제로 인해 도입이 쉽지 않았다. 그러나 이번에 Spring Boot로 전환하면서 다시금 시도해볼 수 있는 기회가 생겼다.

    1. 모니터링이 필요한 이유

    다음과 같은 상황에 대비하기 위해 모니터링 시스템은 필수적이다.

    • CPU, 메모리 사용량 등 시스템 자원을 실시간으로 확인
    • 장애 발생 여부 및 예외 로그를 빠르게 파악

    단순히 1시간 간격으로 상태를 점검하거나, 모든 기능을 수동으로 테스트하는 방식은 비효율적일 뿐 아니라 실시간성이 떨어진다. 반면, 모니터링 시스템을 구축하면 주요 지표에 대한 알림 설정, 이상 징후 감지, 버그 조기 발견이 가능해진다.

    이번 프로젝트에서 모니터링 시스템을 도입한 가장 큰 목적은 성능 테스트를 간편하게 수행하고, 시스템 내부를 깊이 있게 탐색하는 데 있다. 이는 "사용하는 기술과 구조에 대해 끊임없이 질문하라"는 토스팀의 핵심 가치, Question Every Assumption을 실천해보기 위한 시도이기도 하다.

    “지금은 잘 돌아가니까 문제 없다”는 접근은, 결국 문제가 터질 때까지 아무것도 하지 않는 것과 같다.

    마치 "누구나 그럴싸한 계획은 있다. 쳐맞기 전까지는"이라는 마이크 타이슨의 말처럼, 문제는 항상 예상하지 못한 순간에 터진다.

     

    이 프로젝트에서 모니터링 시스템을 도입한 이유도, 단순히 시스템이 "잘 돌아가는 것처럼 보이는 상태"에 안주하지 않고,

    그 내부에서 실제로 어떤 일이 일어나고 있는지를 관찰하고 이해하려는 데 있다.

    GrafanaPrometheus는 이를 시각적으로 직관화해주기 때문에, 기술을 더 깊이 검증하고 탐구하는 데 큰 도움이 될 것이다.

     

    2. 시스템 아키텍처 구성

    모니터링 시스템은 다음과 같은 구조로 구성한다.

    Spring Boot Actuator -> Prometheus -> Grafana
    • Spring Boot Actuator: /actuator/prometheus 엔드포인트를 통해 메트릭 노출
    • Prometheus: 메트릭 데이터를 주기적으로 pull 하여 수집
    • Grafana: 수집된 메트릭을 시각화하여 대시보드로 제공

    3. Spring Boot 설정

    먼저 gradle 파일에 해당 의존성들을 추가한다.

    build.gradle

    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    runtimeOnly 'io.micrometer:micrometer-registry-prometheus'
    

    application.yml

    management:
      endpoints:
        web:
          exposure:
            include: "*"
    
    

    /actuator/prometheus 경로를 통해 메트릭 데이터를 확인할 수 있다.

    브라우저에서 아래 주소로 접근하면 메트릭 정보들을 확인 가능하다.

    http://localhost:9000/actuator/prometheus

    4. Prometheus 설정

    다음으로 루트 디렉토리에 prometheus.yml와 docker-compose.yml파일을 작성한다.

    promethues에 대한 설정을 작성해 줄 수 있다. 메트릭을 수집할 주기, 메트릭을 수집할 경로, 어떤 호스트에서 수집할지에 대한 내용들을 작성할 수 있다.

    prometheus.yml

    global:
      scrape_interval: 15s
    
    scrape_configs:
      - job_name: prometheus
        metrics_path: '/actuator/prometheus'
        static_configs:
          - targets: ['host.docker.internal:8080']
    
    
    • 15초 주기로 메트릭을 수집
    • Docker 컨테이너 내부에서 호스트의 Spring Boot 앱에 접근하기 위해 host.docker.internal 사용

    5. docker-compose 설정

    docker-compose.yml

    version: '3.8'
    services:
      prometheus:
        image: prom/prometheus:latest
        container_name: prometheus
        volumes:
          - ./prometheus.yml:/etc/prometheus/prometheus.yml
        command:
          - '--config.file=/etc/prometheus/prometheus.yml'
        ports:
          - "9090:9090"
        networks:
          - monitoring-network
    
      grafana:
        image: grafana/grafana:latest
        container_name: grafana
        ports:
          - "3000:3000"
        networks:
          - monitoring-network
    
    networks:
      monitoring-network:
        driver: bridge
    

    마지막으로 터미널에서 docker-compose up -d 명령어로 Prometheus와 Grafana를 실행한다.


    6. Prometheus 실행 확인

    • http://localhost:9090/graph: 쿼리 기반 메트릭 조회
    • http://localhost:9090/targets: 수집 대상 서버 상태 확인

    7. Grafana 설정

    • http://localhost:3000 으로 접속
    • 기본 ID/PW: admin / admin

    Data Sources 등록

    1. 좌측 메뉴 → Data Sources → Add data source
    2. Prometheus 선택
    3. URL: http://host.docker.internal:9090 입력
    4. Save & Test

    대시보드 Import

    • Grafana 대시보드 → + → Import
    • Dashboard ID에 4701 입력 (JVM Micrometer용 대시보드)
    • Prometheus 데이터 소스 선택 후 Import

    위 과정을 따라오면 아래와 같이 대시보드를 확인할 수 있다.

    8. 정리

    • Prometheus는 메트릭 수집
    • Grafana는 수집된 메트릭 시각화
    • Spring Boot Actuator는 Prometheus에 메트릭 제공
    • Docker Compose로 전체 시스템을 손쉽게 관리

    운영 중인 시스템의 상태를 정기적으로 점검하고, 문제가 생겼을 때 빠르게 인지하고 대응하기 위해 모니터링 시스템은 반드시 필요하다.

    참고 : https://junuuu.tistory.com/968

Designed by Tistory.