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

ログから原因を見つける

散らばったログを因果に束ねる

TT Labで続きを見る

目標

形式の異なる3つのログを重ねて、散らばった事実を1つの因果にまとめられるようになります。

なぜ重要なのか

エラーログから見るのは自然ですが、物語の途中から読むことです。典型的な劣化は、変更 → 一部リクエストの遅延(警告) → リソースの占有 → タイムアウト(エラー) → アラートの順に進み、エラーログだけを見ると、最後の2つの段階しか見えません。そのため、投げるべき質問は「いつエラーが始まったか」ではなく、「いつ正常でなくなったか」であり、警告レベルの初出時刻が、その答えです。

このラボで確認するもう1つは、平均の無力さです。全体の平均レイテンシはどのリクエストも代表しませんが、「1000msを超えるリクエストが何件か」はすぐに問題を表に出します。指標を1つだけ選ぶなら、平均ではなく、しきい値超過の件数を選んでください。

3つのログ

ステップ

  1. /root/correlateディレクトリを作成してください。
  2. app.jsonlで、levelがerrorの行の数を、/root/correlate/error_count.txtに書いてください。
  3. エラーメッセージが指しているテーブル名を、/root/correlate/table.txtに書いてください。
  4. 全体のlatency_msの平均を、整数に切り捨てて/root/correlate/avg_latency.txtに書いてください。
  5. latency_msが1000を超えるリクエストの数を、/root/correlate/slow_count.txtに書いてください。
  6. levelがwarnの最も早い行の時刻を、HH:MMで/root/correlate/first_warn.txtに書いてください。
  7. deploy.logで、事故の直前にデプロイされたpaymentサービスのバージョンを、/root/correlate/version.txtに書いてください。
  8. /root/correlate/link.mdに、因果を整理してください。デプロイバージョン、遅くなったテーブル、最初の警告の時刻、エラーの時刻が、すべて入っている必要があります。

参考

作業ディレクトリを作る

/root/correlateディレクトリを作成してください。

/root/correlateの下に、結果を集めます。

エラーログの数を数える

app.jsonlで、levelがerrorの行の数を、/root/correlate/error_count.txtに書いてください。

app.jsonlは、1行が1つのJSONです。levelフィールドがerrorの行を数えてください。

原因のテーブルを突き止める

エラーメッセージが指しているテーブル名を、/root/correlate/table.txtに書いてください。

エラーメッセージ自体に答えが入っています。msgフィールドを、1行だけきちんと読んでみてください。

平均レイテンシを求める

全体のlatency_msの平均を、整数に切り捨てて/root/correlate/avg_latency.txtに書いてください。

全体のlatency_msの平均を、整数に切り捨てます。この値が、後のステップと対比されます。

遅いリクエストの数を数える

latency_msが1000を超えるリクエストの数を、/root/correlate/slow_count.txtに書いてください。

latency_msが1000を超えるリクエストの件数です。平均1つでは見えなかったものが、表に出ます。

最初の警告の時刻を見つける

levelがwarnの最も早い行の時刻を、HH:MMで/root/correlate/first_warn.txtに書いてください。

levelがwarnの行のうち、最も早いtsのHH:MMです。エラーより前にあります。

直前のデプロイバージョンを見つける

deploy.logで、事故の直前にデプロイされたpaymentサービスのバージョンを、/root/correlate/version.txtに書いてください。

deploy.logで、事故の時刻の直前にデプロイされたpaymentサービスのバージョンです。

因果を整理する

/root/correlate/link.mdに、因果を整理してください。デプロイバージョン、遅くなったテーブル、最初の警告の時刻、エラーの時刻が、すべて入っている必要があります。

デプロイバージョン、遅くなったテーブル、最初の警告の時刻、エラーの時刻を、1つのドキュメントにまとめてください。