7章 アプリケーション監視
メトリクスでアプリケーションを計測
監視が非常に効果的にも関わらず、見逃されがちなことがアプリケーション自体の監視
アプリケーションはそれ自体のパフォーマンスに関する価値のある情報をたくさん持っているので、活用することによって、受動的ではなく能動的にアプリケーションのパフォーマンスを維持できるようになる
まずは、データベースクエリにかかった時間、外部ベンダのAPIが応答するのにかかった時間、1日に発生したログイン数などシンプルなものから計測する
アプリケーションを計測するのにStatsDが紹介されている
モダンな監視スタックには不可欠な存在らしい
ビルドとリリースパイプラインの監視
ビルドからリリースまでの監視は、アプリケーションやインフラのメトリクスと一緒にメタ情報(デプロイがいつ始まったか・終わったか・どのビルドがデプロイされたか・誰がデプロイしたのか)を利用することにより役に立つ
例えば、APIのエラー率にデプロイしたタイミングを重ねることにより、デプロイの影響とAPIのエラー率の関係性を明確に表せる
healthエンドポイントパターン
アプリケーションの健全性を伝えるアプリケーション内のHTTPエンドポイント
アプリケーションについての基本的な情報(デプロイされたバージョンや、依存性のステータスなど)も含む場合もある
エンドポイントの裏側には、アプリケーションの健全性と状態について、取得する独立したコードが存在している
githubのステータスページみたいなもの?
アプリケーションロギング
ちゃんとしたログ解析システムなら、ログエントリからメトリクスに変換することは簡単
1行のログエントリは、1つのメトリクスより多くの情報を保持できる
しかし、ツールが高価・成熟していないという理由で、メトリクスのほうが現在は一般的
メトリクスかログにすべきかには以下の観点で判断すると良い
- チームにとって、メトリクスで考えるほうが楽か、ログで考えることが楽か
- その問題について、メトリクスとログのどちらが効果的か
ログはネットワーク越しに送るのではなく、ディスクに書くべき
そして定期的(あるはリアルタイム)に外部にデータを送るサービスと組み合わせる
サーバレスまたはFunction-as-a-Service
総実行時間が1秒以下などの処理の関しにはStatsDを使えば良い
マイクロサービスアーキテクチャ
分散トレーシングで監視する
分散トレーシングとはマイクロサービスアーキテクチャにつきものの複雑なサービス間のやり取りを監視するための方法論とツールチェーンのこと
仕組みはシステムに入ってくるリクエストに一意なリクエストIDをタグつけする
リクエストIDはリクエストについて回り、どのサービスにアクセスしたか、各サービスでどのぐらい過ごしたのかがわかる
分散トレーシングは非常に難しく、時間のかかる監視の仕組みのため、業界内の一部だけで役に立つ