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) 데이터 소스 추가
- http://localhost:3000 접속
- 데이터 소스 추가 → Prometheus 선택
- URL: http://prometheus:9090 입력
- Save & Test → 정상 연결 확인
2) Traefik 2.0 대시보드 추가
- Grafana에서 Import 클릭
- Dashboard ID: 4475 입력
- 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) 장애 감지 및 알림 설정 가능
실시간 트래픽 분석 및 운영 모니터링을 강화할 수 있습니다