전체 흐름 한줄 요약
Spring Boot Pod
→ OTel Java Agent (자동 계측)
→ OTel Collector (Shared, 중앙 수집/필터)
→ Traces: Tempo / Metrics: Thanos / Logs: Loki(S3)
→ Grafana (한 곳에서 전부 시각화)
애플리케이션에서 발생하는 3가지 데이터를 수집하는 표준 프레임워크를 먼저 본다.
| 데이터 | 설명 | 예시 |
| Traces | API 요청의 전체 흐름 추적 | /order 호출 → member 조회 → DB 쿼리 경로 |
| Metrics | 숫자로 표현되는 지표 | JVM 힙 사용량, HTTP 요청 수, 응답시간 |
| Logs | 로그에 trace ID 자동 연결 | 에러 로그가 어느 요청에서 발생했는지 추적 |
지금 사내 백에서는 spring boot 를 사용하고 있다.
[Spring Boot App]
│
│ Java Agent (자동 계측) : OTel Operator가 init container로 주입
▼
[OTel SDK] ──── gRPC ────▶ [OTel Collector (중앙수집기)]
(otel.dev.shared.internal.riman.com:4317)
│
┌──────────┬──────────┐
▼ ▼ ▼
[Tempo] [Thanos] [Loki]
(Traces) (Metrics) (Logs→S3)
│ │ │
└──────────┴──────────┘
▼
[Grafana]
Agent가 JVM에 붙어서 spring의 HTTP요청, DB 쿼리 등을 자동으로 가로채서 데이터를 수집한다.
- 각각의 pod에 Otel이 모두 설치된다.
- Otel Operator는 EKS 당 1개 (Helm으로 설치)
ㄴ pod 생성 시 annotation 감지해서 Java Agent 자동 주입하는 역할
- 각각의 pod에서 직접 Otel Collector에 metrics / log / trace 보냄.
- OTel Collector → Loki (Shared EKS) → S3 버킷 (shared-loki-dev-logs) 에 저장
Grafana는 S3 직접 연결이 아니라 Loki 데이터소스로 연결 → Loki가 S3에서 읽어서 반환
- Grafana로 표출
--
1. Spring boot App에서 metrics 발생
ㄴ JVM이 자동으로 매트릭 발생 시킴
2. Otel Java Agen가 매트릭을 수집해서 전송
ㄴ Otel Operator가 pod 생성 시 자동으로 agent 주입
Java Agent -> gRPC 연결 -> OTLP 형식으로 데이터 직렬화 -> OTel Colletor로 전송
OTLP : OpenTelemetry Protocol
3. OTel Collector가 받아서 처리
ㄴ 중간 수집기
4. Thanos가 메트릭 장기 저장
ㄴ Prometheus 메트릭을 장기 보관하는 스토리지 (1년)
ㄴ 기본으로 로컬 디스크에 저장하는데 15일간 저장 -> 장기 데이터 볼 수 없음
5. Grafana에서 쿼리해서 시각화
ㄴ 대시보드에서 Thanos를 데이터 소스로 연결해서 PromQL로 조회
| 데이터 | OTel Collector | 저장소 | Grafana 데이터 소스 |
| 메트릭 | prometheusremotewrite | Thanos dev | Thanos(Prometheus) |
| 로그 | otlphttp | Loki dev | Loki |
| 트레이스 | otlp | Tempo dev | Tempo |
'DevOps' 카테고리의 다른 글
| 노드에 파드 할당하기 (0) | 2026.05.13 |
|---|---|
| EKS에서 파드에 AWS 권한 부여하는 3가지 방법 (0) | 2026.05.10 |
| MSK Connect + Debezium 이용하여 CDC 파이프라인 구축 (0) | 2026.05.07 |
| Karpenter 이해하기 (0) | 2026.05.07 |
| OTel 과 CloudWatch 구분하기 (MSK 모니터링) (0) | 2026.05.06 |