LabHub
배우기 러닝패스 코스

Debugging in Practice

Turning "It Feels Slow" Into Four Numbers

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

"요즘 시스템이 느려요" 한 줄에서 시작해, 무엇이 · 언제부터 · 얼마나 · 항상인가 네 질문에 숫자로 답합니다. 끝나면 조사 대상이 버전 하나로 좁습니다.

환경

/opt/data/app.jsonl 에 요청 340건이 한 줄에 하나씩 들어 있습니다.

{"ts": "2026-08-19T00:00:27Z", "level": "info", "service": "payment",
 "request_id": "req-0163", "path": "/api/pay", "status": 200,
 "latency_ms": 120, "msg": "ok"}

/opt/data/deploy.log 에는 같은 날 배포·롤백 이력이 있습니다. jqawk 가 들어 있으니 도구를 새로 깔 필요는 없습니다.

백분위수를 손으로 내는 법

정렬한 뒤 위치를 고르면 됩니다. 표본이 100건이면 p95 는 95번째 값입니다.

jq -r 'select(.path=="/login") | .latency_ms' /opt/data/app.jsonl   | sort -n | awk '{v[NR]=$1} END {print v[int(NR*0.95)]}'

만들 파일

전부 /root/slow/ 아래입니다.

by_path.txt   경로별 p95 — 전부가 느린 게 아니라는 증거
normal.txt    정상 경로의 기준선
when.txt      시간대별로 자른 결과
cause.txt     그 시각에 무슨 일이 있었나
delta.txt     문제 구간과 정상 구간을 나란히
shape.txt     평균 · p50 · p95 로 본 분포의 모양
errors.txt    같은 창에서 오류도 올랐는가
report.md     네 질문에 답한 한 장

단계

  1. 경로별로 p95 를 내서 다섯 경로를 나란히 놓습니다.
  2. 정상 경로들의 p95 를 기준선으로 적습니다. 비교 대상이 없으면 "느리다" 는 증명되지 않습니다.
  3. 느린 경로만 골라 시각으로 잘라 봅니다. 여러 시간대를 나란히 놓으세요.
  4. 그 시각에 deploy.log 에 무엇이 있었는지 대조합니다. 창이 닫힌 이유도 함께 찾으세요 — 그것이 상관관계의 나머지 절반입니다.
  5. 문제 구간과 정상 구간의 p50 을 나란히 적고 몇 배인지 씁니다.
  6. 평균 · p50 · p95 를 함께 놓고 항상인지 가끔인지 판정합니다.
  7. 같은 창에서 5xx 도 올랐는지 셉니다. 두 구간의 건수를 함께 적으세요.
  8. 네 질문에 답한 보고서를 한 장으로 씁니다. 다음 한 걸음까지.

참고

1단계에서 이미 절반이 끝납니다. 전부가 느린 경우는 드뭅니다. 경로를 나누지 않고 전체 평균만 보면 1,380ms 가 나오는데, 그 숫자는 어느 경로에도 해당하지 않습니다.

전부가 느린가

경로별로 p95 를 내서 다섯 경로를 나란히 놓습니다.

경로마다 p95 를 따로 냅니다. 다섯 개를 나란히 놓아 보면 하나만 자릿수가 다릅니다. jq -r '.path' 로 경로 목록부터 뽑으세요.

정상은 얼마인가

정상 경로들의 p95 를 기준선으로 적습니다. 비교 대상이 없으면 "느리다" 는 증명되지 않습니다.

느린 경로를 뺀 나머지가 기준선입니다. 네 경로가 비슷한 값이면 그것이 이 시스템의 정상입니다.

언제부터인가

느린 경로만 골라 시각으로 잘라 봅니다. 여러 시간대를 나란히 놓으세요.

느린 경로만 골라 ts 의 시각 부분으로 묶습니다. .ts[11:13] 이면 시(hour)만 나옵니다. 여러 시간대를 나란히 놓아야 어디서 튀는지 보입니다.

그 시각에 무슨 일이 있었나

그 시각에 deploy.log 에 무엇이 있었는지 대조합니다. 창이 닫힌 이유도 함께 찾으세요 — 그것이 상관관계의 나머지 절반입니다.

/opt/data/deploy.log 를 그 시간대로 잘라 보세요. 배포만 찾지 말고 되돌린 기록도 찾으세요 — 창이 닫힌 시각이 창이 열린 시각만큼 중요합니다.

얼마나 느린가

문제 구간과 정상 구간의 p50 을 나란히 적고 몇 배인지 씁니다.

창 안과 창 밖의 p50 을 같은 방법으로 재서 나란히 놓고, 몇 배인지 적으세요. 10배인지 10% 인지가 문제의 성격을 가릅니다.

항상인가 가끔인가

평균 · p50 · p95 를 함께 놓고 항상인지 가끔인지 판정합니다.

평균 · p50 · p95 를 함께 놓으세요. 전체 평균은 어느 경로에도 해당하지 않는 값이 나옵니다. 그것이 평균을 믿지 않는 이유입니다.

오류도 함께 올랐는가

같은 창에서 5xx 도 올랐는지 셉니다. 두 구간의 건수를 함께 적으세요.

지연만 보고 상태 코드를 안 세면 원인을 절반만 봅니다. 창 안과 창 밖의 5xx 건수를 함께 적으세요 — 한쪽이 0 이라는 사실이 창을 확정해 줍니다.

네 질문에 답한 한 장

네 질문에 답한 보고서를 한 장으로 씁니다. 다음 한 걸음까지.

비엔지니어가 읽습니다. 무엇이 · 언제부터 · 얼마나 · 항상인가에 답하고, 의심 대상과 다음 한 걸음으로 끝내세요.