Prometheus & Grafana 모니터링 설정하기

김재혁·2025년 2월 12일

공통 프로젝트

목록 보기
10/12

Spring Boot 모니터링 설정 (application.yml & build.gradle)

1. 개요

Spring Boot 애플리케이션에서 Health Check 및 Prometheus 기반 메트릭 수집을 위한 설정을 추가하였습니다. 이를 통해 애플리케이션 상태를 확인하고 Prometheus가 메트릭을 수집하여 Grafana에서 시각화할 수 있도록 구성할 수 있습니다.


2. application.yml 설정 변경

management:
  endpoints:
    web:
      exposure:
        include: "health,info,prometheus"

🔹 설정 설명

  • management.endpoints.web.exposure.include
    • health: 애플리케이션 상태 확인 (/actuator/health)
    • info: 애플리케이션 정보 확인 (/actuator/info)
    • prometheus: Prometheus에서 사용할 메트릭 노출 (/actuator/prometheus)
  • Prometheus가 Spring Boot 메트릭을 수집할 수 있도록 prometheus 엔드포인트 활성화

3. build.gradle 의존성 추가

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

🔹 설정 설명

  • spring-boot-starter-actuator → Spring Boot Actuator를 활성화하여 애플리케이션 상태 모니터링 가능
  • micrometer-registry-prometheus → Micrometer를 사용하여 Prometheus와 연동하여 메트릭 수집

Prometheus 설정 파일 (prometheus.yml) 작성

0. 전체 코드

(1)

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'backend'
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['backend:8080']
  
  - job_name: 'node'
    static_configs:
      - targets: ['node-exporter:9100']
  
  - job_name: 'cadvisor'
    static_configs:
      - targets: ['cadvisor:8080']

1. 개요

prometheus.yml 설정 파일은 Prometheus가 메트릭 데이터를 수집하는 방법을 정의합니다. 이 설정을 통해 Prometheus 자체, Backend, Node Exporter, cAdvisor의 메트릭을 수집하여 서비스 및 시스템 상태를 모니터링할 수 있습니다.


2. 설정

(1) 전역 설정 (Global Configuration)

global:
  scrape_interval: 15s
  evaluation_interval: 15s
  • scrape_interval: 15s → 모든 타겟의 메트릭을 15초마다 수집
  • evaluation_interval: 15s → 규칙을 평가하고 경보(Alert)를 감지하는 주기 설정

(2) Prometheus 자체 모니터링 설정

- job_name: 'prometheus'
  static_configs:
    - targets: ['localhost:9090']
  • Prometheus 자체 모니터링을 위해 추가
  • targets: ['localhost:9090'] → Prometheus가 자신의 메트릭을 localhost:9090에서 수집

(3) Backend 메트릭 수집 설정

- job_name: 'backend'
  metrics_path: '/actuator/prometheus'
  static_configs:
    - targets: ['backend:8080']
  • Spring Boot Actuator 엔드포인트(/actuator/prometheus)에서 메트릭을 가져옴
  • Backend의 메트릭 수집backend:8080에서 데이터를 가져와 Prometheus에 저장

(4) Node Exporter 메트릭 수집 설정

- job_name: 'node'
  static_configs:
    - targets: ['node-exporter:9100']
  • Node Exporter를 통해 시스템 리소스(CPU, 메모리, 디스크 사용량 등) 모니터링
  • targets: ['node-exporter:9100']node-exporter의 메트릭을 수집

(5) cAdvisor 메트릭 수집 설정

- job_name: 'cadvisor'
  static_configs:
    - targets: ['cadvisor:8080']
  • cAdvisor(Container Advisor)를 통해 Docker 컨테이너 리소스 사용량을 모니터링
  • targets: ['cadvisor:8080']cAdvisor의 메트릭을 수집하여 컨테이너의 CPU, 메모리, 네트워크, 디스크 사용량 등을 추적

Jenkinsfile 변경 사항 (Prometheus 설정 파일 배포 추가)

1. 개요

기존 Jenkinsfile에서 EC2에 배포 시 Prometheus 설정 파일(prometheus.yml)을 추가로 전송하도록 변경하였습니다. 이를 통해 배포 프로세스에서 Prometheus 설정을 자동으로 적용할 수 있습니다.


2. 변경된 설정

(1) Deploy to EC2 단계에서 Prometheus 설정 파일 전송 추가

stage('Deploy to EC2') {
    steps {
        sshagent(credentials: ['ec2-ssh-key']) {
            sh "scp -o StrictHostKeyChecking=no .env ${DEPLOY_HOST}:${DEPLOY_PATH}/.env"
            sh "scp -o StrictHostKeyChecking=no docker-compose.yml ${DEPLOY_HOST}:${DEPLOY_PATH}/docker-compose.yml"
            sh "scp -o StrictHostKeyChecking=no prometheus.yml ${DEPLOY_HOST}:${DEPLOY_PATH}/prometheus.yml"

🔹 변경 사항

  • Prometheus 설정 파일(prometheus.yml)을 EC2로 전송
    • 기존 .envdocker-compose.yml 파일과 함께 prometheus.yml을 추가하여 배포 환경에서 Prometheus가 정상적으로 작동할 수 있도록 설정
  • 전송 방식: scp 명령어 사용
    • -o StrictHostKeyChecking=no 옵션을 추가하여 SSH 접속 시 호스트 키 확인을 생략하고 자동화 수행

(2) EC2 내에서 배포 후 Prometheus 설정 적용

            sh """
            ssh -o StrictHostKeyChecking=no ${DEPLOY_HOST} '
                cd ${DEPLOY_PATH} &&
                docker compose down --remove-orphans &&
                docker compose pull &&
                docker compose up -d &&
                docker image prune -f &&
                rm -f ${DEPLOY_PATH}/.env
            '
            """
        }
    }
}

🔹 변경 사항

  • 배포 경로에 Prometheus 설정이 포함됨
    • docker compose up -d 실행 시, Prometheus 설정(prometheus.yml)이 포함된 docker-compose.yml을 기반으로 컨테이너가 실행됨
    • Prometheus가 자동으로 Backend 메트릭을 수집할 수 있도록 구성됨
  • 보안 강화
    • 배포 후 .env 파일을 제거하여 민감한 환경 변수 정보를 보호

Docker Compose 설정 변경 사항 (Prometheus & Grafana 모니터링 추가)

0. 전체 코드

(1)

  prometheus:
    image: prom/prometheus:v2.53.3
    container_name: prometheus
    restart: always
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus-data:/prometheus
    ports:
      - "9090:9090"
    depends_on:
      backend:
        condition: service_healthy
    networks:
      - moonggeul-network

  grafana:
    image: grafana/grafana:11.5.1
    container_name: grafana
    restart: always
    volumes:
      - grafana-data:/var/lib/grafana
    ports:
      - "3000:3000"
    depends_on:
      - prometheus
    networks:
      - moonggeul-network
    
  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    restart: always
    ports:
      - "9100:9100"
    networks:
      - moonggeul-network

  cadvisor:
    image: gcr.io/cadvisor/cadvisor:v0.47.2
    container_name: cadvisor
    restart: always
    privileged: true
    ports:
      - "8081:8080"
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
      - /dev/kmsg:/dev/kmsg:ro
    networks:
      - moonggeul-network


volumes:
  mysql-data:
    name: mysql-data
  prometheus-data:
    name: prometheus-data
  grafana-data:
    name: grafana-data

networks:
  moonggeul-network:
    name: moonggeul-network
    driver: bridge

1. 개요

기존 docker-compose.ymlPrometheus, Grafana, Node Exporter 및 cAdvisor를 추가하여 서비스 및 시스템 모니터링을 강화하였습니다.

  • Prometheus: 백엔드 및 시스템 메트릭을 수집
  • Grafana: 시각화를 통해 모니터링
  • Node Exporter: 서버 시스템 리소스(CPU, 메모리, 디스크 사용량 등) 모니터링
  • cAdvisor: Docker 컨테이너 성능 모니터링

2. 변경된 설정

(1) Prometheus 서비스 추가

prometheus:
  image: prom/prometheus:v2.53.3
  container_name: prometheus
  restart: always
  volumes:
    - ./prometheus.yml:/etc/prometheus/prometheus.yml
    - prometheus-data:/prometheus
  ports:
    - "9090:9090"
  depends_on:
    backend:
      condition: service_healthy
  networks:
    - moonggeul-network
  • Prometheus 컨테이너 추가
    • prom/prometheus:v2.53.3 이미지 사용
    • restart: always 옵션을 추가하여 컨테이너가 종료되더라도 자동 재시작되도록 설정
  • 설정 파일 마운트 (prometheus.yml)
    • Prometheus 설정 파일을 컨테이너 내부에 마운트
    • 데이터를 prometheus-data 볼륨에 저장하여 데이터 영속화
  • 포트 설정
    • Prometheus 웹 UI 접근을 위해 9090:9090 포트 개방
  • 백엔드 서비스 의존성 추가
    • backend가 정상 실행된 후 시작되도록 depends_on 설정
  • 네트워크 연결
    • moonggeul-network 네트워크에 포함하여 다른 서비스와 통신 가능

(2) Grafana 서비스 추가

grafana:
  image: grafana/grafana:11.5.1
  container_name: grafana
  restart: always
  volumes:
    - grafana-data:/var/lib/grafana
  ports:
    - "3000:3000"
  depends_on:
    - prometheus
  networks:
    - moonggeul-network
  • Grafana 컨테이너 추가
    • grafana/grafana:11.5.1 최신 버전의 Grafana 이미지 사용
    • restart: always 옵션으로 컨테이너 자동 재시작
  • 볼륨 설정 (grafana-data)
    • Grafana의 설정 및 대시보드 데이터를 유지하기 위해 grafana-data 볼륨 사용
  • 포트 설정
    • Grafana 웹 UI를 사용하기 위해 3000:3000 포트 개방
  • Prometheus 의존성 추가
    • depends_on: - prometheus 설정 추가
  • 네트워크 연결
    • moonggeul-network에 포함하여 Prometheus 및 백엔드 서비스와 연동 가능

(3) Node Exporter 서비스 추가

node-exporter:
  image: prom/node-exporter:latest
  container_name: node-exporter
  restart: always
  ports:
    - "9100:9100"
  networks:
    - moonggeul-network
  • Node Exporter 컨테이너 추가
    • 서버의 CPU, 메모리, 디스크 사용량을 모니터링
    • prom/node-exporter:latest 이미지 사용
  • 포트 설정
    • Node Exporter 메트릭 수집을 위해 9100:9100 포트 개방
  • 네트워크 연결
    • moonggeul-network에 포함하여 Prometheus와 연동 가능

(4) cAdvisor 서비스 추가

cadvisor:
  image: gcr.io/cadvisor/cadvisor:v0.47.2
  container_name: cadvisor
  restart: always
  privileged: true
  ports:
    - "8081:8080"
  volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:ro
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro
    - /dev/kmsg:/dev/kmsg:ro
  networks:
    - moonggeul-network
  • cAdvisor 컨테이너 추가
    • Docker 컨테이너의 CPU, 메모리, 네트워크, 디스크 사용량을 모니터링
    • gcr.io/cadvisor/cadvisor:v0.47.2 이미지 사용
  • 포트 설정
    • cAdvisor 웹 UI에 접근할 수 있도록 8081:8080 포트 개방
  • 볼륨 설정
    • /rootfs, /sys, /var/lib/docker 등의 정보를 읽을 수 있도록 마운트
  • 네트워크 연결
    • moonggeul-network에 포함하여 Prometheus와 연동 가능

(5) 추가된 볼륨 및 네트워크 설정

volumes:
  mysql-data:
    name: mysql-data
  prometheus-data:
    name: prometheus-data
  grafana-data:
    name: grafana-data

networks:
  moonggeul-network:
    name: moonggeul-network
    driver: bridge
  • Prometheus 및 Grafana 데이터 영속화
    • prometheus-data 볼륨을 생성하여 Prometheus가 수집한 데이터를 보존
    • grafana-data 볼륨을 생성하여 Grafana의 설정 및 대시보드 데이터를 유지
  • 네트워크 설정 추가
    • moonggeul-networkbridge 네트워크로 설정하여 서비스 간 통신 가능
profile
志鐵心鏡

0개의 댓글