Firestore のパフォーマンス モニタリングを理解する

Cloud Monitoring は、Google Cloud プロダクトから指標、イベント、メタデータを収集します。使用状況ダッシュボードセキュリティ ルールの使用状況で報告されたデータには、Cloud Monitoring からもアクセスしてより詳細な分析ができます。Cloud Monitoring では、カスタム ダッシュボードと使用状況アラートを設定することもできます。

このドキュメントでは、指標の使用、カスタム指標ダッシュボードの学習、アラートの設定について説明します。

モニタリング対象リソース

Cloud Monitoring のモニタリング対象リソースは、仮想マシン、データベース、アプリケーションなどの論理エンティティまたは物理エンティティを表します。モニタリング対象リソースには、ダッシュボードを通じて調査、報告したり、アラートの作成に使用したりできる一意の指標セットが含まれています。各リソースには、リソースに関する追加情報を保持する Key-Value ペアである一連のリソースラベルもあります。リソースラベルは、リソースに関連付けられたすべての指標で使用できます。

Cloud Monitoring API を使用して、次のリソースで Firestore のパフォーマンスをモニタリングします。

関連情報 説明 サポートされているデータベース モード
firestore.googleapis.com/Database(推奨) projectlocation*、database_id の詳細を提供するモニタリング対象リソースタイプ。特定の名前なしで作成されたデータベースの場合、database_id ラベルは (default) になります。 Datastore モードの Firestore でサポートされていない次の指標を除く、両方のモードでサポートされるすべての指標:
  • document/delete_ops_count
  • document/read_ops_count
  • document/write_ops_count
firestore_instance Firestore プロジェクトのモニタリング対象リソースタイプ。データベースの内訳は提供されません。 Firestore ネイティブに適用
datastore_request Datastore プロジェクトのモニタリング対象リソースタイプ。データベースの内訳は提供されまん。 両方のモードに適用されます。

指標

Firestore には、Firestore ネイティブ モードと Datastore モードの 2 つのモードがあります。これらの 2 つのモードの機能の比較については、データベース モードの選択をご覧ください。

両方のモードの指標の完全なリストについては、次のリンクをご覧ください。

サービス ランタイム指標

serviceruntime 指標は、プロジェクトのトラフィックに関する概要を提供します。これらの指標は、ほとんどの Google Cloud APIs で使用できます。consumed_api モニタリング対象リソースタイプには、これらの一般的な指標が含まれています。これらの指標は 30 分ごとにサンプリングされるため、データが平滑化されます。

serviceruntime 指標の重要なリソースラベルは method です。このラベルは、呼び出された基盤となる RPC メソッドを表します。呼び出す SDK メソッドの名前は、基盤となる RPC メソッドと同じである必要はありません。その理由は、SDKが高レベルの API 抽象化を提供するためです。ただし、アプリケーションが Firestore とやり取りする方法を確認する場合は、RPC メソッドの名前に基づく指標を理解することが重要です。

特定の SDK メソッドの基盤となる RPC メソッドを知る必要がある場合は、API のドキュメントをご覧ください。

次のサービス ランタイム指標を使用して、データベースをモニタリングします。

api/request_count

この指標は、プロトコル(http、gRPC などのリクエスト プロトコル)、レスポンス コード(HTTP レスポンス コード)、response_code_class(2xx、4xx などのレスポンス コード クラス)、grpc_status_code数値 gRPC レスポンス コード)にわたる完了したリクエストの数を示します。この指標を使用して、API リクエスト全体をモニタリングし、エラー率を計算します。

2xx コードを返す api/request_count 指標。
図 1. api/request_count 指標(クリックして拡大)。

図 1 は、2xx コードを返すリクエストをサービスとメソッド別にグループ化したものです。2xx コードは、リクエストが成功したことを示す HTTP ステータス コードです。

2xx コードを返す api/request_count 指標。
図 2. 2xx コードを返す api/request_count 指標(クリックして拡大)。

図 2 は、response_code でグループ化されたコミットを示しています。この例では、HTTP 200 レスポンスのみが示されており、データベースが正常であることを示しています。

api/request_latencies

api/request_latencies 指標は、完了したすべてのリクエストのレイテンシ分布を示します。

Firestore は、Firestore Service コンポーネントの指標を記録します。レイテンシ指標には、Firestore がリクエストを受信してから、Firestore がレスポンスを送信し終えるまでの時間(ストレージ レイヤとのやり取りを含む)が含まれます。そのため、クライアントと Firestore サービス間のラウンドトリップ レイテンシ(rtt)は、これらの指標に含まれません。

レイテンシ分布を計算する api/request_latencies
図 4. レイテンシ分布を計算する api/request_latencies。
api/request_sizes と api/response_sizes

api/request_sizes 指標と api/response_sizes 指標は、それぞれペイロードのサイズ(バイト単位)に関する分析情報を提供します。これらは、大量のデータまたは範囲が広すぎるクエリを送信し、大きなペイロードを返す書き込みワークロードを理解するのに役立ちます。

api/request_sizes 指標と api/response_sizes 指標
図 5. api/request_sizes 指標と api/response_sizes 指標(クリックして拡大)。

図 5 は、RunQuery メソッドのレスポンスサイズのヒートマップです。サイズは安定していて、中央値は 50 バイト、全体では 10 ~ 100 バイトの間であることがわかります。ペイロード サイズは常に圧縮されていないバイト数で測定され、送信制御のオーバーヘッドは含まれません。

運用指標を文書化する

Firestore は、読み取り、書き込み、削除の回数を提供します。書き込み指標には、「CREATE」オペレーションと「UPDATE」オペレーションの分類が表示されます。これらの指標は CRUD オペレーションと連携しています。

次の指標を使用して、データベースの読み取りが多いか書き込みが多いか、新しいドキュメントと削除されたドキュメントの比率を確認できます。

  • document/delete_ops_count: ドキュメントの削除の成功回数。
  • document/read_ops_count: クエリまたはルックアップからドキュメントの読み取りが成功した回数。
  • document/write_ops_count: ドキュメントの書き込みの成功回数。
読み取りドキュメントと書き込みドキュメントの比率を作成する
図 6. 読み取りドキュメントと書き込みドキュメントの比率を作成します(クリックして拡大)。

図 6 は、読み取りドキュメントと書き込みドキュメントの比率を表す比率を作成する方法を示しています。この例では、読み取られるドキュメントの数は、書き込まれるドキュメントの数よりも約 6% 多くなります。

運用指標を文書化する

これらの指標は、Firestore データベースへの読み取り(ルックアップとクエリ)と書き込みのペイロード サイズのバイトの分布を示します。値はペイロードの合計サイズを表します。たとえば、クエリによって返された結果などです。これらの指標は、api/request_sizesapi/response_sizes の指標と似ていますが、主な違いはドキュメント オペレーションの指標ではサンプリングがより細かく、内訳は大まかになることです。

たとえば、ドキュメント オペレーションの指標は datastore_request モニタリング リソースを使用するため、サービスやメソッドの分類はありません。

  • entity/read_sizes: 読み取られたドキュメントのサイズの分布。
  • entity/write_sizes: 書き込まれたドキュメントのサイズの分布。

インデックス指標

インデックスの書き込みレートは、インデックスのファンアウト率を把握するために document/write_ops_count 指標と比較できます。

  • index/write_count: インデックス書き込みの数。
インデックスの書き込みレートとドキュメントの書き込みレートの比較
図 7. インデックスの書き込みレートとドキュメントの書き込みレートの比較(クリックして拡大)。

図 7 は、インデックスの書き込みレートとドキュメントの書き込みレートを比較する方法を示しています。この例では、ドキュメントの書き込みごとに約 6 つのインデックス書き込みがあります。これは、比較的小さいインデックス ファンアウトレートです。

Firebase SDK を使用してデータベースに直接接続するクライアント

モバイル SDK、ウェブ SDK、またはその両方を使用して Firestore データベースに直接接続されたクライアントのアクティビティをトラッキングするには、2 つのゲージ指標を使用します。これらの指標には、リアルタイムのスナップショット リスナーに関連する機能が含まれており、データベース内の関連する変更がすぐにクライアントにストリーミングされます。

  • network/active_connections: ある時点でのアクティブな接続数。各ウェブ クライアントまたはモバイル クライアントには 1 つの接続があります。
  • network/snapshot_listeners: 接続されているすべてのクライアントに現在登録されているスナップショット リスナーの数。クライアントごとに複数の接続が存在する場合があります。

これらの指標は、Firebase コンソールの Firestore データベースの [Usage] タブで確認できます。

Firestore に接続しているクライアントのアクティビティを追跡する指標
図 8. Firestore に接続されたクライアントのアクティビティを追跡する指標。

TTL 指標

TTL 指標は、Firestore ネイティブ モードと Datastore モードの Firestore データベースの両方で使用できます。これらの指標を使用して、適用された TTL ポリシーの効果をモニタリングします。

  • document/ttl_deletion_count: TTL サービスによって削除されたドキュメントの合計数。
TTL サービスによって削除されたドキュメントの合計数
図 9. TTL サービスによって削除されたドキュメントの合計数(クリックして拡大)。

図 9 は、1 分あたりの削除ドキュメント数を日単位で示しています。

  • document/ttl_expiration_to_deletion_delays: TTL があるドキュメントが期限切れになってから、実際に削除されるまでの経過時間。
Firestore が TTL ポリシーを使用してドキュメントを削除するまでの秒数
図 10. Firestore が TTL ポリシーを使用してドキュメントを削除するまでの秒数(クリックして拡大)。

図 10 では、この指標が、Firestore が TTL ポリシーを使用してドキュメントを削除するのにかかった時間の分布を秒単位で示していることがわかります。TTL が期限切れになったドキュメントを削除するのに 99 パーセンタイルで 0.5 秒未満かかります。これは、システムが正常に機能していることを意味します。通常、Firestore は期限切れのドキュメントを 24 時間以内に削除しますが、これは保証されるものではありません。24 時間以上かかる場合は、サポートにお問い合わせください。

次のステップ