Cloud Firestore(ベータ版)の発表: Firebase と Google Cloud Platform から新しいスケーラブルで、フレキシブルなデータベースを利用できるようになりました。詳しくは、Cloud Firestore のドキュメントをご覧ください。

データベース パフォーマンスのモニタリング

Firebase Realtime Database のパフォーマンスをモニタリングし、アプリの潜在的な問題を発見するには、いくつかの方法があります。アプリの発着信の帯域幅と負荷を調べて、課金の結果を予想することもできます。さらに、何か問題があると思われる場合は、データベースのオペレーションを明確に把握することがトラブルシューティングに役立ちます。

Realtime Database モニタリング ツールを使用する

Realtime Database のパフォーマンスに関するデータを収集するには、必要な情報の粒度に応じていくつかの異なるツールを使用できます。

Realtime Database プロファイラ ツールを使用する

Realtime Database プロファイラ ツールは、データベースの読み取り / 書き込みオペレーションの概要をリアルタイムで提供します。このレポートには、インデックス付けされていないクエリに加えて、各オペレーションの速度とペイロード サイズに関する情報が含まれています。ただし、接続オーバーヘッドに関する履歴情報や統計情報は含まれていないため、料金の見積もりには使用しないでください

プロファイラ ツールの使用について詳しくは、データベースのプロファイルを作成するをご覧ください。

Firebase コンソールを使用する

Firebase コンソールの [使用状況] タブには、データベースへの同時接続数、保存中のデータの量、送信帯域幅(プロトコルと暗号化のオーバーヘッドを含む)、データベースの負荷が 1 分間隔で表示されます。[使用状況] タブでは、データベースの全体的なパフォーマンスをより正確に把握できますが、パフォーマンスや課金に関する潜在的な問題のトラブルシューティングを行うのに十分なレベルでドリルダウンできない場合があります。

Firebase コンソールの [使用状況] に表示される統計情報については、使用料金を見積もるをご覧ください。

Stackdriver Monitoring を使用する

Google Cloud Platform の Stackdriver Monitoring では、Metrics Explorer を使用して個別のパフォーマンス指標を表示したり、各種のパフォーマンス指標の組み合わせを時系列で表示するグラフを含むさまざまなダッシュボードを作成したりできます。Realtime Database を Stackdriver Monitoring と統合すると、情報の粒度が最も細かくなります。

Stackdriver Monitoring の使用を開始するには、Google Compute Engine 用のクイックスタートの手順に従ってください。

Stackdriver Monitoring の設定が完了したら、Metrics Explorer を使用するか、ダッシュボードとグラフを作成して、データベースのパフォーマンスをモニタリングします。

Stackdriver Monitoring で利用できる Realtime Database のパフォーマンス指標の全一覧は、GCP の指標の一覧に含まれています。特定の指標を使用して課金やパフォーマンスの問題を発見するためのヒントについては、以降のセクションをご覧ください。

使用料金をモニタリングする

Firebase コンソールの [使用状況] タブと Stackdriver Monitoring で利用できる指標を使用して、Realtime Database の使用料金を見積もることができます。ただし、Firebase コンソールと Stackdriver で利用できる使用統計情報は、あくまで推定値です。課金について詳しくは、Realtime Database の課金についてをご覧ください。

Stackdriver Monitoring を使用して使用料金をモニタリングするには、次の指標を追跡します。

  • network/sent_payload_bytes_count: この指標は、データベース オペレーション(取得、クエリ、書き込み、リアルタイムのリスナー更新、ブロードキャストなど)によってリクエストされたデータのサイズを反映しています。接続オーバーヘッド(プロトコルまたは暗号化)は含まれません。sent_payload_bytes_count は、送信帯域幅のコストの対象になりますが、料金全体を考慮したものではありません。これは、リクエストに応じてデータベースから送信されたデータの推定値ですが、実際に送信されたデータではなく、リクエストされたデータのペイロード サイズを測定するため、必ずしも正確ではありません。
  • network/sent_payload_and_protocol_bytes_count: この指標は、前述のペイロード データと、接続に必要なプロトコル オーバーヘッド(HTTP ヘッダー、WebSocket フレーム、Firebase リアルタイム プロトコル フレームなど)の両方のサイズを反映しています。安全な接続の暗号化コストは考慮されていません。
  • network/sent_bytes_count: この指標は、データベースからの読み取りで送信されたデータの合計サイズの推定値を反映しています。これには、実際にクライアントに送信されたペイロード データに加えて、接続コストを発生させるプロトコルと暗号化のオーバーヘッドも含まれます。これは、Realtime Database の課金対象となる送信帯域幅の合計を最も正確に反映しています。

  • storage/total_bytes: この指標は、データベースに保存しているデータの量をモニタリングするために使用されます。Realtime Database に保存したデータは、料金の計算対象になります。

有用な知見と概要を得るには、ダッシュボードのグラフに表示する指標を組み合わせます。たとえば、次のような組み合わせが考えられます。

  • 送信データ: network/sent_bytes_countnetwork/sent_payload_and_protocol_bytes_countnetwork/sent_payload_bytes_count の各指標を使用して、予想外の請求額につながるプロトコルまたは暗号化のオーバーヘッドに関する潜在的な問題を発見できます。リクエストされたデータ ペイロードのサイズと接続オーバーヘッドを反映する他の指標が大きく異なる場合は、タイムアウトや頻繁な接続につながる問題をトラブルシューティングする必要があります。TLS セッション チケットを使用していない場合は、それらを実装することで、再開された接続の SSL 接続オーバーヘッドを削減できる可能性があります。
  • オペレーション: io/database_load 指標を使用して、各オペレーション タイプで使用されているデータベースの負荷の総量を確認できます。io/database_load をオペレーション タイプでグループ化し、タイプごとにトラブルシューティングを行うようにしてください。
  • ストレージ: storage/limitstorage/total_bytes を使用して、ストレージの使用率を Realtime Database のストレージ制限と関連させながらモニタリングできます。

Stackdriver Monitoring で利用できる Realtime Database の指標の全一覧をご覧ください。

パフォーマンスをモニタリングする

稼働時間やレイテンシなどのパフォーマンスに関する問題が発生した場合は、Stackdriver を使用して以下の指標をモニタリングすることができます。

  • io/database_load: この指標を使用して、利用可能なデータベース帯域幅のどの程度がリクエストの処理に使用されているかを時系列でモニタリングできます。データベースの負荷が利用可能な帯域幅の総量に近づくと、パフォーマンスの問題が発生する可能性があります。負荷が最も高いオペレーションのタイプを確認し、それに応じてトラブルシューティングを行うこともできます。1 分を超えるオペレーションでは、100% を超える負荷が報告される場合があります。これは、数分にわたって使用された帯域幅の合計が、オペレーションが完了した後の 1 分間のレポート間隔にまとめられた場合に発生します。
  • network/disabled_for_overages: この指標は、Realtime Database が帯域幅またはネットワークの制限を超えたときに発生した機能停止を反映しています。
  • storage/disabled_for_overages: この指標は、Realtime Database がストレージ制限を超えたときに発生した機能停止を反映しています。

有用な知見と概要を得るには、ダッシュボードのグラフに表示する指標を組み合わせます。たとえば、次のような組み合わせが考えられます。

  • オペレーション: io/database_load 指標を使用して、各オペレーション タイプで使用されているデータベースの負荷の総量を確認できます。io/database_load をオペレーション タイプでグループ化し、タイプごとにトラブルシューティングを行うようにしてください。
  • ストレージ: storage/limitstorage/total_bytes を使用して、ストレージの使用率を Realtime Database のストレージ制限と関連させながらモニタリングできます。また、storage/disabled_for_overages を追加して、ストレージ制限の超過によってアプリのダウンタイムが発生したかどうかを確認することもできます。
  • SSL オーバーヘッド: network/https_requests_count を使用して、データベースが受信した SSL 接続リクエストの数をモニタリングし、reused_ssl_session フィルタを使用して既存の SSL セッション チケットを再利用したリクエストを割り出すことができます。これを network/sent_bytes_countnetwork/sent_payload_and_protocol_bytes_count に照らして測定し、アプリが SSL セッション チケットを効率的に使用しているかどうかをモニタリングすることができます。

Stackdriver Monitoring を使用してアラートを設定し、Realtime Database の指標に基づいて通知を受け取ることもできます。たとえば、io/database_load が特定のしきい値に近づいている場合に通知を受け取ることができます。

Stackdriver Monitoring で利用できる Realtime Database の指標の全一覧をご覧ください。

データベースの負荷の種類

io/database_load 指標は、負荷をもたらしたオペレーション タイプのラベルも示します。測定される可能性のあるオペレーション タイプは次のとおりです。

  • admin: ルールの設定やプロジェクト メタデータの読み込みなどの管理オペレーションです。
  • auth: サービス アカウントからの認証または単一アカウントの Firebase Authentication を確認します。
  • client_management: 同時接続の追加や削除を処理します。これには、削除時の切断オペレーションも含まれます。
  • get_shallow: shallow=true を設定して REST GET からデータを取得します。
  • get: REST GET オペレーションを処理します。
  • listen: 接続されたクライアントから on オペレーションおよび once オペレーションの初期データを取得します。
  • on_disconnect: クライアントからの切断オペレーション時に登録します。
  • put: クライアントからの set オペレーションまたは REST PUT オペレーションを処理します。
  • transaction: 条件付き REST リクエストからのトランザクションまたはクライアントからの transaction オペレーションを実行します。
  • update: update オペレーションまたは REST PATCH リクエストを処理します。

フィードバックを送信...

Firebase Realtime Database
ご不明な点がありましたら、Google のサポートページをご覧ください。