Monitoring

パフォーマンスの最適化は、通常レイテンシとスループットに関連する主要な指標を特定することから始まります。これらの指標をキャプチャして追跡するモニタリングを追加すると、アプリケーションの弱点が明らかになります。指標を使用すると、パフォーマンス指標を改善するための最適化を行うことができます。

また、多くのモニタリング ツールでは、指標のアラートを設定して、特定のしきい値に達したときに通知を受け取ることができます。たとえば、失敗したリクエストの割合が通常レベルの X% を超えた場合に通知するアラートを設定できます。モニタリング ツールを使用すると、通常のパフォーマンスを特定し、レイテンシ、エラー数、その他の主要な指標の異常な急増を特定できます。これらの指標をモニタリングする機能は、ビジネス クリティカルな期間や、新しいコードが本番環境に push された後に特に重要です。

レイテンシ指標を特定する

UI をできるだけレスポンシブに保つようにしてください。ユーザーはモバイルアプリにさらに高い基準を求めていることに注意してください。バックエンド サービスについてもレイテンシを測定して追跡する必要があります。特に、レイテンシをチェックしないと、スループットの問題につながる可能性があります。

追跡する指標として、次のようなものが挙げられます。

  • リクエストの所要時間
  • サブシステム単位(API 呼び出しなど)のリクエスト期間
  • ジョブの所要時間

スループット指標を特定する

スループットは、特定の期間に処理されたリクエストの合計数の尺度です。スループットはサブシステムのレイテンシの影響を受ける可能性があるため、スループットを向上させるにはレイテンシを最適化する必要があります。

追跡することをおすすめする指標をいくつか紹介します。

  • 秒間クエリ数
  • 1 秒あたりに転送されるデータサイズ
  • 1 秒あたりの I/O オペレーション数
  • CPU やメモリ使用量などのリソース使用率
  • 処理バックログのサイズ(Pub/Sub やスレッド数など)

平均値だけではない

パフォーマンスの測定でよくある間違いは、平均値のみを考慮することです。これは有用ですが、レイテンシの分布に関する分析情報は得られません。追跡に適した指標は、パフォーマンスのパーセンタイルです。たとえば、指標の 50、75、90、99 パーセンタイルです。

一般的に、最適化は 2 つのステップで行うことができます。まず、90 パーセンタイルのレイテンシを最適化します。次に、99 パーセンタイル(テールレイテンシとも呼ばれます)を検討します。これは、完了に時間がかかるリクエストの割合が小さいことを示します。

詳細な結果のサーバーサイド モニタリング

指標のトラッキングには、通常、サーバーサイドのプロファイリングが推奨されます。通常、サーバーサイドは計測がはるかに簡単で、より詳細なデータにアクセスでき、接続の問題による影響を受けにくくなります。

エンドツーエンドの可視性を実現するブラウザ モニタリング

Google Ads API の統合でエンドユーザーにウェブ フロントエンドを提供している場合、ブラウザ プロファイリングによりユーザー エクスペリエンスに関する追加の分析情報を取得できます。リクエストが遅いページを特定し、サーバーサイドのモニタリングと関連付けて、さらに分析できます。

また、Google アナリティクスでは、アナリティクスのページ速度レポートでページの読み込み時間をすぐにモニタリングできます。これにより、サイトのユーザー エクスペリエンスを把握するうえで役立つビューがいくつか提供されます。具体的には次のとおりです。

  • ページの読み込み時間
  • リダイレクトの読み込み時間
  • サーバーの応答時間

クラウドでのモニタリング

アプリケーションのパフォーマンス指標をキャプチャしてモニタリングするために使用できるツールは多数あります。たとえば、Google Cloud Logging を使用してパフォーマンス指標を Google Cloud プロジェクトに記録し、Google Cloud Monitoring でダッシュボードを設定して、記録された指標をモニタリングしてセグメント化できます。

Python クライアント ライブラリ用に作成されたカスタム gRPC ロギング インターセプタの例については、ロギング ガイドをご覧ください。この例では、インターセプタが logger.log_struct() を呼び出して、構造化ログデータの Python 辞書を Cloud Logging に送信します。Cloud Logging は、このデータをログエントリの jsonPayload フィールドに保存します。

logger.log_struct({
    "method": method_name,
    "elapsed_ms": elapsed_milliseconds,
    "is_fault": is_fault,
})

このデータを Google Cloud で利用できるようにすると、ログに記録されたデータに基づいて指標を構築し、Google Cloud Monitoring を通じてアプリケーションを可視化できます。ユーザー定義のログベースの指標ガイドに沿って、Google Cloud Logging に送信されたログを使用して指標を作成します。

または、Cloud Monitoring クライアント ライブラリを使用して、コードで指標を定義し、ログとは別に Monitoring に直接送信することもできます。

ログベースの指標の例

アプリケーションのエラー率を把握するために is_fault の値をモニタリングするとします。logger.log_struct() は、各 Cloud Logging ログエントリの jsonPayload の下に構造化された辞書フィールドを書き込むため、失敗したリクエスト(jsonPayload.is_fault = true など)に一致するフィルタを使用して、ErrorCount という名前のカウンタ指標を作成できます。

Cloud Logging では、ラベルを使用して、ログ内の他のデータに基づいて指標をカテゴリにグループ化できます。Cloud Logging に送信される jsonPayload.method フィールドに Method という名前の STRING ラベルを構成して、Google Ads API メソッドごとにエラー数を分類できます。

ErrorCount 指標と Method ラベルを構成すると、Cloud Monitoring で新しいグラフを作成して、Method でグループ化された ErrorCount をモニタリングできます。

アラート

Cloud Monitoring やその他のツールでは、指標によってアラートがトリガーされるタイミングと方法を指定するアラート ポリシーを構成できます。Cloud Monitoring アラートの設定手順については、ログベースの指標に関するアラートのガイドをご覧ください。