前回に引き続き実践編です。
実践
検証
システムが正しく動作しているかを理解するためには、そのシステム中の各コンポーネントの動作を検証できる必要があります。
理想は、モニタリングシステムがシステムのメトリクスを記録していることです。
また、ロギングを行うことによって、任意のタイミングでのプロセスの動作を知ることができます。
Googleにおいては、その時のシステムの状況を公開することができます。
Googleサーバー群は直近に送受信されたRPCの一部を返すエンドポイントがあり、サーバーが周りと通信する様子を見ることができます。
また、コンポーネントがリクエストに何を返すのかを知るために、実験用のクライアントを用意する必要があるかもしれません。
診断
診断の方法には、さまざまな方法がありますが、それについてみていきます。
単純化と削減
-
ブラックボックステスト
既知のテストデータを与え、返ってくる結果が期待通りかを検証する。
再現性のあるテストによって、原因の特定をしっかり行うことができる。 -
分割統治法
原因の可能性があるコンポーネントを順番に調べていき、患部を特定する。
「何が」「どこで」「なぜ」と尋ねる
- 何かが動作し続けようとしているのか、何をしているのか。
- なぜそのような動作になっているのか。
- どこでリソースが消費されているのか。出力はどこへ向かっているのか。
最後の修正
動作しているコンピュータシステムには、外部からの作用が働くまでは動作し続けようとする傾向がある。そのため、システムに生じた直近の変化は、問題を特定する上で効率的な出発点になります。
プロダクションログからシステムの振る舞いの変化をみることは、モニタリングダッシュボードの構築に役立ちます。
まとめ
- 検証の理想は、モニタリングシステムでメトリクスを読み取ること。
- 種々の検証方法を用いて、検証する。
参考文献
- Betsy Seyerほか SRE サイトリライアビリティエンジニアリング オライリー 143-148