카테고리 없음

Traefik + Prometheus + Grafana 모니터링 설정 (Docker Swarm)

-JUNHEOK- 2025. 3. 12. 12:02

Docker Swarm 환경에서 Traefik을 활용한 서비스 라우팅과 함께 Prometheus로 메트릭을 수집하고, Grafana를 통해 시각화하는 방법을 정리합니다.

 

 

설정 결과

  • Traefik에서 Prometheus 메트릭 수집
  • Prometheus가 메트릭을 저장 및 분석
  • Grafana에서 시각화

이 설정을 통해 실시간 트랙픽 모니터링, 서비스 상황 확인, 장애 감지 등을 할 수 있습니다.


1. Prometheus와 Grafana란?

Prometheus란?

Prometheus는 오픈소스 모니터링 시스템으로, 메트릭 수집 및 저장을 담당합니다.

  • Pull 방식으로 메트릭 수집 (Server 가 Client의 /metrics 에서 데이터 가져오지만)
  • 시계열 데이터 저장 및 분석
  • Alerting 시스템 부원 (기본적인 경고 막상)
  • Grafana와 통합 가능

Grafana란?

Grafana는 Prometheus 등의 메트릭을 시각화하는 대시보드 툴입니다.

  • Prometheus 데이터를 그래프, 차트로 시각화
  • 대시보드 컴터먼트화 가능
  • 실시간 모니터링 가능
  • Slack, Discord 등과 연동해 경고 (Alert) 가능

전체 아키텍처

아래와 같은 구조로 구성됩니다.

 
사용자 요청 → Traefik → 서비스 컨테이너
                     ↘ 
                      Prometheus (메트릭 수집)
                                ↘
                                 Grafana (시각화)

Traefik: 트래픽을 라우팅하고 Prometheus 메트릭을 노출 (/metrics)
Prometheus: Traefik에서 메트릭을 수집하고 저장
Grafana: Prometheus 데이터를 시각화하여 운영 현황을 쉽게 확인

1. Traefik 설정 (Prometheus 메트릭 활성화)

Traefik이 Prometheus 메트릭을 보도할 수 있도록 설정합니다.

 

services:
  traefik:
    image: traefik:2.9
    command:
      - "--metrics.prometheus=true"
      - "--metrics.prometheus.addEntryPointsLabels=true"
      - "--metrics.prometheus.addServicesLabels=true"
      - "--metrics.prometheus.buckets=0.1,0.3,1.2,5.0"
      - "--entryPoints.metrics.address=:8080"
    ports:
      - "8080:8080"  # ✅ Prometheus가 메트릭을 가져가도록 필요

 

  • --metrics.prometheus=true: Prometheus 메트릭 활성화
  • --entryPoints.metrics.address=:8080: Prometheus가 Traefik의 /metrics 엔드포인트에서 데이터를 가져가도록 설정

 

 

Traefik 배포 후 /metrics 엔드포인트 확인 

curl -s http://localhost:8080/metrics | head -n 20

 

Prometheus 설정 (Traefik 메트릭 수집)

Prometheus가 Traefik의 /metrics 엔드포인트에서 데이터를 가져오도록 설정합니다.

global:
  scrape_interval: 10s  # 10초마다 데이터 수집

scrape_configs:
  - job_name: 'traefik'
    metrics_path: '/metrics'
    static_configs:
      - targets: ['traefik:8080']
version: '3.9'

services:
  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    command:
      - "--config.file=/etc/prometheus/prometheus.yml"
    ports:
      - "9090:9090"
    networks:
      - traefik-network

Prometheus.yml

 

Grafana 설정 (Prometheus 데이터 시각화)

Grafana를 설정하여 Prometheus 데이터를 시각화할 수 있도록 합니다.

version: '3.9'

services:
  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=yourpassword
    networks:
      - traefik-network

 

Grafana 접속: http://<클러스터_IP>:3000

  • ID: admin
  • PW: yourpassword

1) 데이터 소스 추가

  1. http://localhost:3000 접속
  2. 데이터 소스 추가 → Prometheus 선택
  3. URL: http://prometheus:9090 입력
  4. Save & Test → 정상 연결 확인

2) Traefik 2.0 대시보드 추가

  1. Grafana에서 Import 클릭
  2. Dashboard ID: 4475 입력
  3. Prometheus 데이터 소스를 선택 후 Load

 

실시간 모니터링 가능한 Prometheus 메트릭

traefik_entrypoint_requests_total 엔트리포인트별 요청 수
traefik_service_requests_total 서비스별 요청 수
traefik_backend_request_duration_seconds 백엔드 요청 응답 시간
traefik_backend_requests_total 백엔드 요청 횟수
traefik_tls_certs_not_after TLS 인증서 만료 시간

Grafana에서 트래픽 요청, 응답 속도, TLS 상태 등을 한눈에 모니터링 가능! 🎯

 


 

결론

이제 Traefik + Prometheus + Grafana를 통해 실시간으로 트래픽을 모니터링할 수 있습니다.

1) Prometheus에서 Traefik 메트릭 수집
2) Grafana에서 실시간 요청량, 응답 속도 시각화
3) 장애 감지 및 알림 설정 가능

실시간 트래픽 분석 및 운영 모니터링을 강화할 수 있습니다