Kubernetes 모니터링 스택
스택 구성
Alloy (DaemonSet) ──로그──▶ Loki ──▶ Object Storage (S3)
│ │
│ ▼
Pod 로그 파싱 Grafana (대시보드)
커스텀 메트릭 생성 ▲
│ │
▼ │
Prometheus ──메트릭──▶ Thanos ─────┘
(장기 보관)
컴포넌트
| 컴포넌트 | 역할 | 스토리지 |
|---|---|---|
| Prometheus | 메트릭 수집 (Pod 스크래핑) | Block Storage 50Gi, 30일 |
| Thanos | 장기 메트릭 보관 (Query, StoreGateway, Compactor) | Object Storage |
| Loki | 로그 집계 (SingleBinary, TSDB v13) | Object Storage (S3) |
| Alloy | 로그 수집 + JSON 파싱 + 커스텀 Prometheus 메트릭 생성 | - |
| Grafana | 대시보드 (Loki + Prometheus + Thanos + MySQL 데이터소스) | Block Storage 10Gi |
| Memcached | Loki 캐시 (chunks 2Gi, results 512Mi) | - |
모니터링 컴포넌트는 role: monitoring taint가 설정된 전용 노드에서 실행.
Thanos 장기 보관
Prometheus Sidecar가 Object Storage로 업로드. 보관 정책:
- Raw 데이터: 90일
- 5분 다운샘플링: 365일
- 1시간 다운샘플링: 무제한
Alloy 로그 파이프라인
DaemonSet으로 모든 노드에서 실행. 백엔드 서비스 로그를 수집하는 파이프라인:
- Pod Discovery — 대상 네임스페이스에서 서비스 필터링
- JSON 파싱 — traceId, level, logger, message, httpMethod, uri, statusCode, duration 추출
- 라벨 부여 — cluster, env, level 등 Loki 라벨 생성
- 커스텀 메트릭 생성 — 로그에서 Prometheus 메트릭 자동 추출:
http_requests_total(counter) — HTTP 요청 수http_request_duration_ms(histogram, 10~10000ms 버킷) — 응답 시간http_errors_total(counter) — 에러 수
- Loki Write — 가공된 로그를 Loki Gateway로 전송
Grafana 대시보드
| 대시보드 | 데이터소스 | 내용 |
|---|---|---|
| Backend Logs | Loki | 레벨별 로그 볼륨, 로그 스트림, 테넌트/서비스 필터 |
| Pod Monitoring | Prometheus | Pod 상태, CPU/메모리/네트워크, 재시작 현황 |
| Event Monitoring | Prometheus | 이벤트 성공/실패율, 타입별 분석 |
| Raw Message Status | MySQL | 메시지 처리 상태, Loki 드릴다운 연동 |
핵심 설계 포인트
- 로그에서 메트릭 추출: Alloy가 JSON 로그를 파싱하여 Prometheus 메트릭을 자동 생성하므로, 애플리케이션 코드 수정 없이 HTTP 메트릭 수집 가능
- 장기 보관 분리: Thanos를 통해 Prometheus의 단기 보관 한계를 극복하고 Object Storage로 장기 보관
- 전용 노드: 모니터링 워크로드가 애플리케이션에 영향을 주지 않도록 taint/toleration으로 격리
- 멀티 데이터소스: Grafana에서 Loki(로그) + Prometheus(메트릭) + MySQL(비즈니스)을 통합 대시보드로 제공