オブザーバビリティ・エンジニアリング
https://www.oreilly.co.jp/books/images/picture_large978-4-8144-0012-6.jpeg
ソフトウェアアプリケーションにオブザーバビリティを持たせるためには、次のことができないといけない
アプリケーションの内部構造を理解する
今まで見たことのない、予測できないことが起こったとしても、アプリケーションがどのようなシステム状態に陥ってるかを理解する
外部ツールを使って観測し、調査することで、内部動作とシステム状態を理解する
新たにコードを改修することなく、内部状態を理解する
コードを改修するには何が起こるかをあらかじめ知っている必要があるため
これたの条件が当てはまるかどうかを判断するためのリトマス試験紙として次の質問を自分に投げかけてみよう
任意の異常を説明する場面で、調査に行き詰まることなく、アプリケーションの内部動作について自由回答形式の質問に継続的に答えられるか?
あなたのソフトウェアを使う任意のユーザーが、任意の時間に体験していることを理解できるか?
気になるシステムレベルパフォーマンスを、任意の切り口で、トップレベルの集計ビューから、速度低下の原因となっている単一の正確なユーザーリクエストまで、素早く見られるか?
アプリケーションの予期せぬ挙動を体験した全てのユーザーに共通する属性を正確に特定するために、任意かつ適当なユーザーグループのユーザーリクエストを比較できるか?
ある1つのユーザーリクエストに疑わしい属性を見つけたとき、全てのユーザーを検索して類似のパターンを特定し、疑念を確認または除去できるか?
どのシステムユーザーがもっとも負荷を生成しているかを特定できるか?また、2番目、3番目、または100番目に負荷を発生させているユーザーを特定できるか?
これらのもっとも負荷を発生させているユーザーのうち、パフォーマンスに影響を及ぼし始めたのが最近であるユーザーのみを特定できるか?
142番目に遅いユーザーがパフォーマンス速度について文句を言っている場合、そのリクエストを分離して、その特定のユーザーにとってなぜ物事が遅いのかを正確に理解できるか?
タイムアウトが発生したとユーザーが訴えているのに、グラフでは99パーセンタイル、99.9パーセンタイル、さらに99.99パーセンタイルのリクエストが高速である場合、隠れたタイムアウトを見つけ出せるか?
上記のような質問に、いつか必要になるかもしれないと予測することなく、答えられるか?
必要なデータを収集するために事前に特定のモニターをセットアップすることなく
上記のようなアプリケーションに関する質問に、このような問題を今まで見たりデバッグしたりしたことがなくても、答えられるか?
上記のような質問に、新しい質問や別の質問さらに別の質問を繰り返し問い直しながら、問題の正しい原因にたどり着くまで、思考の流れを損なうことなく、素早く答えられるか?
上記のような質問に、そのような問題が過去一度も起こったことがない場合でも、答えられるか?
デバッグ調査の結果、新しい発見や不可解な発見、奇妙な発見があり、驚かされることが多いか?それともたいていの場合、見つけるだろうとわかっていた問題しか見つからないか?
システムの任意の障害を、どんなに複雑で、深く埋もれていたり、スタックに隠れていたりしても、素早く切り分けられるか?