アプリケーションの監視

なぜアプリケーションを監視するのか?

アプリケーションは高頻度で、変更修正を繰り返しながら開発するので監視を行い、透明性を維持することは必須。

どう監視するか?

  • 機能に対するメトリクスを収集する
    • その機能の処理時間(レイテンシ)、処理成功失敗回数などを計測する。
    • 例えばログインの成功失敗回数や処理時間の計測を行う。
      • 処理時間に対して、関数実行時から終了時までの時間を計測して、それをメトリックス化するとかかな。
  • アプリケーション自体が動作しているか?
    • health check patternを用いて特定のエンドポイントに対してgetリクエストを投げる。外形監視でもあり死活監視でもある 
  • ログを収集すること
    • ログで取れる内容はメトリックスにも置き換えられる。なぜログを取るか??知りたいデータが構造化されているから
    • ログはなんでもかんでも取らない。ディスクを圧迫するし、データ転送量も増大するので。リソース消費するから。
  • マイクロサービスでは監視の複雑性が増す
    • マイクロサービスではどこからリクエストが始まり、どこへ到達し、何が問題になる可能性があるかが分からなくなる。というかログの解析が難しくなる。
    • 分散トレーシング
      • リクエストに対してIdを発行することで処理の順番を追跡することができる
      • awsだとx-rayが当該のサービスにあたる。

APMとは

  • アプリケーションパフォーマンス管理の略
  • APMを活用することで、サービスのトランザクションレベルのレイテンシースループットに関するパフォーマンスを可視化することができて、アプリ、DB間のトレーシングもすることができる。
  • new relicの場合だと、1つの機能が遅延してましたとなったら、それをメソッドレベルで特定することができる

監視からobservability

  • システムを観測可能、つまり「いつ、何が、どこで起こっているのかを観測可能に保つ」考え方
  • クラウドネイティブ技術の1つ
  • kubernetesを活用した、マイクロサービスではservice, podのトレースの複雑さ、 nodeに分散されたpodをこれらを観察することは複雑性が増す。
  • 本質はユーザーエクスペリエンスの低下や障害が起きた際に迅速に対応するために必要。

www.youtube.com

まとめ

アプリケーションのメトリックス、ログ監視をすることはアプリケーションのパフォーマンスを把握しトラブルシューティングに有用である。 observabilityに関しての勉強を進めていく