Flutter モニタリング

Flutter モニタリングはベータ版です。

概要

Datadog Real User Monitoring (RUM) を使用すると、Flutter アプリケーションの個々のユーザーのリアルタイムパフォーマンスとユーザージャーニーを視覚化して分析できます。

RUM は、モバイル Flutter の Android および iOS アプリケーションの監視をサポートしています。

現在の Datadog SDK のバージョン

iOS SDKAndroid SDKBrowser SDK
1.11.0-beta21.12.0-alpha2

iOS

iOS の Podfile は use_frameworks! (Flutter のデフォルトでは true) で、iOS のバージョン >= 11.0 をターゲットにしている必要があります。

Android

Android では、minSdkVersion が >= 19 である必要があり、Kotlin を使用している場合は、バージョン >= 1.5.31 である必要があります。

セットアップ

UI でアプリケーションの詳細を指定

  1. Datadog アプリで、UX Monitoring > RUM Applications > New Application へ移動します。
  2. アプリケーションタイプとして Flutter を選択します。
  3. アプリケーション名を入力して一意の Datadog アプリケーション ID とクライアントトークンを生成します。
Datadog ワークフローで RUM アプリケーションを作成

データの安全性を確保するために、クライアントトークンを使用する必要があります。クライアントトークンの設定方法については、クライアントトークンのドキュメントを参照してください。

コンフィギュレーションオブジェクトの作成

以下のスニペットで、Datadog の各機能 (Logging、Tracing、RUM など) のコンフィグレーションオブジェクトを作成します。ある機能に対してコンフィギュレーションを渡さないことで、その機能は無効化されます。

// 追跡に対するユーザーの同意の判断
final trackingConsent = ...
final configuration = DdSdkConfiguration(
  clientToken: '<CLIENT_TOKEN>',
  env: '<ENV_NAME>',
  site: DatadogSite.us1,
  trackingConsent: trackingConsent,
  nativeCrashReportEnabled: true,
  loggingConfiguration: LoggingConfiguration(
    sendNetworkInfo: true,
    printLogsToConsole: true,
  ),
  tracingConfiguration: TracingConfiguration(
    sendNetworkInfo: true,
  ),
  rumConfiguration: RumConfiguration(
    applicationId: '<RUM_APPLICATION_ID>',
  )
);

ライブラリの初期化

RUM の初期化は、main.dart ファイル内の 2 つのメソッドのうちの 1 つを使用して行うことができます。

  1. エラーレポートとリソーストレースを自動的にセットアップする DatadogSdk.runApp を使用します。

    await DatadogSdk.runApp(configuration, () async {
      runApp(const MyApp());
    })
    
  2. また、手動でエラー追跡とリソース追跡を設定することもできます。DatadogSdk.runAppWidgetsFlutterBinding.ensureInitialized を呼び出すので、DatadogSdk.runApp を使用しない場合は、DatadogSdk.instance.initialize を呼び出す前にこのメソッドを呼び出す必要があります。

    runZonedGuarded(() async {
      WidgetsFlutterBinding.ensureInitialized();
      final originalOnError = FlutterError.onError;
      FlutterError.onError = (details) {
        FlutterError.presentError(details);
        DatadogSdk.instance.rum?.handleFlutterError(details);
        originalOnError?.call(details);
      };
    
      await DatadogSdk.instance.initialize(configuration);
    
      runApp(const MyApp());
    }, (e, s) {
      DatadogSdk.instance.rum?.addErrorInfo(
        e.toString(),
        RumErrorSource.source,
        stackTrace: s,
      );
    });
    

RUM ビューの追跡

Datadog Flutter Plugin は、MaterialApp 上の DatadogNavigationObserver を使用して、自動的に名前付きルートを追跡することができます。

MaterialApp(
  home: HomeScreen(),
  navigatorObservers: [
    DatadogNavigationObserver(),
  ],
);

これは名前付きルートを使用している場合、または PageRoutesettings パラメーターに名前を指定した場合に動作します。

また、DatadogRouteAwareMixin プロパティと DatadogNavigationObserverProvider プロパティを組み合わせて使用すると、RUM ビューを自動的に起動したり停止したりすることができます。DatadogRouteAwareMixin を使って、initState から didPush へとロジックを移動させます。

リソースの自動追跡

Datadog Tracking HTTP Client パッケージを使用すると、RUM ビューからリソースと HTTP 呼び出しの自動追跡を有効にすることができます。このパッケージを pubspec.yaml に追加し、初期設定に以下を追加します。

final configuration = DdSdkConfiguration(
  // 構成
  firstPartyHosts: ['example.com'],
)..enableHttpTracking()

Datadog 分散型トレーシングを有効にするには、コンフィギュレーションオブジェクトの DdSdkConfiguration.firstPartyHosts プロパティを分散型トレーシングをサポートしているドメインに設定する必要があります。

データストレージ

Android

データが Datadog にアップロードされる前に、アプリケーションのキャッシュディレクトリに平文で保存されます。このキャッシュフォルダは、Android のアプリケーションサンドボックスによって保護されており、ほとんどのデバイスで、このデータは他のアプリケーションによって読み取られることはありません。しかし、モバイルデバイスがルート化されていたり、誰かが Linux カーネルをいじったりすると、保存されているデータが読めるようになる可能性があります。

iOS

データは Datadog にアップロードされる前に、アプリケーションサンドボックスのキャッシュディレクトリ (Library/Caches) に平文で保存され、デバイスにインストールされた他のアプリからは読み取ることができません。

寄稿

プルリクエストを歓迎します。まず、課題を開いて、何を変更したいかを議論してください。

詳しくは、寄稿ガイドラインをご覧ください。

ライセンス

詳細については、Apache ライセンス、v2.0 を参照してください。

その他の参考資料