[Daily morning study] Observability์ 3์์ (Metrics, Tracing, Logging)
#daily morning study
Observability์ 3์์: Metrics, Tracing, Logging
Observability๋ ์์คํ ์ ์ํ์ ๋์์ ํ์ ํ๊ณ , ๋ฌธ์ ๋ฅผ ์ง๋จํ๊ธฐ ์ํ ํ์์ ์ธ ์์๋ค. ์ด ๋ฌธ์์์๋ Observability์ 3๊ฐ์ง ํต์ฌ ์์์ธ Metrics, Tracing, Logging์ ๋ํด ์์๋ณด์.
1. Metrics
Metrics๋ ์์คํ ์ ์ฑ๋ฅ์ ์์น์ ์ผ๋ก ํํํ๋ ๋ฐ์ดํฐ๋ค. ์ฃผ๋ก ์๊ฐ์ ๋ฐ๋ผ ๋ณํํ๋ ๊ฐ๋ค์ ์ธก์ ํ๋ค. ๋ค์๊ณผ ๊ฐ์ ์ฑ๊ฒฉ์ ๊ฐ์ง๋ค:
- ์ฃผ๊ธฐ์ ์์ง: ํน์ ์๊ฐ ๊ฐ๊ฒฉ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ๋ถ์ํ๋ ๋ฐฉ์์ด๋ค.
- ์ง๊ณ ๋ฐ ํ๊ท ํ: ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ง๊ณํ๊ฑฐ๋ ํ๊ท ์ ๋ผ ์ ์๋ค.
- ๋ชจ๋ํฐ๋ง ๋๊ตฌ: Grafana, Prometheus ๋ฑ์ ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ ์๊ฐํํ๊ณ ์๋ฆผ์ ๋ฐ์ ์ ์๋ค.
์์
์๋ฒ์ CPU ์ฌ์ฉ๋ฅ ์ ์ธก์ ํ๋ JSON ํ์์ ๋ฉํธ๋ฆญ์ ๋ค์๊ณผ ๊ฐ๋ค.
{
"timestamp": "2023-10-01T12:00:00Z",
"cpu_usage": 75.2,
"memory_usage": 65.4
}
2. Tracing
Tracing์ ๊ฐ๊ฐ์ ์์ฒญ์ด ์์คํ ์ ํตํด ์ด๋ป๊ฒ ํ๋ฅด๋์ง๋ฅผ ์ถ์ ํ๋ ๊ธฐ์ ์ด๋ค. ์ฃผ๋ก ๋ถ์ฐ ์์คํ ์์ ์ฌ์ฉ๋๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ํน์ฑ์ ๊ฐ์ง๋ค:
- ์์ฒญ์ ๊ฒฝ๋ก: ์์ฒญ์ด ์์คํ ์ ์ด๋ ๋ถ๋ถ์ ํต๊ณผํ๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
- ์ฑ๋ฅ ๋ถ์: ๊ฐ ์๋น์ค ํธ์ถ์ ์์๋๋ ์๊ฐ์ ์ธก์ ํ์ฌ ๋ณ๋ชฉ ํ์์ ์๋ณํ๋ค.
- ์๊ด ๊ด๊ณ: ๋ค์ํ ์๋น์ค ๊ฐ์ ์๊ด ๊ด๊ณ๋ฅผ ๋ถ์ํ ์ ์๋ค.
์์
OpenTelemetry ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ Tracing์ ๊ตฌํํ๋ ์ฝ๋ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
from opentelemetry import trace
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("process_order"):
# ์ฃผ๋ฌธ ์ฒ๋ฆฌ ๋ก์ง
with tracer.start_as_current_span("validate_order"):
# ์ฃผ๋ฌธ ์ ํจ์ฑ ๊ฒ์ฌ ๋ก์ง
with tracer.start_as_current_span("charge_credit_card"):
# ์นด๋ ์๊ธ ์ฒญ๊ตฌ ๋ก์ง
3. Logging
Logging์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ํ๋ ์ด๋ฒคํธ, ์ค๋ฅ ๋ฐ ์ํ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๋ ํ์์ด๋ค. ์ฃผ๋ก ๋ฌธ์ ํด๊ฒฐ ๋ฐ ์ํ ์ง๋จ์ ์ฌ์ฉ๋๋ค.
- ์๊ตฌ์ ์ ์ฅ: ๋ก๊ทธ๋ ํ์ผ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋์ด ๋์ค์ ๋ถ์ํ ์ ์๋ค.
- ๋ฌธ๋งฅ ์ ๋ณด: ๋ก๊ทธ์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์๊ฐ, ์์ฒญ ๋ฐ์ดํฐ, ์ฌ์ฉ์ ์ ๋ณด ๋ฑ ๋ค์ํ ๋ฌธ๋งฅ ์ ๋ณด๋ฅผ ํฌํจํ ์ ์๋ค.
- ๋ค์ํ ๋ก๊ทธ ์์ค: DEBUG, INFO, WARN, ERROR ๋ฑ ๋ค์ํ ๋ก๊ทธ ์์ค์ ์ค์ ํ ์ ์๋ค.
์์
Python์์ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ๋ ๊ฐ๋จํ ์ฝ๋ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info("์ฃผ๋ฌธ์ด ์์๋์์ต๋๋ค.")
try:
# ์ฃผ๋ฌธ ์ฒ๋ฆฌ ๋ก์ง
raise Exception("์ฃผ๋ฌธ ์ฒ๋ฆฌ ์ค ์ค๋ฅ ๋ฐ์")
except Exception as e:
logger.error(f"์ค๋ฅ ๋ฐ์: {e}")
๊ฒฐ๋ก
Metrics, Tracing, Logging์ ์๋ก ๋ณด์์ ์ธ ๊ด๊ณ์ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ์์๋ฅผ ์ ์ ํ๊ฒ ํ์ฉํ๋ฉด ์์คํ ์ Observability๋ฅผ ๋์ด๊ณ , ์ฅ์ ๋ฅผ ์ ์ํ๊ฒ ์ง๋จํ ์ ์๋ค. ์ด 3์์ ๋ชจ๋๊ฐ ํจ๊ป ์๋ํ ๋, ๊ฐ๋ฐ์๋ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ๊ณผ ์์คํ ์ ๋ขฐ์ฑ์ ์ ๊ณตํ ์ ์๋ค.
์์ ์ ์์คํ ์์ ์ด ์ธ ๊ฐ์ง ์์๋ฅผ ์ด๋ป๊ฒ ๊ตฌํํ ์ง๋ฅผ ๊ณ ๋ฏผํด๋ณด์.