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/gRPCHTTP/2 (gRPC)protobuf4317์šด์˜ ๊ธฐ๋ณธ. ๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ํšจ์œจ์ 
OTLP/HTTP + protobuf์ผ๋ฐ˜ HTTP POSTprotobuf4318ํ”„๋ก์‹œยท๋ฐฉํ™”๋ฒฝ ํ™˜๊ฒฝ์—์„œ๋„ ๋ฌด๋‚œ, ์ž‘์€ ํฌ๊ธฐ ์œ ์ง€
OTLP/HTTP + JSON์ผ๋ฐ˜ HTTP POSTJSON4318๋””๋ฒ„๊น…ยทํ…Œ์ŠคํŠธ์šฉ, ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์‰ฌ์›€

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์ด ์ •ํ•จ?๋‚ด์šฉ
๋ฐ์ดํ„ฐ ๋ชจ๋ธOMetrics/Logs/Traces์˜ ํ•„๋“œ ๊ตฌ์กฐ
Semantic ConventionsO์†์„ฑ ์ด๋ฆ„ ํ‘œ์ค€ (http.request.method ๋“ฑ)
์ „์†ก ํ”„๋กœํ† ์ฝœ(OTLP)Oprotobuf ์ง๋ ฌํ™” + 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 CollectorOTel ๊ณต์‹ ๋ ˆํผ๋Ÿฐ์Šค ์ˆ˜์ง‘๊ธฐ
Grafana AlloyGrafana ์ง„์˜. OTel Collector ๊ธฐ๋ฐ˜, Prometheus/Loki/Tempo ํ†ตํ•ฉ์ด ๊ฐ•์ 
Fluentd / Fluent Bit๋กœ๊ทธ ์ˆ˜์ง‘์— ๊ฐ•ํ•œ CNCF ํ”„๋กœ์ ํŠธ
Vector๊ณ ์„ฑ๋Šฅ ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ
TelegrafInfluxDB ์ง„์˜์˜ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘๊ธฐ

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๋กœ ๋งž๋ฌผ๋ฆฐ๋‹ค
  • ๊ฐ€์žฅ ํฐ ์ด์ ์€ ๋ฒค๋” ์ค‘๋ฆฝ์„ฑ โ€” ๊ณ„์ธก์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ๋ฐฑ์—”๋“œ๋งŒ ๊ต์ฒด ๊ฐ€๋Šฅ