Performance Monitoring についてのトラブルシューティングとよくある質問


このページでは、Performance Monitoring の使用を開始する際や、Performance Monitoring の機能とツールを使用する際のトラブルシューティングのヒントを紹介します。

トラブルシューティングのための最初の確認

トラブルシューティングを行う前に、次の 2 つの点を確認することをおすすめします。

1. パフォーマンス イベントのログ メッセージを確認する

ログ メッセージを確認して、Performance Monitoring SDK がパフォーマンス イベントをキャプチャしていることを確認します。

  1. ビルド時に Performance Monitoring のデバッグ ロギングを有効にするには、次のようにアプリの AndroidManifest.xml ファイルに <meta-data> 要素を追加します。

    <application>
        <meta-data
          android:name="firebase_performance_logcat_enabled"
          android:value="true" />
    </application>
  2. ログ メッセージにエラー メッセージがないか確認します。

  3. Performance Monitoring は、ログ メッセージに FirebasePerformance のタグを付けます。logcat フィルタリングを使用すると、次のコマンドを実行して、所要時間トレースと HTTP/S ネットワーク リクエストのロギングを表示できます。

    adb logcat -s FirebasePerformance
  4. Performance Monitoring がパフォーマンス イベントをロギングしていることを示す次の種類のログを確認します。

    • Logging trace metric: TRACE_NAME, FIREBASE_PERFORMANCE_CONSOLE_URL
    • Logging network request trace: URL
  5. URL をクリックして Firebase コンソールでデータを表示します。ダッシュボードでデータが更新されるまでに少し時間がかかることがあります。

アプリがパフォーマンス イベントをロギングしていない場合は、トラブルシューティングのヒントをご覧ください。

2. Firebase ステータス ダッシュボードを確認する

Firebase または Performance Monitoring に既知の停止が発生していないかどうか、Firebase ステータス ダッシュボードを確認します。

Performance Monitoring を使ってみる

Performance MonitoringiOS+ | Android | Web)、の使用を開始するうえで、Firebase が SDK を検出したり、Firebase コンソールに最初のパフォーマンス データを表示したりする際に問題が発生した場合は、次のトラブルシューティングのヒントを参考にしてください。

Firebase は、アプリからイベント情報(アプリの操作など)を受け取るときに、アプリに Performance Monitoring SDK が正常に追加されたかどうかを検出できます。通常、アプリを起動してから 10 分以内に、Firebase コンソールのパフォーマンス ダッシュボードに「SDK を検出しました」というメッセージが表示されます。30 分以内に、最初の処理済みのデータがダッシュボードに表示されます。

最新バージョンの SDK をアプリに追加してから 10 分以上経過しても変化が現れない場合は、ログ メッセージを確認して、Performance Monitoring がイベントをロギングしているか確認します。以下の該当するトラブルシューティングの手順を試して、SDK 検出メッセージの遅延についてトラブルシューティングを行います。

  1. Performance Monitoring Android SDK 19.1.0 以降(または Firebase BoM 26.3.0 以降)を使用していることを確認します。リリースノートをご覧ください。

  2. ローカルで開発している場合は、データ収集用のイベントをさらに生成してみてください。

    1. アプリをバックグラウンドとフォアグラウンドの間で数回切り替えたり、画面間を移動してアプリを操作したり、ネットワーク リクエストをトリガーしたりして、イベントを生成します。
  3. Firebase 構成ファイルgoogle-services.json)がアプリに正しく追加され、ファイルを変更していないことを確認します。具体的には、次の点を確認します。

    • 構成ファイル名に (2) などの文字が追加されていないこと。

    • 構成ファイルがアプリのモジュール(アプリレベル)ディレクトリにあること。

    • 構成ファイルにリストされている Firebase Android アプリ ID(mobilesdk_app_id)がアプリに適していること。 プロジェクト設定のアプリカードで Firebase アプリ ID を確認します。

    アプリの構成ファイルに問題があると思われる場合は、次の手順をお試しください。

    1. 現在アプリに設定されている構成ファイルを削除します。

    2. こちらの手順に沿って新しい構成ファイルをダウンロードし、Android アプリに追加します。

  4. SDK がイベントをロギングしていて、すべてが正しく設定されているにもかかわらず、10 分経過しても SDK 検出メッセージや処理済みデータが表示されない場合は、Firebase サポートにお問い合わせください。

  1. 以下の手順に沿って、Performance Monitoring Gradle プラグインの設定を確認します。

    1. 正しくプラグインを追加していることを確認します。具体的には、次の点を確認します。

      • プラグイン(apply plugin: 'com.google.firebase.firebase-perf')をモジュール(アプリレベル)build.gradle ファイルに追加していること。
      • プラグインのクラスパス依存関係(classpath 'com.google.firebase:perf-plugin:1.4.2')をプロジェクト レベルbuild.gradle ファイルに含めていること。

    2. 次のフラグのいずれかによってプラグインが無効になっていないことを確認します。

      • モジュール(アプリレベル)の build.gradle ファイル内の instrumentationEnabled
      • gradle.properties ファイル内の firebasePerformanceInstrumentationEnabled

  2. AndroidManifest.xml ファイル内の次のフラグのいずれかによって Performance Monitoring SDK が無効になっていないことを確認します。

    • firebase_performance_collection_enabled
    • firebase_performance_collection_deactivated
  3. Performance Monitoring がランタイムで無効になっていないことを確認します。

  4. アプリで無効になっているものが見つからない場合は、Firebase サポートにお問い合わせください。

Performance Monitoring がパフォーマンス イベントデータを処理した後に、パフォーマンス ダッシュボードにそのデータが表示されます。

「SDK を検出しました」というメッセージが表示されてから 24 時間以上経過してもデータが表示されない場合は、既知の停止が発生しているかどうか Firebase ステータス ダッシュボードを確認します。停止が発生していない場合は、Firebase サポートにお問い合わせください。

一般的なトラブルシューティング

SDK を正常に追加し、アプリで Performance Monitoring を使用している場合、Performance Monitoring の機能とツールに関する一般的な問題には次のトラブルシューティングのヒントが役立ちます。

パフォーマンス イベントのログ メッセージが表示されない場合は、次のトラブルシューティング手順をお試しください。

  1. 以下の手順に沿って、Performance Monitoring Gradle プラグインの設定を確認します。

    1. 正しくプラグインを追加していることを確認します。具体的には、次の点を確認します。

      • プラグイン(apply plugin: 'com.google.firebase.firebase-perf')をモジュール(アプリレベル)build.gradle ファイルに追加していること。
      • プラグインのクラスパス依存関係(classpath 'com.google.firebase:perf-plugin:1.4.2')をプロジェクト レベルbuild.gradle ファイルに含めていること。

    2. 次のフラグのいずれかによってプラグインが無効になっていないことを確認します。

      • モジュール(アプリレベル)の build.gradle ファイル内の instrumentationEnabled
      • gradle.properties ファイル内の firebasePerformanceInstrumentationEnabled

  2. AndroidManifest.xml ファイル内の次のフラグのいずれかによって Performance Monitoring SDK が無効になっていないことを確認します。

    • firebase_performance_collection_enabled
    • firebase_performance_collection_deactivated
  3. Performance Monitoring がランタイムで無効になっていないことを確認します。

  4. アプリで無効になっているものが見つからない場合は、Firebase サポートにお問い合わせください。

画面レンダリング トレースのデータが表示されない場合は、次のトラブルシューティング手順をお試しください。

  1. Android SDK の最新バージョン(v21.0.4)を使用していることを確認します。画面レンダリング トレースは、v15.2.0 以降でのみ使用できます。

  2. 画面のハードウェア アクセラレーションを手動で無効にしていないことを確認します。

  3. DexGuard または Jack を使用していないことを確認します。Performance Monitoring にはこれらのツールチェーンとの互換性がありません。

    • DexGuard は、アプリ起動、フォアグラウンド アプリ、バックグラウンド アプリのトレースの自動収集を無効にします。ただし、アプリで DexGuard を使用している場合、カスタム コード トレースは正常に動作します。

    • Jack は非推奨のため、通常はアプリで使用しないでください。

自動収集されるトレースのパフォーマンス データは表示され、カスタムコード トレースのデータは表示されませんか。次のトラブルシューティング手順をお試しください。

  1. Trace API を使用してカスタム コード トレースをインストルメント化した場合は、トレースの設定を確認します。特に次の点に注意してください。

    • カスタム コード トレースとカスタム指標の名前には制限があります。先頭または末尾が空白文字でなく、先頭がアンダースコア(_)でない 32 文字以下の名前を指定する必要があります。
    • すべてのトレースを開始して停止する必要があります。開始されていないトレース、停止されていないトレース、開始前に停止されたトレースはログに記録されません。

  2. @AddTrace 表記を使用してカスタム コード トレースをインストルメント化した場合は、Performance Monitoring Gradle プラグインの設定を確認します。

    1. 正しくプラグインを追加していることを確認します。具体的には、次の点を確認します。

      • プラグイン(apply plugin: 'com.google.firebase.firebase-perf')をモジュール(アプリレベル)build.gradle ファイルに追加していること。
      • プラグインのクラスパス依存関係(classpath 'com.google.firebase:perf-plugin:1.4.2')をプロジェクト レベルbuild.gradle ファイルに含めていること。

    2. 次のフラグのいずれかによってプラグインが無効になっていないことを確認します。

      • モジュール(アプリレベル)の build.gradle ファイル内の instrumentationEnabled
      • gradle.properties ファイル内の firebasePerformanceInstrumentationEnabled

  3. ログ メッセージを確認して、Performance Monitoring が、想定されるカスタム コード トレースをロギングしていることを確かめます。

  4. Performance Monitoring がイベントをロギングしているが、24 時間経過してもデータが表示されない場合は、Firebase サポートにお問い合わせください。

ネットワーク リクエスト データが表示されない場合は、次のトラブルシューティング手順をお試しください。

  1. Android アプリの場合、Performance Monitoring Gradle プラグインにより、HTTP/S ネットワーク リクエストを自動モニタリングする計測が有効になります。以下をご確認ください。

    1. 正しくプラグインを追加していることを確認します。具体的には、次の点を確認します。

      • プラグイン(apply plugin: 'com.google.firebase.firebase-perf')をモジュール(アプリレベル)build.gradle ファイルに追加していること。
      • プラグインのクラスパス依存関係(classpath 'com.google.firebase:perf-plugin:1.4.2')をプロジェクト レベルbuild.gradle ファイルに含めていること。

    2. 次のフラグのいずれかによってプラグインが無効になっていないことを確認します。

      • モジュール(アプリレベル)の build.gradle ファイル内の instrumentationEnabled
      • gradle.properties ファイル内の firebasePerformanceInstrumentationEnabled

  2. ネットワーク ライブラリの非互換性を確認します。Performance Monitoring は、ネットワーキング ライブラリ(OkHttp 3.x.x、Java の URLConnection、Apache HttpClient)を使用するネットワーク リクエストの指標を自動的に収集します。

    ネットワーク リクエストにはカスタム モニタリングを追加できます。

  3. 次の点に注意してください。

    • コードとそのコードで使用しているネットワーキング ライブラリの動作によっては、Performance Monitoring で報告されるのが、完了したネットワーク リクエストだけになることがあります。この場合、開いたままの HTTP/S 接続が報告されていない可能性があります。

    • Performance Monitoring は DexGuard および Jack と互換性がありません。

      • DexGuard は、HTTP/S ネットワーク リクエストのモニタリングを無効にします。
      • Jack は非推奨のため、通常はアプリで使用しないでください。
    • Performance Monitoring は、無効な Content-Type ヘッダーが指定されたネットワーク リクエストを報告しません。Content-Type ヘッダーのないネットワーク リクエストは受け入れられます。

詳細については、URL パターンに基づいて Performance Monitoring がネットワーク リクエスト データを集計する方法をご覧ください。

カスタム URL パターンもお試しください。

よくある質問

[問い合わせが多い問題] は、[最近のアラート] に置き換えられました。これは、設定したしきい値を超えると自動的に通知されるアラートを、最近導入したことを反映したものです。「問題」のサポートは終了し、アラートに置き換えられました。

パフォーマンス カードの上部にあるアプリセレクタでは、[最近のアラート] でアラート エントリがフィルタされます。選択したアプリについて、直近 3 件のアラートのみが表示されます。

アラートについて詳しくは、パフォーマンスの問題に関するアラートを設定するをご覧ください。

Performance Monitoring では、定義したしきい値を超える指標に対するアラートがサポートされています。パフォーマンス指標に対するこれらの構成可能なしきい値との混同を回避するため、問題に対してしきい値を構成する機能は削除されています。

詳細ページと指標ページが一新され、新たに再設計され、一元化されたユーザー インターフェース(UI)に置き換えられました。これにより、問題のトラブルシューティングが向上します。この新しいトラブルシューティングの UI は、詳細や指標と同じコア機能を提供します。トラブルシューティングの詳細については、特定のトレースのデータをさらに表示するをご覧ください。

Performance Monitoring は、アプリのユーザー デバイスからパフォーマンス データを収集します。多くのユーザーがアプリを利用している場合や、アプリが大量のパフォーマンス アクティビティを生成する場合は、処理するイベントの数を減らすために、Performance Monitoring はデバイスのサブセットのみに限定してデータを収集することがあります。このように制限しても十分なデータが得られるため、イベントが少なくなったとしても、指標の値はユーザーのアプリ エクスペリエンスを適切に表しています。

収集するデータの量を管理するために、Performance Monitoring は次のサンプリング オプションを使用します。

  • デバイス上のレート制限: デバイスが送信するトレースが急増することがないように、デバイスから送信されるコードトレースとネットワーク リクエスト トレースの数を 10 分間あたり 300 イベントに制限しています。このアプローチにより、大量のパフォーマンス データを送信する可能性があるループ型のインストルメンテーションからデバイスを保護し、1 つのデバイスによってパフォーマンスの測定値が歪められるのを防ぎます。

  • 動的サンプリング: Performance Monitoring は、1 つのアプリで、すべてのアプリユーザーを通じてコードトレースとネットワーク リクエスト トレースについてそれぞれ制限された数のデータを毎日収集します。(Firebase Remote Config を使用して)デバイスに関する動的サンプリング レートを取得し、ランダムなデバイスでトレースをキャプチャして送信する必要があるかどうかを判断します。サンプリングの対象として選択されていないデバイスはイベントを送信しません。動的サンプリング レートはアプリに固有であり、収集されるデータの全体量が制限を下回るように調整されます。

    BigQuery の統合を有効にしたプロジェクトでは、ネットワーク リクエスト トレースの数の上限が高くなります。

    ユーザー セッションでは、ユーザーのデバイスからさらに多くの詳細なデータを送信します。そのため、データをキャプチャして送信するために必要となるリソースが増えます。ユーザー セッションの影響を最小限に抑えるため、Performance Monitoring はセッション数を制限する場合もあります。

  • サーバーサイドのレート制限: アプリでサンプリングの制限を超えないようにするため、Performance Monitoring はサーバーサイドのサンプリングを使用して、デバイスから受信した一部のイベントを破棄する場合があります。この制限によって指標の有効性が変化することはありませんが、次のような小規模なパターンの変化が生じることがあります。

    • トレースの数とコードが実行された回数が異なる場合があります。
    • コード内で密接に結合している複数のトレースのサンプル数が異なる場合があります。

[問題] タブに代わってアラートが導入されました。アラートは、設定したしきい値を超えると自動的に通知されます。これにより、しきい値のステータスを特定するために手動で Firebase コンソールを確認する必要がなくなりました。アラートについて詳しくは、パフォーマンスの問題に関するアラートを設定するをご覧ください。

Firebase コンソールの Performance Monitoring セクションが再設計され、主要な指標とすべてのトレースがまとめて [ダッシュボード] タブに表示されるようになりました。今回の再設計の一環として、[デバイス] ページと [ネットワーク] ページを削除しました。

[ダッシュボード] タブの下部にあるトレース テーブルには、[デバイス] タブと [ネットワーク] タブに表示されていた同じ情報がすべて含まれていますが、特定の指標の変化率でトレースを並べ替える機能など、一部の機能が追加されました。特定のトレースの指標とデータをすべて表示するには、トレース テーブル内のトレース名をクリックします。

トレースはトレース テーブルの次のサブタブに表示されます。

  • ネットワーク リクエスト トレース(すぐに使用できるものとカスタムの両方) - [ネットワーク リクエスト] サブタブ
  • カスタムコード トレース - [カスタム トレース] サブタブ
  • アプリの起動、フォアグラウンドのアプリ、バックグラウンド アプリのトレース - [カスタム トレース] サブタブ
  • 画面レンダリング トレース - [画面レンダリング] サブタブ
  • ページ読み込みトレース - [ページ読み込み] サブタブ

トレース テーブルの詳細と、指標やデータの表示については、コンソールの概要ページ(iOS+ | Android | ウェブ)をご覧ください。

レンダリングが遅いフレームとフリーズしたフレームは、想定される 60 Hz のデバイス リフレッシュ レートで計算されます。デバイスのリフレッシュ レートが 60 Hz 未満の場合は、1 秒間にレンダリングされるフレームが少なくなるため、各フレームでレンダリング時間が長くなります。レンダリング時間が長くなると、レンダリングが遅くなるフレームやフリーズするフレームが多くなるため、遅いフレームやフリーズしたフレームの報告が増えます。ただし、デバイスのリフレッシュ レートが 60 Hz を超える場合は、各フレームでレンダリング時間が短くなります。これにより、遅いフレームやフリーズしたフレームが報告される回数が少なくなります。これは、Performance Monitoring SDK の現在の制限です。

アプリのアクティビティに加えてフラグメントのパフォーマンスを表示するには、アプリが Performance Monitoring Android SDK バージョン 20.1.0 以降を使用していることを確認してください。詳細については、Performance Monitoring をアプリに追加するをご覧ください。

フラグメントとアクティビティの各トレースは、アプリで定義されているクラス名に基づいています。各画面トレースには接頭辞 st が付けられていて、その後にクラス名が続きます。Firebase コンソールでは、この接頭辞は削除されます。詳しくは、画面レンダリングのパフォーマンス データについて学ぶ(Apple アプリと Android アプリ)をご覧ください。

Performance Monitoring は、デバイスで収集されたすべてのイベントに対してイベント サンプリングを行います。このアプローチにより、ユーザー デバイスから必要な最小限のイベントを収集して、パフォーマンス指標を提供できます。

Performance Monitoring では重要な指標に関するアラートを設定できます。生成される画面レンダリング トレースに関して、遅いフレームとフリーズしたフレームの割合が設定したしきい値を超えたときに通知されるようにアラートを設定できます。

Android 向け Performance Monitoring は、バイトコードのインストルメンテーションを使用して、HTTP/S ネットワーク リクエストのモニタリングなどのすぐに使える機能を提供します。コンパイルの一環として、アプリケーションのネットワークのリクエスト パフォーマンスの測定に不可欠なコードを実装するため、アプリのすべてのクラス(依存関係を含む)を反復処理する必要があります。

ビルド時間が長くなる主な原因は次のとおりです。

  • クラスまたはファイルの数
  • 各クラスのサイズ(コードの行数)
  • マシンの構成
  • 初期ビルドと後続のビルド(後続のビルドは初期ビルドよりも通常は高速)

ビルド時間を短縮するには、コードのモジュール化を検討してください。

Performance Monitoring プラグインの v1.3.3 以降から、ライブラリ入力の増分ビルドプロセスとキャッシュ保存の大幅な改善に注力してきました。ビルド時間に関する最新の改善を利用するには、最新バージョンのplugin(v1.4.2)を使用するようにしてください

長いビルド時間を回避するには、デバッグビルドで Performance Monitoring プラグインをローカルで無効にします。ただし、製品版ビルドでは、アプリのネットワーク リクエストのパフォーマンス測定を見逃す可能性があるため、この方法はおすすめしません。

Android 向け Performance Monitoring は、バイトコードのインストルメンテーションを使用して、HTTP/S ネットワーク リクエストのモニタリングなどのすぐに使える機能を提供します。コンパイルの一環として、アプリケーションのネットワークのリクエスト パフォーマンスの測定に不可欠なコードを実装するため、アプリのすべてのクラス(依存関係を含む)を反復処理する必要があります。

Performance Monitoring プラグインとの統合後に JSR/RET are not supported with computeFrames option などのビルドエラーや、同様のエラーが発生した場合は、Performance Monitoring Gradle プラグインと互換性のないライブラリへの依存関係があることが原因になっている可能性があります。

この問題を回避するには、次の手順で互換性のないクラスまたはライブラリをインストゥルメントから除外します。

  1. Performance Monitoring Gradle プラグインを最新バージョンに更新します(v1.4.0 以降)。
  2. Android Gradle プラグインのバージョンを v7.2.0 以降に更新します。
  3. 以下のフラグをモジュール(アプリレベル)の build.gradle ファイルに追加して、互換性のないクラスやライブラリをインストルメントから除外します。
    android {
      // ...
      androidComponents {
        onVariants(selector().all(), {
            instrumentation.excludes.add("example.incompatible.library")
        })
      }
    }
    Android Gradle プラグインの Instrumentation API の exclude プロパティについて詳しくは、インストルメンテーションをご覧ください。

互換性のないライブラリが原因でビルドエラーが発生した場合は、それらが Performance Monitoring プラグインのインストルメンテーションから除外されるようにするため、GitHub で問題を報告してください。

Firebase Performance Monitoring の BigQuery 統合を有効にしている場合、データはその日の終わり(太平洋時間)から 12~24 時間後に BigQuery にエクスポートされます。

たとえば、4 月 19 日のデータは、4 月 20 日午後 12 時から深夜まで、BigQuery で使用できます(すべての日時は太平洋時間)。

ほぼリアルタイムのデータ処理と表示

Firebase Performance Monitoring が収集されたパフォーマンス データを適時処理すると、ほぼリアルタイムのデータが Firebase コンソールに表示されます。処理されたデータは、収集されて数分以内にコンソールに表示されるため、「ほぼリアルタイム」という言葉を使用しています。

ほぼリアルタイムのデータ処理を利用するには、リアルタイム対応の SDK バージョンをアプリで使用します。

リアルタイムのデータ処理に対応した Performance Monitoring SDK のバージョンをアプリで使用するだけで、ほぼリアルタイムのデータ処理を利用できます。

リアルタイム対応の SDK のバージョンは次のとおりです。

  • iOS - v7.3.0 以降
  • tvOS - v8.9.0 以降
  • Android - v19.0.10 以降(または Firebase Android BoM v26.1.0 以降)
  • ウェブ - v7.14.0 以降

常に最新バージョンの SDK を使用することをおすすめします。ただし、上述のいずれのバージョンでも、Performance Monitoring でほぼリアルタイムのデータ処理が行われます。

リアルタイムのデータ処理に対応している SDK のバージョンは次のとおりです。

  • iOS - v7.3.0 以降
  • tvOS - v8.9.0 以降
  • Android - v19.0.10 以降(または Firebase Android BoM v26.1.0 以降)
  • ウェブ - v7.14.0 以降

常に最新バージョンの SDK を使用することをおすすめします。ただし、上述のいずれのバージョンでも、Performance Monitoring でほぼリアルタイムのデータ処理が行われます。

リアルタイム対応の SDK バージョンをアプリで使用していない場合でも、Firebase コンソールにはアプリのパフォーマンス データがすべて表示されます。ただし、パフォーマンス データはデータの収集からおよそ 36 時間遅れて表示されます。

はい。アプリ インスタンスで使用している SDK バージョンに関係なく、すべてのユーザーのパフォーマンス データが表示されます。

ただし、最近(約 36 時間以内)のデータについては、リアルタイム対応の SDK バージョンを使用するアプリ インスタンスのユーザーのデータが表示されます。一方、最近ではないデータには、すべてのバージョンのアプリのパフォーマンス データが表示されます。

Firebase サポートへのお問い合わせ

Firebase サポートに連絡する場合は、必ず Firebase アプリ ID をお知らせください。Firebase アプリ ID は、 プロジェクト設定のアプリカードで確認します。