「遅いです」の一行を四つの数字に
目標
「最近、システムが遅いです」という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 네 질문에 답한 한 장
ステップ
- 経路ごとにp95を出して、5つの経路を並べてみます。
- 正常な経路のp95を、ベースラインとして書きます。比較対象がなければ、「遅い」ことは証明されません。
- 遅い経路だけを選んで、時刻で切ってみます。複数の時間帯を並べてください。
- その時刻に
deploy.logに何があったかを突き合わせます。ウィンドウが閉じた理由も一緒に探してください。それが相関関係のもう半分です。 - 問題の区間と正常な区間のp50を並べて書き、何倍かを書きます。
- 平均・p50・p95を一緒に並べて、常になのかたまになのかを判定します。
- 同じウィンドウで5xxも増えたかを数えます。2つの区間の件数を一緒に書いてください。
- 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枚で書きます。次の一歩まで書いてください。
エンジニアでない人が読みます。何が・いつから・どのくらい・常にか、に答え、疑わしい対象と次の一歩で締めてください。