topic난이도 · 약 25

관측성 3요소 — 로그·메트릭·트레이스

무슨 일이 일어났나(로그) · 얼마나(메트릭) · 어디서 왜 느렸나(트레이스).

#관측성#Observability#Logs#Metrics#Traces#SRE
왜 배우는가

배포 후 "사용자가 느리다는데 뭐가 문제지?"를 혼자 풀려면 관측 데이터가 필요. 이 3가지 개념을 알면 Sentry·Datadog·Grafana를 기본 세팅할 수 있다.

관측성(Observability)은 외부에서 본 시스템 상태를 이해하는 능력. 기존 모니터링이 "알려진 지표를 대시보드로"라면, 관측성은 "모르던 문제를 파헤치는 데이터".

요소뭐에 답?형태도구
Logs무슨 일이 일어났나?시간+메시지 이벤트Loki, CloudWatch, Datadog Logs
Metrics얼마나? 얼마나 자주?시계열 수치 (CPU, RPS, 지연)Prometheus, Grafana, Datadog Metrics
Traces요청 하나가 어떤 경로로?분산 호출 그래프Jaeger, Tempo, OpenTelemetry
typescript
// ━━━ 구조화 로그 (JSON, stdout) ━━━
import pino from "pino";
const log = pino();
log.info({ userId: 42, action: "login" }, "user logged in");
// {"level":30,"time":...,"userId":42,"action":"login","msg":"user logged in"}

// 이점: jq로 분석·수집기가 자동 파싱·검색 인덱싱

// ━━━ 메트릭 ━━━
// 직접 뽑기 — Prometheus 스타일
import { Counter, Histogram } from "prom-client";
const requests = new Counter({ name: "http_requests_total", labelNames: ["method", "status"] });
const latency  = new Histogram({ name: "http_latency_ms", buckets: [50, 100, 500, 1000] });

app.use((req, res, next) => {
  const t = Date.now();
  res.on("finish", () => {
    requests.inc({ method: req.method, status: res.statusCode });
    latency.observe(Date.now() - t);
  });
  next();
});
// /metrics 엔드포인트로 노출 → Prometheus가 스크레이프

// ━━━ 트레이스 (OpenTelemetry) ━━━
import { trace } from "@opentelemetry/api";
const tracer = trace.getTracer("myapp");

async function getUserPosts(id) {
  const span = tracer.startSpan("getUserPosts");
  try {
    const user = await db.users.find(id);         // 자동 하위 span
    const posts = await db.posts.where({ userId: user.id });
    return { user, posts };
  } finally {
    span.end();
  }
}
// Jaeger/Tempo에서 시각화 → "이 요청 350ms 중 DB가 300ms" 식으로 분석

구조화 로그(JSON)만 도입해도 관측성 50% 달성. Claude가 `console.log("...")`만 쓴다면 `pino`/`winston`으로 바꾸자는 요청.

Golden Signals 4개 (Google SRE) — ① Latency(지연) ② Traffic(요청량) ③ Errors(오류율) ④ Saturation(포화도 = CPU/메모리). 이 4개만 대시보드에 있어도 90% 장애가 보인다.

알림(Alerting) 원칙. ① SLO(Service Level Objective) 기반 — "99.9% 가용" 같은 목표를 정하고 그 이하로 떨어질 때만. ② 노이즈 금지 — 매일 뜨는 알림은 곧 무시된다. ③ 에러 예산 — SLO 위반 허용 시간을 예산처럼 관리.

바이브코더 2026 최소 세팅.Sentry — 에러 자동 수집 + 스택트레이스(무료 티어 충분). ② Vercel Analytics — 페이지 성능·Core Web Vitals. ③ Supabase 로그 — DB 느린 쿼리. 이 3개로 시작해서 규모 커지면 Datadog/New Relic.

실기 드릴 2문항
edit실기 드릴 · 단답형

관측성의 3대 요소는?

edit실기 드릴 · 단답형

Google SRE가 제시한 서비스 상태의 4대 Golden Signal은?