From a39ac88345659b3d980067d03bf908674c9f3426 Mon Sep 17 00:00:00 2001 From: GIRIBUIBN Date: Fri, 26 Jun 2026 23:40:59 +0900 Subject: [PATCH] week03: add giribuin observability --- week03/giribuin.md | 297 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 297 insertions(+) create mode 100644 week03/giribuin.md diff --git a/week03/giribuin.md b/week03/giribuin.md new file mode 100644 index 0000000..8a2096f --- /dev/null +++ b/week03/giribuin.md @@ -0,0 +1,297 @@ + +## โฌ› Summary +> Observability๋Š” ์‹œ์Šคํ…œ ์™ธ๋ถ€์— ๋“œ๋Ÿฌ๋‚œ log, metric, trace ๊ฐ™์€ telemetry๋ฅผ ํ†ตํ•ด์„œ ๋‚ด๋ถ€ ์ƒํƒœ์™€ ์žฅ์•  ์›์ธ์„ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ฐฑ์—”๋“œ์—์„œ๋Š” ์š”์ฒญ ํ๋ฆ„, ๋ณ‘๋ชฉ์„ ์ถ”์ ํ•˜๋Š” ๋ฐ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. AI Agnet๊ฐ€ ๋ฐœ์ „ํ•˜๋ฉด์„œ agent์˜ ๋™์ž‘ ํ๋ฆ„์„ ์ถ”์ ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ๋„ ํ™•์žฅ๋˜๊ณ  ์žˆ๋‹ค. +--- +## โฌ› Content +### Observability +- ์‹œ์Šคํ…œ์ด ์™œ ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ–ˆ๋Š”์ง€๋ฅผ ์™ธ๋ถ€๋กœ ๋“œ๋Ÿฌ๋‚œ ์‹ ํ˜ธ๋ฅผ ํ†ตํ•ด ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๋Šฅ๋ ฅ +- Observability lets you understand a system from the outside by letting you ask questions about that system without knowing its inner workings +--- +#### Monitoring vs Observability +- Monitoring: ์ง€๊ธˆ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋Š”๊ฐ€? + - CPU ์‚ฌ์šฉ๋ฅ  > 80\% + - API 500 ์—๋Ÿฌ์œจ 5\% ๋„˜์—ˆ๋‚˜? + +- Observability: ์™œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋Š”๊ฐ€? + - ์™œ ํŠน์ • ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ๋งŒ ๋А๋ฆฐ๊ฐ€? + - ์™œ ๊ฒฐ์ œ ์š”์ฒญ ์ค‘ ์ผ๋ถ€๋งŒ ์‹คํŒจํ•˜๋Š”๊ฐ€? + - ๊ฐ™์€ API์ธ๋ฐ ์™œ ๋ชจ๋ฐ”์ผ ์•ฑ์—์„œ๋งŒ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€? + +> Monitoring์€ ๋ฏธ๋ฆฌ ์ •ํ•ด๋‘” ์ง€ํ‘œ์™€ ์•Œ๋ฆผ์„ ๋ณด๋Š” ๊ฒƒ์ด๋ผ๋ฉด, Observability๋Š” ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ๋ฌธ์ œ๋„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด log, metric, trace ๊ฐ™์€ telemetry๋ฅผ ๋‚จ๊ธฐ๋Š” ๊ฒƒ +> +> Monitoring๊ณผ Observabililty๋Š” ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜์ง€๋งŒ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์–ป๊ณ ์ž ํ•˜๋Š” ๋ชฉ์ ์ด ๋‹ค๋ฆ„. ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์›์ธ์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ก์„ ๋‚จ๊ธฐ๋Š” ๊ฒƒ + +--- +##### Log, Metric, Trace +###### Log: ํŠน์ • ์‹œ์ ์— ๋ฐœ์ƒํ•œ event ๊ธฐ๋ก + +~~~ +2026-06-26T12:01:03Z ERROR payment failed order_id=123 reason=timeout +~~~ + +- ๊ฐœ๋ณ„ event์— ์ง‘์ค‘ + - ์žฅ์ : ๊ตฌ์ฒด์ ์œผ๋กœ ๊ธฐ๋ก์„ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Œ + - ๊ฒฐ์ œ ์‹คํŒจ, ์‹คํŒจ ์›์ธ ๋“ฑ + - ํ•œ๊ณ„: ๋กœ๊ทธ๋งŒ์œผ๋กœ ์ „์ฒด ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›€ + - ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๋“ค์˜ ๋กœ๊ทธ๊ฐ€ ๊ฒน์น  ๋•Œ, ํ•œ ๋ˆˆ์— ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›€ + - ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๋Š” ID๊ฐ€ ํ•„์š”(trace_id, request_id) +--- +###### Metric: ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ์ˆ˜์น˜ ๋ฐ์ดํ„ฐ + +~~~ +http_requests_total = 152340 +http_request_duration_p95 = 350ms +cpu_usage = 82% +error_rate = 3.2% +~~~ + +- metric์€ ์ „์ฒด ์ƒํƒœ์˜ ์ถ”์„ธ์— ์ง‘์ค‘ + - ์—๋Ÿฌ์œจ์ด ์ ์  ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ๋‚˜? + - ์‘๋‹ต ์‹œ๊ฐ„์ด ์ ์  ๋А๋ ค์ง€๋‚˜? + - ํŠธ๋ž˜ํ”ฝ์ด ์ ์  ์ปค์ง€๋‚˜? + - ์žฅ์ : ๋ฏธ๋ฆฌ ์ •ํ•œ ๊ธฐ์ค€์— ๋Œ€ํ•ด ์•Œ๋žŒ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Œ + - cpu ์‚ฌ์šฉ๋Ÿ‰ 80% ๋„˜๊ธฐ๋ฉด ์•Œ๋ฆผ + - ํ•œ๊ณ„: ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฑด ์•Œ์ง€๋งŒ, ์™œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€๋Š” ๋ชจ๋ฆ„ +--- +###### Trace: ํ•˜๋‚˜์˜ ์š”์ฒญ์ด๋‚˜ ์ž‘์—…์ด ์‹œ์Šคํ…œ ๋‚ด๋ถ€์—์„œ ์ง€๋‚˜๊ฐ„ ๊ฒฝ๋กœ + +~~~ +Trace: POST /orders + +Client +โ†’ API Gateway +โ†’ Auth Service +โ†’ Order Service +โ†’ Payment Service +โ†’ DB +โ†’ Message Queue +~~~ + +- ์—ฌ๋Ÿฌ ๊ฐœ์˜ span์œผ๋กœ ๊ตฌ์„ฑ + - span: ์š”์ฒญ ์•ˆ์˜ ๊ฐœ๋ณ„ ์ž‘์—… ๋‹จ์œ„ + - trace: ์ „์ฒด ์š”์ฒญ ํ๋ฆ„ + - ์žฅ์ : ๋ฌธ์ œ์˜ ์›์ธ์„ ์ฐพ๋Š” ๋ฐ ๊ฐ•ํ•จ + - Metric์„ ํ†ตํ•ด API ๋ณ‘๋ชฉ์„ ๋ฐœ์ƒํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค๊ณ  ํ•˜๋ฉด + - Trace๋ฅผ ํ†ตํ•ด ์–ด๋””์—์„œ ์–ผ๋งˆ๋‚˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜์—ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ + - ํ•œ๊ณ„: ๋ชจ๋“  ๋งฅ๋ฝ์„ ํŒŒ์•…ํ•  ์ˆ˜๋Š” ์—†์Œ + - ์–ด๋””์„œ API๊ฐ€ ์‹œ๊ฐ„์„ ๋งŽ์ด ์ผ๋Š” ์ง€๋Š” ํ™•์ธํ–ˆ์ง€๋งŒ + - ์–ด๋–ค ์ฝ”๋“œ๊ฐ€ ๋ฌธ์ œ๋ฅผ ์ผ์œผ์ผฐ๋Š”์ง€๋Š” log๋ž‘ ๊ฐ™์ด ํ™•์ธํ•ด์•ผ ํ•จ + +**Span, Trace, Parent-Child Span** + +- Trace ID: ํ•˜๋‚˜์˜ ์š”์ฒญ ์ „์ฒด๋ฅผ ๋ฌถ๋Š” ID + - ์š”์ฒญ์— ๋Œ€ํ•œ ์„œ๋น„์Šค ํ๋ฆ„์„ ์žฌ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ์Œ +- Span ID: ์š”์ฒญ ์•ˆ์˜ ๊ฐœ๋ณ„ ์ž‘์—… ID +- Parent Span: ์–ด๋–ค ์ž‘์—…์ด ์ด ์ž‘์—…์„ ํ˜ธ์ถœํ–ˆ๋Š”์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒ์œ„ span +- Child Span: ์ƒ์œ„ ์ž‘์—… ์•ˆ์—์„œ ํŒŒ์ƒ๋œ ํ•˜์œ„ ์ž‘์—… + +~~~ +Trace: POST /orders ์š”์ฒญ ์ „์ฒด + +Span 1: API Gateway ์š”์ฒญ ์ˆ˜์‹  + Span 2: Auth Service ํ† ํฐ ๊ฒ€์ฆ + Span 3: Order Service ์ฃผ๋ฌธ ์ƒ์„ฑ + Span 4: DB insert + Span 5: Payment API ํ˜ธ์ถœ +~~~ + + +--- +#### AI Agent Observability +- ๋ณดํ†ต์€ + - ์–ด๋–ค API๊ฐ€ ๋А๋ฆฌ์ง€? + - ์–ด๋–ค DB query๊ฐ€ ๋А๋ฆฌ์ง€? + - ์–ด๋–ค ์„œ๋น„์Šค์—์„œ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ์ง€? + - ์–ด๋–ค ์š”์ฒญ์ด ์–ด๋–ค ์„œ๋น„์Šค๋ฅผ ๊ฑฐ์ณค์ง€? + +~~~ +Log = payment failed(๊ฒฐ์ œ ์‹คํŒจ) +Metric = error_rate, latency +Trace = POST /orders ์š”์ฒญ ํ๋ฆ„ +~~~ + +--- +- AI Agent์—์„œ๋Š” + - ์™œ ์ด tool๋ฅผ ํ˜ธ์ถœํ–ˆ์ง€? + - ์™œ ๊ฒ€์ƒ‰ query๋ฅผ ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์—ˆ์ง€? + - ๊ฒ€์ƒ‰๋œ ๋ฌธ์„œ๋Š” ์ž˜ ๊ฒ€์ƒ‰๋œ๊ฑด๊ฐ€? + - ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋Š” ์ž˜ ํ•ด์„ํ–ˆ๋‚˜? + - ํŒ๋‹จ ๊ณผ์ •์— ๋ฌธ์ œ๋Š” ์—†์—ˆ๋‚˜? + - ์ตœ์ข… ๋‹ต๋ณ€์˜ ์‹ ๋ขฐ๋„๋Š” ์–ด๋–ค ์ฆ๊ฑฐ๋“ค๋กœ ๋’ท๋ฐ›์นจํ•˜๊ณ  ์žˆ๋‚˜? + +~~~ +Log = agent๊ฐ€ ๋‚จ๊ธด ๊ตฌ์ฒด์  ์‹คํ–‰ ๊ธฐ๋ก +Metric = token usage, cost, latency, success rate, tool failure rate +Trace = user request โ†’ LLM call โ†’ tool call โ†’ retrieval โ†’ final answer ํ๋ฆ„ +~~~ + +--- + +> AgentTrace\[2\] +> LLM ๊ธฐ๋ฐ˜์œผ๋กœ autonomous agents์˜ ์—ญ๋Ÿ‰์ด ์ปค์กŒ์ง€๋งŒ, ์ค‘์š”ํ•œ ๋ถ„์•ผ์—์„œ ๋„์ž…์€ ์ œํ•œ์ ์ž„. ๊ทธ ์ด์œ ๋Š” ๋ณด์•ˆ ๋ฌธ์ œ ๋•Œ๋ฌธ์ž„. LLM์€ nondeterministic(๋™์ผ ํ”„๋กฌํ”„ํŠธ๋ผ๋„ ๊ฒฐ๊ณผ ๊ฐ€๋งค๋ฒˆ ๋‹ค๋ฆ„)์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— software assurance์˜ ๊ธฐ๋ฐ˜์ธ static auditing ๋ฐฉ์‹์„ ๋ฌด๋ ฅํ™” ์‹œํ‚ด. +> +> ๊ธฐ์กด์˜ ๋ณด์•ˆ ๋ฐฉ๋ฒ•๋ก (์ž…์Œ + +~~~ +traceparent: 00--- +~~~ + +HTTP ์š”์ฒญ์ฒ˜๋Ÿผ ๋ฐ”๋กœ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ + +~~~ +Service A โ†’ HTTP โ†’ Service B +~~~ + +- ์ด ๊ฒฝ์šฐ๋Š” ๋‹จ์ˆœํ•˜์ง€๋งŒ, queue๋‚˜ background job์ด ๋ผ๋ฉด ๋ณต์žกํ•ด์ง + +~~~ +Order Service +โ†’ Kafka / RabbitMQ / SQS +โ†’ Notification Worker +~~~ + +- trace context๋ฅผ header์— ๋„ฃ์–ด์„œ ์ „๋‹ฌํ•ด์•ผ ํ•จ. ํ•˜์ง€ ์•Š์œผ๋ฉด, + - ์ฃผ๋ฌธ ์š”์ฒญ trace์™€ ์•Œ๋ฆผ worker ์ฒ˜๋ฆฌ trace๊ฐ€ ๋‹ค๋ฅธ trace์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ + +--- +##### Sampling ๋ฌธ์ œ + +Distributed tracing์€ ์œ ์šฉํ•˜๊ธด ํ•œ๋ฐ ๋ชจ๋“  ์š”์ฒญ์„ ๋‹ค ์ €์žฅํ•˜๋ฉด cost๊ฐ€ ๋„ˆ๋ฌด ํผ + +๊ทธ๋ž˜์„œ sampling์„ ์‚ฌ์šฉํ•ด์„œ ์›์ธ ๋ถ„์„์— ํ•„์š”ํ•œ trace๋ฅผ ๋‚จ๊น€ + +~~~ +์ •์ƒ ์š”์ฒญ 1%๋งŒ ์ €์žฅ +์—๋Ÿฌ ์š”์ฒญ์€ 100% ์ €์žฅ +latency๊ฐ€ 2์ดˆ ๋„˜๋Š” ์š”์ฒญ์€ 100% ์ €์žฅ +~~~ + +- Head-based sampling: ์š”์ฒญ ์‹œ์ž‘ ์‹œ์ ์— ์ €์žฅ ์—ฌ๋ถ€ ๊ฒฐ์ • + +- Tail-based sampling: ์š”์ฒญ์ด ๋๋‚œ ๋’ค ์—๋Ÿฌ/์ง€์—ฐ ๋“ฑ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ์ €์žฅ ์—ฌ๋ถ€ ๊ฒฐ์ • + +--- + +#### Context Propagation + +Trace ์ •๋ณด๋ฅผ ์„œ๋น„์Šค ๊ฐ„์— ์ „๋‹ฌํ•ด์„œ, ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ์—์„œ ๋ฐœ์ƒํ•œ span๋“ค์„ ํ•˜๋‚˜์˜ trace๋กœ ์ด์–ด ๋ถ™์ด๋Š” ๋งค์ปค๋‹ˆ์ฆ˜ +- trace_id์™€ parent span ์ •๋ณด๋ฅผ ๋‹ค์Œ ์„œ๋น„์Šค๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ + +> Distributed tracing์ด ๊ฐ€๋Šฅํ•˜๋ ค๋ฉด ๊ฐ ์„œ๋น„์Šค๊ฐ€ ๊ฐ™์€ trace context๋ฅผ ๊ณต์œ ํ•ด์•ผ ํ•จ + +**context: ์š”์ฒญ์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ถ€๊ฐ€ ์ •๋ณด** +- trace_id, span_id, parent_span_id, sampling flag, baggage + +**Propagation: ํ•œ ์„œ๋น„์Šค์—์„œ ๋‹ค์Œ ์„œ๋น„์Šค๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ trace context๋„ ๊ฐ™์ด ๋ณด๋‚ด๋Š” ๊ฒƒ** + +``` +Service A + โ””โ”€ ํ˜„์žฌ trace context ๋ณด์œ  + +Service A โ†’ Service B ์š”์ฒญ + โ””โ”€ trace context๋ฅผ HTTP header์— ์‚ฝ์ž…(inject) + +Service B + โ””โ”€ header์—์„œ trace context ์ถ”์ถœ(extract) + โ””โ”€ child span ์ƒ์„ฑ +``` + +OpenTelemetry์—์„œ๋Š” ๋‘ ๋‹จ๊ณ„๋กœ ์ˆ˜ํ–‰ +- inject: ํ˜„์žฌ context๋ฅผ outbound ์š”์ฒญ์— ๋„ฃ๊ธฐ +- extract: inbound ์š”์ฒญ์—์„œ context ๊บผ๋‚ด๊ธฐ + +**Baggage: ์ถ”๊ฐ€์ ์ธ ๋น„์ฆˆ๋‹ˆ์Šค context ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ** +- ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์—์„œ ์–ด๋–ค ์ •๋ณด๋ฅผ ์•Œ๊ณ  ์‹ถ์„ ๋•Œ baggage๋กœ ์ „๋‹ฌ ํ•  ์ˆ˜ ์žˆ์Œ +- ๋ฏผ๊ฐ์ •๋ณด๋‚˜ ๋„ˆ๋ฌด ํฐ ๋ฐ์ดํ„ฐ ๊ฐ™์€ ๊ฑธ ๋„ฃ์„ ๋•Œ ์กฐ์‹ฌ + - ๋ชจ๋“  downstream ์„œ๋น„์Šค๋กœ ํผ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ + +--- +#### OpenTelemetry + +telemetry ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ/์ˆ˜์ง‘/์ฒ˜๋ฆฌ/์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ ํ”„๋ ˆ์ž„์›Œํฌ + +##### ํ•„์š”์„ฑ + +์„œ๋น„์Šค๋งˆ๋‹ค ๊ด€์ธก ๋„๊ตฌ๋ฅผ ์ง์ ‘ ๋ถ™์ด๋ฉด ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์ง + +๋ฐฑ์—”๋“œ ์„œ๋ฒ„์—์„œ ๋„๊ตฌ๋“ค์„ ์ง์ ‘ ์—ฐ๋™ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด, + +``` +Trace โ†’ Jaeger +Metric โ†’ Prometheus +Log โ†’ Elasticsearch / Loki +APM โ†’ Datadog +``` + +์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๊ฐ€ ํŠน์ • ๋ฒค๋”์— ์ข…์†๋˜๊ฒŒ ๋จ + +์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ค‘๊ฐ„ ๊ณ„์ธต์œผ๋กœ OpenTelemetry๋ฅผ ๋‘  +- Opentelemetry ๋ฐฉ์‹์œผ๋กœ telemetry ์ƒ์„ฑ +- Collector๊ฐ€ ๋ฐ›์•„์„œ ์›ํ•˜๋Š” backend๋กœ export + +``` +[1] Application (์‹ค์ œ ์„œ๋น„์Šค ์ฝ”๋“œ) + โ†“ +[2] Instrumentation (์ฝ”๋“œ์—์„œ telemetry๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก instrument) + โ†“ +[3] OpenTelemetry API (span/metric/log๋ฅผ ๋งŒ๋“œ๋Š” interface) + โ†“ +[4] OpenTelemetry SDK (API์˜ ์‹ค์ œ ๊ตฌํ˜„์ฒด) + โ†“ +[5] Exporter (telemetry๋ฅผ ์™ธ๋ถ€๋กœ ๋‚ด๋ณด๋ƒ„) + โ†“ +[6] OpenTelemetry Collector (telemetry๋ฅผ ๋ฐ›๊ณ , ์ฒ˜๋ฆฌํ•ด์„œ ๊ฐ backend๋กœ ์ „๋‹ฌ) + โ†“ +[7] Observability Backend (Jaeger, Prometheus, Grafana, Datadog, Loki ๋“ฑ ์ €์žฅ/์‹œ๊ฐํ™” ๋„๊ตฌ) +``` + +๋‹ค์Œ ๋ชฉ์ ์„ ์œ„ํ•ด ์‚ฌ์šฉ: +1. telemetry ์ƒ์„ฑ ๋ฐฉ์‹ ํ‘œ์ค€ํ™” +2. trace / metric / log ์ˆ˜์ง‘ ๋ฐฉ์‹ ํ‘œ์ค€ํ™” +3. observability backend ๊ต์ฒด ๋น„์šฉ ๊ฐ์†Œ +4. ์—ฌ๋Ÿฌ ์–ธ์–ด์™€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ณ„์ธก ๋ฐฉ์‹ ํ†ต์ผ +--- +#### Semantic Convention + +telemetry ๋ฐ์ดํ„ฐ์˜ ์ด๋ฆ„, ์˜๋ฏธ, ํƒ€์ž…, ๋‹จ์œ„๋ฅผ ํ‘œ์ค€ํ™”ํ•˜๋Š” ๊ทœ์น™ + +ํ•„๋“œ๋ช…๋งŒ ์ •ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์ฝ”๋“œ๋ฒ ์ด์Šคยท๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌยทํ”Œ๋žซํผ ์ „๋ฐ˜์—์„œ ๊ณตํ†ต naming scheme์„ ๋”ฐ๋ฅด๋„๋ก ํ•จ + +1. attribute name +2. attribute type +3. attribute meaning +4. valid values +5. span name +6. span kind +7. metric name +8. metric unit +9. event name +10. resource attribute + +##### Cardinality ๋ฌธ์ œ + +์–ด๋–ค attribute๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ณ ์œ  ๊ฐ’์˜ ๊ฐœ์ˆ˜์ธ๋ฐ, semantic convention๊ณผ ๊ฐ™์ด ์•Œ์•„์•ผ ํ•จ + +``` +๋‚ฎ์€ cardinality: +http.request.method = GET / POST / PUT / DELETE +http.response.status_code = 200 / 404 / 500 +region = kr / us / eu + +๋†’์€ cardinality: +user.id = ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ +order.id = ์ˆ˜์ฒœ๋งŒ ๊ฐœ +session.id = ์ˆ˜์–ต ๊ฐœ +request.id = ์š”์ฒญ๋งˆ๋‹ค ๋‹ค๋ฆ„ +``` + +- metric label์— user_id๋ฅผ ๋„ฃ๋Š”๋‹ค๊ณ  ํ•˜๋ฉด, ์‚ฌ์šฉ์ž ์ˆ˜๋งŒํผ ์‹œ๊ณ„์—ด์ด ์ฆ๊ฐ€ + - ์ผ๋ฐ˜์ ์œผ๋กœ Metric lable์€ ๋‚ฎ์€ cardinality ์œ„์ฃผ + - Trace attribute๋Š” ๋””๋ฒ„๊น…์— ํ•„์š”ํ•œ ๊ณ ์œ  ID ์ผ๋ถ€ ํ—ˆ์šฉ + - Log๋Š” ์ƒ์„ธ ๋งฅ๋ฝ ๊ธฐ๋ก์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๊ฐœ์ธ์ •๋ณด/๋ณด์•ˆ์— ์ฃผ์˜ํ•˜๋ฉด์„œ ์‚ฌ์šฉ + +--- +## โฌ› Links +\[1\] "Observability primer | OpenTelemetry". no date, https://opentelemetry.io/docs/concepts/observability-primer/ + +\[2\] A. AlSayyad, K. Y. Huang and R. Pal, "AgentTrace: A Structured Logging Framework for Agent System Observability", University of California, Berkeley, no date, https://arxiv.org/pdf/2602.10133