【Sentry Flutter SDK 10.0】ストリーミングトレースとより正確なクラッシュフリー率

Article by: (読了時間:4分)

 

 

Sentry Flutter SDK 10.0では、ストリーミングトレースがデフォルトになり、未処理のFlutterエラーがRelease Healthに与える影響が変わりました。アプリが動作し続けるエラーではセッションがクラッシュ扱いにならなくなったため、クラッシュフリー率が実際のアプリクラッシュをより正確に反映するようになります。

このリリースではほかにも、AndroidとiOSでのアプリ起動専用のトレース、ログとメトリクスのセットアップの簡素化、Dioのネットワークエラーのキャプチャ範囲の拡大、ReplayとスクリーンショットでのFlutterの機密コンテンツ指定への対応が含まれています。

 

ストリーミングトレースがデフォルトに

これまでSDKは、トランザクションが終了するのを待ってからスパンを送信していました。v10では、スパンが完了するたびにバッチで送信します。自動インストルメンテーションでは、このストリーミングモデルがデフォルトで使われます。

たとえば、画面でカタログの読み込みは終わったものの、レコメンドのリクエストがまだ実行中という場合でも、完了したカタログのスパンはトランザクション全体の終了を待たずにSentryに届きます。

カスタムインストルメンテーションでは、計測したい処理を Sentry.startSpan でラップします。

スパンはコールバックの完了時に終了し、SDKが送信キューに追加します。

トレーシングには引き続き tracesSampleRate または tracesSampler の設定が必要です。アップグレードの際は、カスタムのトランザクションや子スパンの呼び出しをストリーミングスパンAPIに移行し、トランザクションフィルターとサンプリングのコールバックを見直してください。

移行に時間が必要な場合は、初期化時に options.traceLifecycle = SentryTraceLifecycle.static を設定すれば、トランザクションモードを維持できます。

 

より正確なクラッシュフリー率

未処理のFlutterエラーが、必ずしもアプリをクラッシュさせるわけではありません。Flutterはエラーを報告したうえで動作を続けられますが、以前のSDKではセッションがクラッシュ扱いになり、クラッシュフリー率が下がっていました。

v10でもこうしたエラーはSentryにキャプチャされますが、セッションはクラッシュ扱いにならず、実行中のままになります。アプリがクラッシュせずにセッションが終了した場合は unhandled、その後アプリがクラッシュした場合は crashed に分類されます。

 

アプリ起動に専用のトレース

AndroidとiOSでは、v10から起動が独立した app.start ルートとして記録され、独自のサンプリング判定が行われます。以前は最初のナビゲーショントランザクションに含まれていました。

起動の内訳には、ルートウィジェットのアタッチ、Flutterのフレームビルド、最初のフレームのラスタライズが含まれるため、起動のどの部分に時間がかかっているかを把握しやすくなります。

また、最初の画面に必要なデータの読み込みなど、最初のフレーム以降の処理まで計測範囲を広げることもできます。最初のフレームが描画される前に SentryFlutter.extendAppStart() を呼び出し、その処理が終わったら SentryFlutter.finishExtendedAppStart() を呼び出してください。

アップグレード時には、起動関連のダッシュボードとカスタムサンプリングルールを見直してください。ui.load ルートだけを受け入れるサンプラーでは、新しいapp-startトレースが除外される可能性があります。

 

ログとメトリクスのセットアップを簡素化

v10では、Sentry.logger や Sentry.metrics を呼び出すだけで、個別の有効化フラグなしにテレメトリが送信されます。enableLogs と enableMetrics オプションは削除されました。ログとメトリクスのフィルタリングは、引き続き beforeSendLog と beforeSendMetric で行うことができます。

sentry_logging を使っている場合、LoggingIntegration はデフォルトで Level.INFO 以上のレコードをSentryのログとして転送するようになりました。

インテグレーションでブレッドクラムとエラーイベントだけを作成したい場合は、minSentryLogLevel を Level.OFF に設定してください。

 

HTTPレスポンスのないネットワーク障害をキャプチャ

失敗したリクエストが、必ずステータスコードを返すとは限りません。DNSの名前解決に失敗したり、サーバーが応答する前に接続がタイムアウトしたりすることもあります。

v10の sentry_dio は、失敗したリクエストのキャプチャが有効で、かつリクエストが設定済みのターゲットに一致する場合に、こうした障害をキャプチャします。ステータスコードのない、呼び出し側によるキャンセルは対象外です。

HTTPインテグレーションでは、難読化されたビルドでも DioException などの安定した例外型が使われるようになりました。Dioのイベントのレスポンスコンテキストには、レスポンスのステータスとメタデータが含まれます。

アップグレード時には、既存のフィルターとグルーピングルールを見直してください。Dioは失敗したリクエストのターゲットを解決済みの完全なURLと照合するようになったため、相対パス向けに書かれたパターンは更新が必要になる場合があります。

 

Flutterの機密コンテンツ指定をキャプチャに適用

アプリでFlutterの SensitiveContent ウィジェットを使っている場合、sensitive または autoSensitive が指定されたウィジェットは、Session Replayとスクリーンショットでデフォルトでマスクされるようになりました。

 

v10へのアップグレード

バージョン10には、Dart 3.12、Flutter 3.44、Android API 26、iOS 15、macOS 12以上が必要です。iOSとmacOSでは、Sentry FlutterプラグインがネイティブSDKをSwift Package Manager経由でインストールするようになりました。

sentry_flutter と、直接宣言しているSentryインテグレーションパッケージを、対応するv10リリースに更新してください。

アップグレード前に、以下の変更点も確認してください。

  • Profilingは削除されました。
  • iOSとmacOSでのネイティブの失敗リクエストのキャプチャは、オプトインになりました。
  • WindowsとLinuxでは、Breakpadがデフォルトのネイティブクラッシュバックエンドになりました。クラッシュレポートはアプリケーションの再起動後にアップロードされます。

 

v9からv10への移行ガイドでは、これらの変更点を解説しているほか、アプリに該当する手順を確認できるインタラクティブなチェックリストも用意されています。問題が発生した場合は、GitHubでIssueを作成してください。

Sentryを初めて使う方は、無料アカウントを作成して始めましょう。

 

 

Original Page: Sentry’s Flutter SDK 10.0: Streaming Traces and More Accurate Crash-Free Rates

 


IchizokuはSentryと提携し、日本でSentry製品の導入支援、テクニカルサポート、ベストプラクティスの共有を行なっています。Ichizokuが提供するSentryの日本語サイトについてはこちらをご覧ください。またご導入についての相談は「お問い合わせ」からお気軽にお問い合わせください。

日本語ブログホームへ戻る

 

シェアする

Recent Posts

;