TT Lab
はじめる
学ぶ 学習パス コース

デバッグ実戦

「遅いです」の一行を四つの数字に

TT Labで続きを見る

目標

「最近、システムが遅いです」という1行から始めて、何が・いつから・どのくらい・常にかという4つの質問に、数字で答えます。終わると、調査対象が1つのバージョンに絞られます。

環境

/opt/data/app.jsonlに、リクエスト340件が1行に1つずつ入っています。

{"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には、同じ日のデプロイとロールバックの履歴があります。jqとawkが入っているので、ツールを新しくインストールする必要はありません。

パーセンタイルを手で出す方法

ソートしたあとで、位置を選べばよいです。サンプルが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を出して、5つの経路を並べてみます。
  2. 正常な経路のp95を、ベースラインとして書きます。比較対象がなければ、「遅い」ことは証明されません。
  3. 遅い経路だけを選んで、時刻で切ってみます。複数の時間帯を並べてください。
  4. その時刻にdeploy.logに何があったかを突き合わせます。ウィンドウが閉じた理由も一緒に探してください。それが相関関係のもう半分です。
  5. 問題の区間と正常な区間のp50を並べて書き、何倍かを書きます。
  6. 平均・p50・p95を一緒に並べて、常になのかたまになのかを判定します。
  7. 同じウィンドウで5xxも増えたかを数えます。2つの区間の件数を一緒に書いてください。
  8. 4つの質問に答えたレポートを、1枚で書きます。次の一歩まで書いてください。

参考

ステップ1で、すでに半分は終わります。全部が遅いことはまれです。経路を分けずに全体の平均だけを見ると1,380msと出ますが、その数字はどの経路にも当てはまりません。

全部が遅いのか

経路ごとにp95を出して、5つの経路を並べてみます。

経路ごとにp95を別々に出します。5つを並べてみると、1つだけ桁が違います。jq -r '.path'で、まず経路の一覧を抜き出してください。

正常はどのくらいか

正常な経路のp95を、ベースラインとして書きます。比較対象がなければ、「遅い」ことは証明されません。

遅い経路を除いた残りがベースラインです。4つの経路が似た値なら、それがこのシステムの正常です。

いつからか

遅い経路だけを選んで、時刻で切ってみます。複数の時間帯を並べてください。

遅い経路だけを選び、tsの時刻の部分でまとめます。.ts[11:13]なら時(hour)だけが出ます。複数の時間帯を並べると、どこで跳ねるかが見えます。

その時刻に何があったか

その時刻にdeploy.logに何があったかを突き合わせます。ウィンドウが閉じた理由も一緒に探してください。それが相関関係のもう半分です。

/opt/data/deploy.logを、その時間帯で切ってみてください。デプロイだけを探さず、元に戻した記録も探してください。ウィンドウが閉じた時刻は、開いた時刻と同じくらい重要です。

どのくらい遅いのか

問題の区間と正常な区間のp50を並べて書き、何倍かを書きます。

ウィンドウの中と外のp50を同じ方法で測って並べ、何倍かを書いてください。10倍なのか10%なのかが、問題の性質を分けます。

常にか、たまにか

平均・p50・p95を一緒に並べて、常になのかたまになのかを判定します。

平均・p50・p95を一緒に並べてください。全体の平均は、どの経路にも当てはまらない値になります。それが、平均を信じない理由です。

エラーも一緒に増えたか

同じウィンドウで5xxも増えたかを数えます。2つの区間の件数を一緒に書いてください。

レイテンシだけを見てステータスコードを数えないと、原因を半分しか見ていません。ウィンドウの中と外の5xxの件数を一緒に書いてください。片方が0だという事実が、ウィンドウを確定させます。

4つの質問に答える1枚

4つの質問に答えたレポートを、1枚で書きます。次の一歩まで書いてください。

エンジニアでない人が読みます。何が・いつから・どのくらい・常にか、に答え、疑わしい対象と次の一歩で締めてください。