Alert
์ด ๊ธ์ Claude Code์ ๋์์ ๋ฐ์ ์์ฑ๋์์ต๋๋ค
TL;DR
- OpenTelemetry(OTel)๋ ๊ด์ธก ๋ฐ์ดํฐ๋ฅผ ์ด๋ค ๋ชจ์์ผ๋ก ๋ง๋ค๊ณ ์ด๋ค ์ฝ์์ผ๋ก ์ ์กํ ์ง๋ฅผ ์ ํ CNCF ํ์ค์ด์ ๋๊ตฌ ๋ชจ์
- ๋ค๋ฃจ๋ ์ ํธ๋ Metrics, Logs, Traces ์ธ ๊ฐ์ง์ด๋ฉฐ, ์์ฑ ์ด๋ฆ๊น์ง ํต์ผํ Semantic Conventions๊ฐ ํต์ฌ
- ์ ์ก์ OTLP(protobuf ์ง๋ ฌํ + gRPC/HTTP) ํ๋กํ ์ฝ๋ก ํ์คํ, ๋จ ๋์คํฌ ์ ์ฅ ํฌ๋งท์ ํ์ค์ด ์ ํ์ง ์๊ณ ๋ฐฑ์๋๊ฐ ๊ฒฐ์
- ๊ตฌ์ฑ์ ์ฝ๋ ๊ณ์ธก์ฉ API/SDK์ ์์งยท๊ฐ๊ณตยท์ ๋ฌ์ ๋งก๋ Collector๋ก ๋๋จ
- ๊ฐ์ฅ ํฐ ๊ฐ์น๋ ๋ฒค๋ ์ค๋ฆฝ์ฑ โ ์ฝ๋๋ฅผ OTel ๋ฐฉ์์ผ๋ก ๊ณ์ธกํด๋๋ฉด ๋ฐฑ์๋(Jaeger, Tempo, Prometheus ๋ฑ)๋ฅผ ์์ ๋กญ๊ฒ ๊ต์ฒด ๊ฐ๋ฅ
1. OpenTelemetry๋
์๋น์ค๋ฅผ ์ด์ํ๋ฉด โ์ง๊ธ ์์คํ ์ด ์ด๋ค ์ํ์ธ๊ฐโ๋ฅผ ์ธ๋ถ์์ ๋ค์ฌ๋ค๋ด์ผ ํ๋ค. ์ด๋ ๊ฒ ์์คํ ๋ด๋ถ ์ํ๋ฅผ ๋ฐ์ดํฐ๋ก ํ์ ํ๋ ๋ฅ๋ ฅ์ **๊ด์ธก์ฑ(Observability)**์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ด์ธก์ ์ฐ๋ ๋ฐ์ดํฐ๋ ํ ๋ ๋ฉํธ๋ฆฌ(Telemetry) ๋ฐ์ดํฐ๋ผ๊ณ ํ๋ค.
๋ฌธ์ ๋ ์ด ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ ๋ฐฉ์์ด ๋๊ตฌ๋ง๋ค ์ ๊ฐ๊ฐ์ด์๋ค๋ ์ ์ด๋ค. ๋ชจ๋ํฐ๋ง ์ ์ฒด๋ฅผ Datadog์์ ๋ค๋ฅธ ๊ณณ์ผ๋ก ๋ฐ๊พธ๋ ค๋ฉด, ์ฝ๋์ ๋ฐ์๋ ๊ณ์ธก ๋ก์ง์ ์ ๋ถ ์ ์ ์ฒด ๋ฐฉ์์ผ๋ก ๋ค์ ์ง์ผ ํ๋ค. ํ๋ฒ ๋๊ตฌ๋ฅผ ๊ณ ๋ฅด๋ฉด ๊ฑฐ๊ธฐ ๋ฌถ์ด๋ ๋ฒค๋ ์ข ์(vendor lock-in) ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
OpenTelemetry(์ค์ฌ์ OTel)๋ ์ด ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํ ํ์ค์ด๋ค. CNCF(Cloud Native Computing Foundation) ํ๋ก์ ํธ๋ก, ๋ ๊ฐ์ ์ ํ ํ๋ก์ ํธ(OpenTracing, OpenCensus)๊ฐ ํฉ์ณ์ ธ ๋ง๋ค์ด์ก๋ค.
ํ ์ค ์ ์
OpenTelemetry๋ ๊ด์ธก ๋ฐ์ดํฐ๋ฅผ ์ด๋ค ๋ชจ์์ผ๋ก ๋ง๋ค๊ณ , ์ด๋ค ์ฝ์์ผ๋ก ์ ์กํ ์ง๋ฅผ ํ์คํํ ๊ฒ์ด๋ค. ์ ์ฅ๊ณผ ์๊ฐํ๋ ๊ทธ ํ์ค์ ๋ฐ์๋ค์ด๋ ๋ค๋ฅธ ๋๊ตฌ๋ค์ ๋ชซ์ด๋ค.
2. ์ธ ๊ฐ์ง ์ ํธ (Signals)
OTel์ด ๋ค๋ฃจ๋ ํ ๋ ๋ฉํธ๋ฆฌ ๋ฐ์ดํฐ๋ ์ธ ์ข ๋ฅ๋ก ๋๋๋ค. ์ด๋ฅผ **์ ํธ(Signal)**๋ผ๊ณ ๋ถ๋ฅธ๋ค.
| ์ ํธ | ๋ด์ฉ | ์์ |
|---|---|---|
| Metrics | ์๊ฐ์ ๋ฐ๋ฅธ ์์น ์งํ | CPU ์ฌ์ฉ๋ฅ , ์ด๋น ์์ฒญ ์, ์๋ต ์ง์ฐ |
| Logs | ์ด๋ฒคํธ ๊ธฐ๋ก ๋ฉ์์ง | ์๋ฌ ๋ก๊ทธ, ์ ๊ทผ ๋ก๊ทธ |
| Traces | ์์ฒญ์ด ์ฌ๋ฌ ์๋น์ค๋ฅผ ๊ฑฐ์น๋ ๊ฒฝ๋ก ์ถ์ | A ์๋น์ค โ B ์๋น์ค โ DB ํธ์ถ ํ๋ฆ |
ํนํ **Traces(๋ถ์ฐ ์ถ์ )**๊ฐ OTel์ ์๊น์ด ๊ฐ์ฅ ๊ฐํ ์์ญ์ด๋ค. ๋ง์ดํฌ๋ก์๋น์ค ํ๊ฒฝ์์ ํ๋์ ์์ฒญ์ด ์ฌ๋ฌ ์๋น์ค๋ฅผ ๋๋๋ค ๋ ์ด๋์ ๋๋ ค์ก๋์ง ์ง์ผ๋ ค๋ฉด, ์๋น์ค๋ฅผ ๊ฐ๋ก์ง๋ฅด๋ ํ์ค์ด ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
3. ๋ฐ์ดํฐ ๋ชจ๋ธ๊ณผ Semantic Conventions
OTel์ด ํ์ค์ผ๋ก ์ ํ ๊ฒ์ ํต์ฌ์ โ๋ฐ์ดํฐ๊ฐ ์ด๋ค ํ๋๋ฅผ ๊ฐ์ ธ์ผ ํ๋๊ฐโ์ด๋ค.
3-1. Span โ ์ถ์ ์ ์ต์ ๋จ์
Trace๋ ์ฌ๋ฌ ๊ฐ์ Span์ผ๋ก ์ด๋ฃจ์ด์ง๋ค. Span ํ๋๋ โํ๋์ ์์ ๊ตฌ๊ฐโ์ ๋ปํ๋ฉฐ, ๋๋ต ์ด๋ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋๋ค.
{
"trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"span_id": "00f067aa0ba902b7",
"parent_span_id": "0000000000000000",
"name": "GET /api/users",
"start_time": "2026-06-22T10:00:00.000Z",
"end_time": "2026-06-22T10:00:00.120Z",
"attributes": {
"http.request.method": "GET",
"http.response.status_code": 200
}
}trace_id๊ฐ ๊ฐ์ Span๋ค์ ๋ชจ์ผ๋ฉด ํ๋์ ์์ฒญ ํ๋ฆ์ด ๋๊ณ , parent_span_id๋ก ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ์ด์ด ํธ์ถ ํธ๋ฆฌ๋ฅผ ๋ณต์ํ๋ค.
3-2. Semantic Conventions โ ์์ฑ ์ด๋ฆ ํ์ค
์ ์์์ http.request.method ๊ฐ์ ์์ฑ(attribute) ์ด๋ฆ๊น์ง ํต์ผํด๋ ๊ท์ฝ์ **Semantic Conventions(์๋งจํฑ ๊ท์ฝ)**๋ผ๊ณ ํ๋ค.
์ ์ด๋ฆ ํ์ค์ด ์ค์ํ๊ฐ
๋๊ตฌ๋
http.method, ๋๊ตฌ๋httpMethod, ๋๊ตฌ๋method๋ผ๊ณ ์ ์ผ๋ฉด, ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ๋๊ตฌ๊ฐ ๊ฐ์ ์๋ฏธ์ธ์ง ์ ์ ์๋ค. โHTTP ๋ฉ์๋๋http.request.method๋ผ๊ณ ์ ์โ์ฒ๋ผ ์ด๋ฆ์ ๋ชป ๋ฐ์๋๋ฉด, ์ด๋ ๋ฐฑ์๋๋ก ๋ณด๋ด๋ ๊ฐ์ ์๋ฏธ๋ก ํด์๋๋ค. OTel์ด ๋จ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋๋ผ ํ์ค์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ์ด์ ๊ฐ ์ฌ๊ธฐ์ ์๋ค.
4. OTLP โ ์ ์ก ํ๋กํ ์ฝ
๋ฐ์ดํฐ ๋ชจ๋ธ๋ก ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ๋คํธ์ํฌ๋ก ์ค์ด ๋๋ฅด๋ ์ฝ์์ด **OTLP(OpenTelemetry Protocol)**์ด๋ค. โ๊ทธ ๊ท๊ฒฉ์ด ๋ญ๋ฐ?โ๋ผ๋ ์ง๋ฌธ์ ๊ฐ์ฅ ์ง์ ๋ตํ๋ ๋ถ๋ถ์ด๋ค.
- ์ง๋ ฌํ: Protocol Buffers(protobuf) โ ๋ฐ์ด๋๋ฆฌ๋ก ์์ถ๋ ํ์
- ์ ์ก ๋ฐฉ์: gRPC ๋๋ HTTP/protobuf, HTTP/JSON
- ๊ธฐ๋ณธ ํฌํธ:
4317(gRPC),4318(HTTP)
์ protobuf์ gRPC์ธ๊ฐ โ ๊ด์ธก ๋ฐ์ดํฐ์ ํน์ง
ํ ๋ ๋ฉํธ๋ฆฌ๋ ๋ณธ๋ ์๋น์ค ํธ๋ํฝ์ ๋ถ๊ฐ๋ก ์นํ๋ ๋ฐ์ดํฐ๋ผ ์์ด ๋ง๊ณ ์ด ์ ์์ด ํ๋ฅธ๋ค. ์ด ์ ์ก์ด ๋ฌด๊ฑฐ์ฐ๋ฉด ์ ์ ๋ณธ ์๋น์ค ์ฑ๋ฅ์ ๊ฐ์๋จน๋๋ค. ๊ทธ๋์ ๊ฐ๋ณ๊ณ ๋น ๋ฅธ ์กฐํฉ์ ๊ณ ๋ฅธ๋ค.
- protobuf: ๋ฐ์ด๋๋ฆฌ๋ก ์์ถํด ๋๋ ๋ฐ์ดํฐ์ ์ ์ก ํฌ๊ธฐ์ ์ง๋ ฌํ ๋น์ฉ์ ์ค์ธ๋ค. OTel ๋ฐ์ดํฐ ๋ชจ๋ธ์ด ์ด๋ฏธ ์คํค๋ง๋ก ๊ณ ์ ๋ผ ์์ด ์คํค๋ง ๊ธฐ๋ฐ ํฌ๋งท๊ณผ ์ ๋ง๋๋ค.
- gRPC: HTTP/2 ๊ธฐ๋ฐ์ด๋ผ ์ปค๋ฅ์ ํ๋๋ฅผ ์ฌ์ฌ์ฉํ๋ฉฐ ๋์์์ด ํ๋ฅด๋ ์คํธ๋ฆผ์ ํจ์จ์ ์ผ๋ก ์ค์ด ๋๋ฅธ๋ค.
4-1. ์ ์ก ํต๋ก์ ์ธ์ฝ๋ฉ
OTLP์ ์ ์ก ๋ฐฉ์์ ๋ ์ถ์ ์กฐํฉ์ผ๋ก ์ ํด์ง๋ค. ์ ์ก ํต๋ก(gRPC๋ ์ผ๋ฐ HTTP๋)์ ์ธ์ฝ๋ฉ(๋ณธ๋ฌธ์ protobuf ๋ฐ์ด๋๋ฆฌ๋ก ๋ด๋๋ JSON ํ ์คํธ๋ก ๋ด๋๋)์ด๋ค. ์ด ์กฐํฉ์์ ์ธ ๊ฐ์ง ๋ฐฉ์์ด ๋์จ๋ค.
| ๋ฐฉ์ | ์ ์ก ํต๋ก | ๋ณธ๋ฌธ ์ธ์ฝ๋ฉ | ํฌํธ | ์ฃผ ์ฉ๋ |
|---|---|---|---|---|
| OTLP/gRPC | HTTP/2 (gRPC) | protobuf | 4317 | ์ด์ ๊ธฐ๋ณธ. ๊ฐ์ฅ ๋น ๋ฅด๊ณ ํจ์จ์ |
| OTLP/HTTP + protobuf | ์ผ๋ฐ HTTP POST | protobuf | 4318 | ํ๋ก์ยท๋ฐฉํ๋ฒฝ ํ๊ฒฝ์์๋ ๋ฌด๋, ์์ ํฌ๊ธฐ ์ ์ง |
| OTLP/HTTP + JSON | ์ผ๋ฐ HTTP POST | JSON | 4318 | ๋๋ฒ๊น ยทํ ์คํธ์ฉ, ์ฌ๋์ด ์ฝ๊ธฐ ์ฌ์ |
HTTP/protobuf์ HTTP/JSON์ ๋ ๋ค ํ๋ฒํ HTTP POST๋ก ๋ณด๋ด๋, ๋ณธ๋ฌธ์ ๋ด๋ ๊ฒ protobuf ๋ฐ์ด๋๋ฆฌ๋ JSON ํ
์คํธ๋๋ง ๋ค๋ฅด๋ค. gRPC๋ ์ฑ๋ฅ์ด ๊ฐ์ฅ ์ข์ง๋ง HTTP/2๋ฅผ ๋ฐ์ณ์ค์ผ ํ๊ณ ์ผ๋ถ ํ๊ฒฝ์์ ๊น๋ค๋ก์์, ์ผ๋ฐ HTTP๋ก ๋ณด๋ด๋ ๋ ๋ฐฉ์์ด ํธํ์ฑ ๋์์ผ๋ก ํจ๊ป ์ ๊ณต๋๋ค.
# OTLP/HTTP ์๋ํฌ์ธํธ๋ก trace ์ ์ก (Collector ๊ธฐ๋ณธ ์์ ํฌํธ)
# ์ค์ ๋ก๋ SDK๊ฐ ์์์ ๋ณด๋ด์ง๋ง, ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด ์ด๋ฐ ํํ๋ค
curl -X POST http://localhost:4318/v1/traces \
-H "Content-Type: application/json" \
-d @trace-payload.json์ ์์๊ฐ ๋ฐ๋ก OTLP/HTTP + JSON ๋ฐฉ์์ด๋ค. ํฌํธ 4318์ HTTP ์์ ๊ตฌ๋ฅผ ๋ปํ๊ณ (gRPC๋ผ๋ฉด 4317), Content-Type: application/json์ด JSON ์ธ์ฝ๋ฉ์ ๊ฐ๋ฆฌํจ๋ค. ๊ฐ์ ํฌํธ๋ก protobuf๋ฅผ ๋ณด๋ธ๋ค๋ฉด Content-Type: application/x-protobuf๋ฅผ ์ด๋ค.
5. ์ ์ฅ ํฌ๋งท์ OTel์ด ์ ํ์ง ์๋๋ค
ํท๊ฐ๋ฆฌ๊ธฐ ์ฌ์ด ์ง์ ์ด๋ค. OTel์ **๋ง๋๋ ํํ(๋ฐ์ดํฐ ๋ชจ๋ธ)์ ๋ณด๋ด๋ ํํ(OTLP)**๊น์ง๋ง ์ฑ ์์ง๋ค. ๋์คํฌ์ ์ด๋ป๊ฒ ์ ์ฅํ ์ง๋ ๋ฐ๋ ์ชฝ, ์ฆ ๋ฐฑ์๋๊ฐ ์๊ธฐ ๋ฐฉ์๋๋ก ํ๋ค.
[์ฑ] โ OTLP๋ก ์ ์ก โ [๋ฐฑ์๋๊ฐ ์๊ธฐ ๋ฐฉ์๋๋ก ์ ์ฅ]
- Prometheus โ ์์ฒด TSDB(์๊ณ์ด DB)
- Tempo โ ๊ฐ์ฒด ์คํ ๋ฆฌ์ง(S3 ๋ฑ)์ trace ์ ์ฅ
- Jaeger โ Cassandra / Elasticsearch
๋ค์ด์ค๋ ์ ๊ตฌ(OTLP)์ ๋ฐ์ดํฐ ์๋ฏธ(๋ชจ๋ธ)๋ ํต์ผ๋์ด ์์ง๋ง, ์ ์ฅ ํฌ๋งท์ ๋ฐฑ์๋๋ง๋ค ์ ๊ฐ๊ฐ์ด๋ค. ์ด ๊ตฌ์กฐ ๋๋ถ์ ์ฝ๋๋ ๊ทธ๋๋ก ๋๊ณ ์ ์ฅ์๋ง ๋ฐ๊ฟ ์ ์๋ค.
| ๊ตฌ๋ถ | OTel์ด ์ ํจ? | ๋ด์ฉ |
|---|---|---|
| ๋ฐ์ดํฐ ๋ชจ๋ธ | O | Metrics/Logs/Traces์ ํ๋ ๊ตฌ์กฐ |
| Semantic Conventions | O | ์์ฑ ์ด๋ฆ ํ์ค (http.request.method ๋ฑ) |
| ์ ์ก ํ๋กํ ์ฝ(OTLP) | O | protobuf ์ง๋ ฌํ + gRPC/HTTP |
| ์ ์ฅ(๋์คํฌ) ํฌ๋งท | X | ๋ฐฑ์๋(Prometheus, Tempo, Jaegerโฆ)๊ฐ ๊ฒฐ์ |
6. ๊ตฌ์ฑ ์์
OTel์ ํฌ๊ฒ ๋ ๋ฉ์ด๋ฆฌ๋ก ๋๋๋ค. **์ฝ๋์ ๋ฐ๋ ๋ถ๋ถ(API/SDK)**๊ณผ **๋ฐ์ดํฐ๋ฅผ ๋ชจ์ ๋๋ฅด๋ ๋ถ๋ถ(Collector)**์ด๋ค.
6-1. API์ SDK โ ๊ณ์ธก(Instrumentation)
์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์์ ํ ๋ ๋ฉํธ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ์์ ์ **๊ณ์ธก(Instrumentation)**์ด๋ผ๊ณ ํ๋ค.
- API: ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ ์ธํฐํ์ด์ค(์ถ์). ์ฝ๋๋ ์ด API์๋ง ์์กดํ๋ค
- SDK: API์ ์ค์ ๊ตฌํ์ฒด. ์ํ๋ง, ๋ฐฐ์น ์ฒ๋ฆฌ, ๋ด๋ณด๋ด๊ธฐ(export) ๋ฑ์ ๋ด๋น
- ์๋ ๊ณ์ธก(Auto-instrumentation): ์ธ๊ธฐ ํ๋ ์์ํฌ(Flask, Express ๋ฑ)๋ ์ฝ๋ ์์ ๊ฑฐ์ ์์ด ์๋์ผ๋ก ๊ณ์ธก ๊ฐ๋ฅ
# Python ์์ โ ์๋ ๊ณ์ธก
from opentelemetry import trace
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("process_order") as span:
span.set_attribute("order.id", 1234)
# ์ค์ ๋น์ฆ๋์ค ๋ก์ง...6-2. Collector โ ์์งยท๊ฐ๊ณตยท์ ๋ฌ
OpenTelemetry Collector๋ ํ ๋ ๋ฉํธ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ๊ฐ๊ณตํ ๋ค ๋ฐฑ์๋๋ก ์ ๋ฌํ๋ ์ค๊ณ๊ธฐ๋ค. ์ธ ๋จ๊ณ ํ์ดํ๋ผ์ธ์ผ๋ก ๋์ํ๋ค.
| ๋จ๊ณ | ์ญํ | ์์ |
|---|---|---|
| Receiver | ๋ฐ์ดํฐ ์์ | OTLP, Prometheus, Jaeger ํ์ ๋ฑ |
| Processor | ๊ฐ๊ณตยทํํฐ๋งยท๋ฐฐ์น | ์ํ๋ง, ์์ฑ ์ถ๊ฐ/์ญ์ , ๋ฐฐ์น ๋ฌถ์ |
| Exporter | ๋ฐฑ์๋๋ก ์ ์ก | Tempo, Prometheus, Loki, Datadog ๋ฑ |
# otel-collector-config.yaml
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
batch:
exporters:
debug:
verbosity: detailed
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [debug]7. ์ ์ฒด ์ํคํ ์ฒ
์ง๊ธ๊น์ง ๋ด์ฉ์ ํ๋์ ํ๋ฆ์ผ๋ก ๋ฌถ์ผ๋ฉด ์ด๋ ๊ฒ ๋๋ค.
[์ ํ๋ฆฌ์ผ์ด์
]
โ OpenTelemetry API/SDK๋ก ๊ณ์ธก (Metrics/Logs/Traces ์์ฑ)
โ OTLP๋ก ์ ์ก
โผ
[OTel Collector / Grafana Alloy] โ ์์งยท๊ฐ๊ณตยท์ ๋ฌํ๋ ์ค๊ณ๊ธฐ
โ Exporter๊ฐ ๊ฐ ๋ฐฑ์๋ ํ์์ผ๋ก ๋ณํ
โผ
[์ ์ฅยท์๊ฐํ ๋ฐฑ์๋]
Prometheus(metrics) ยท Loki(logs) ยท Tempo(traces) ยท Grafana(๋์๋ณด๋)
Collector๋ ๊ผญ ํ์ํ๊ฐ
์ฑ์ด ๋ฐฑ์๋๋ก OTLP๋ฅผ ์ง์ ๋ณด๋ผ ์๋ ์๋ค. ํ์ง๋ง Collector๋ฅผ ๊ฐ์ด๋ฐ ๋๋ฉด โ ์ฑ์ ์ ์ก ๋์์ด ๋ฐ๋์ด๋ ์ํฅ๋ฐ์ง ์๊ณ โก ์ํ๋งยทํํฐ๋ง์ ์ค์์์ ๊ด๋ฆฌํ๋ฉฐ โข ์ฌ๋ฌ ํ์์ ํ๊ณณ์์ ๋ณํํ ์ ์๋ค. ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก Collector๋ฅผ ๋๋ ์ชฝ์ด ์ ๋ฆฌํ๋ค.
8. Collector ์ง์์ ๋๊ตฌ๋ค
OTel Collector ์ธ์๋ ๊ฐ์ โ์์งยท์ ๋ฌ ๊ณ์ธตโ์ ๋ค์ด๊ฐ๋ ๋๊ตฌ๊ฐ ์ฌ๋ฟ์ด๋ค. ์ด๋ค์ ๋๋ถ๋ถ OTLP๋ฅผ ์ง์ํ๋ฏ๋ก OTel ์ํ๊ณ์ ๋ง๋ฌผ๋ ค ๋์๊ฐ๋ค.
| ๋๊ตฌ | ์ง์ / ํน์ง |
|---|---|
| OpenTelemetry Collector | OTel ๊ณต์ ๋ ํผ๋ฐ์ค ์์ง๊ธฐ |
| Grafana Alloy | Grafana ์ง์. OTel Collector ๊ธฐ๋ฐ, Prometheus/Loki/Tempo ํตํฉ์ด ๊ฐ์ |
| Fluentd / Fluent Bit | ๋ก๊ทธ ์์ง์ ๊ฐํ CNCF ํ๋ก์ ํธ |
| Vector | ๊ณ ์ฑ๋ฅ ํ ๋ ๋ฉํธ๋ฆฌ ํ์ดํ๋ผ์ธ |
| Telegraf | InfluxDB ์ง์์ ๋ฉํธ๋ฆญ ์์ง๊ธฐ |
Beats / Elastic Agent์์ ๊ด๊ณ
Elastic Stack์ Beats๋ Elastic Agent๋ ๊ฐ์ โ์์งยท์ ๋ฌ ๊ณ์ธตโ์ ์ํ๋ค. ๋ค๋ง Beats๋ Elastic ์ํ๊ณ์ ํนํ๋ผ ์๊ณ , OTel CollectorยทAlloy๋ OTLP ๊ธฐ๋ฐ์ด๋ผ ๋ฐฑ์๋ ์ค๋ฆฝ์ ์ด๋ผ๋ ์ฐจ์ด๊ฐ ์๋ค. Alloy์ 1:1 ๋์์ ํตํฉ ์์ง๊ธฐ์ธ Elastic Agent ์ชฝ์ ๊ฐ๊น๋ค.
9. ๊ธฐ์กด ๋ชจ๋ํฐ๋ง๊ณผ ๋ฌด์์ด ๋ค๋ฅธ๊ฐ
Prometheus, Jaeger, ELK ๊ฐ์ ๋๊ตฌ๋ OTel ์ด์ ๋ถํฐ ์์๋ค. OTel์ ์ด๋ค์ ๋์ฒดํ๋ ๊ฒ ์๋๋ผ, ์ด๋ค ์๋จ์ ํ์ค์ ํต์ผํ๋ ์ญํ ์ด๋ค.
- ์ด์ : ๋๊ตฌ๋ง๋ค ๊ณ์ธก ๋ฐฉ์์ด ๋ฌ๋ผ ์ฝ๋๊ฐ ํน์ ๋๊ตฌ์ ๋ฌถ์
- ์ดํ: OTel ๋ฐฉ์์ผ๋ก ํ ๋ฒ ๊ณ์ธก โ ์ ์ฅยท์๊ฐํ ๋ฐฑ์๋๋ ์์ ๋กญ๊ฒ ๊ต์ฒด
ํต์ฌ ๊ฐ์น ์ ๋ฆฌ
OpenTelemetry์ ๋ณธ์ง์ โ์๋ก์ด ๋ชจ๋ํฐ๋ง ๋๊ตฌโ๊ฐ ์๋๋ผ ๊ณ์ธก๊ณผ ์ ์ก์ ๊ณตํต ํ์ค์ด๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ(SDK), ๋ฐ์ดํฐ์ ๋ชจ์(๋ฐ์ดํฐ ๋ชจ๋ธ), ๋ณด๋ด๋ ๋ฐฉ๋ฒ(OTLP)์ ํต์ผํด์, ๋ฐฑ์๋๋ฅผ ๊ฐ์๋ผ์ธ ์ ์๋ ์์ ๋ฅผ ์ค๋ค.
10. ์ ๋ฆฌ
- OpenTelemetry๋ ๊ด์ธก ๋ฐ์ดํฐ์ **๋ชจ์(๋ฐ์ดํฐ ๋ชจ๋ธ)**๊ณผ **์ ์ก ์ฝ์(OTLP)**์ ์ ํ CNCF ํ์ค์ด๋ค
- ๋ค๋ฃจ๋ ์ ํธ๋ Metrics ยท Logs ยท Traces ์ธ ๊ฐ์ง
- ์์ฑ ์ด๋ฆ๊น์ง ํต์ผํ Semantic Conventions๊ฐ ํ์ค์ ํต์ฌ
- ์ ์ฅ ํฌ๋งท์ ํ์ค์ด ์ ํ์ง ์๋๋ค โ ๋ฐฑ์๋(Prometheus, Tempo, Jaeger ๋ฑ)๊ฐ ๊ฒฐ์
- ๊ตฌ์ฑ์ ๊ณ์ธก์ฉ API/SDK์ ์์งยท์ ๋ฌ์ฉ Collector๋ก ๋๋๋ฉฐ, Alloy ๋ฑ ์ฌ๋ฌ ์์ง๊ธฐ๊ฐ ๊ฐ์ ๊ณ์ธต์์ OTLP๋ก ๋ง๋ฌผ๋ฆฐ๋ค
- ๊ฐ์ฅ ํฐ ์ด์ ์ ๋ฒค๋ ์ค๋ฆฝ์ฑ โ ๊ณ์ธก์ ๊ทธ๋๋ก ๋๊ณ ๋ฐฑ์๋๋ง ๊ต์ฒด ๊ฐ๋ฅ