ソースマッピングファイルを使用したAndroidアプリのクラッシュ解析
Instana で、Androidアプリのクラッシュの詳細を確認できます。 詳細には、モバイル・アプリケーションのすべてのアクティブ・スレッドのスタック・トレースが含まれます。 これらのスタック・トレースには、メモリー・アドレスと未加工の関数名が含まれます。 Instana を使用すると、スタックトレースを分かりやすい情報に変換できます。
Android アプリのコードが難読化されている場合、スタック・トレースを理解することは困難です。 ProGuard,、 DexGuard,、または R8 コンパイラを使用してコードを最適化および難読化する場合、 Instana を使用するとスタックトレースを復元できます。 Instana プロジェクトのファイル mapping.txt を使用して、スタックトレースを復元します。 マッピング・ファイルは、元のクラス、メソッド、およびフィールドを、スタック・トレースを読み取り可能にする難読化された名前にマップします。
スタックトレースを翻訳するには、ファイルを mapping.txt Instana にアップロードしてください。 Webの REST API を呼び出すことで、マッピングファイルをアップロードできます。 マッピングファイルのアップロードが完了すると、 Instana のUIにクラッシュに関する詳細情報が表示されます。 詳細を表示するには、 「異常終了」 タブで 「異常終了スレッド」 をクリックします。 詳しくは、 異常終了を参照してください。
マッピングファイルのアップロード
マッピング・ファイルをアップロードする前に、以下の前提条件が満たされていることを確認してください。
- API トークンが作成され、モバイルアプリの監視用に設定権限が有効化されます。 詳細については、 「 API トークン」 を参照してください。
- ソースマップは、セルフホスト型カスタムエディション( Kubernetes または Red Hat OpenShift Container Platform ) 用に保存されます。 詳細については、 「外部ストレージの設定」 を参照してください。
Instana にマッピングファイルをアップロードするには、以下の手順に従ってください:
Instana のUIで、マッピングファイルをアップロードするための設定を作成します:
Go 「 ウェブサイトとモバイルアプリ」 > 「モバイルアプリ」 へ。
モバイル・アプリをクリックします。 モバイル・アプリケーション・ダッシュボードが表示されます。
「構成」 > 「スタック・トレースの変換」をクリックします。
図 1. アップロード設定のマッピング画面 
「構成の追加」をクリックします。 「新規シンボル・ファイルのアップロード構成」ダイアログが表示されます。
「説明」 フィールドに、アップロードの説明を入力します。
「作成」 をクリックします。 「シンボル・ファイルのアップロード構成の編集」ダイアログが表示されます。 ダイアログに表示される Web REST API を使用して、マッピング・ファイルをアップロードします。 ステップ 3 を参照してください。
保存 をクリックします。 構成が保存されます。
注: モバイルアプリ1つにつき、最大1,024件のソースマップ設定をアップロードできます。 モバイルアプリ1つあたりのソースマップ設定の最大保存容量は2,048 MBです。 この制限を引き上げるには、 Instana のサポートまでお問い合わせください。マッピングファイル( mapping.txt )をファイル
.tgzに圧縮します:tar czf <archive name>.tgz <mapping_file>コマンドの例を以下のスニペットに示します。
tar czf your_app.mapping.tgz your_app.mapping.txt圧縮ファイルのサイズが 10 MB を超える場合は、
.tgzファイルを複数の BLOB (それぞれ 9 MB) に分割します。split -b 9m <archive name>.tgz <file>.tgz_blob_コマンドの例を以下のスニペットに示します。
split -b 9m your_mapping_file.tgz your_mapping_file.tgz_blob_Instana のウェブサイト( REST API )を使用して、ファイルをアップロードしてください。 以下のステップのいずれかを実行します。
アップロードに複数の BLOB が含まれている場合は、以下を実行します。
curl -L -X PUT \ 'https://$UNIT-$TENANT.instana.io/api/mobile-app-monitoring/config/$MOBILE_APP_ID/sourcemap-upload/$UPLOAD_CONFIG_ID/form' \ -H 'authorization: apiToken $API_TOKEN' \ -F 'fileId="$IDENTIFIER_OF_APP_BUNDLE-$APP_VERSION, for example com.example.myapp-1.0.3"' \ -F 'fileType="R8PG_MAP"' \ -F 'blobIndex=1' \ -F 'sourceMap=@"$LOCAL_SYMBOLFILE_LOCATION"'注:blobIndex の値は0ではなく1から始まります。 次の各ブロブについて、 blobIndex を1ずつ増やします。アップロードにファイルが 1 つしか含まれていない場合は、以下を実行します。
curl -L -X PUT \ 'https://$UNIT-$TENANT.instana.io/api/mobile-app-monitoring/config/$MOBILE_APP_ID/sourcemap-upload/$UPLOAD_CONFIG_ID/form' \ -H 'authorization: apiToken $API_TOKEN' \ -F 'fileId="$IDENTIFIER_OF_APP_BUNDLE-$APP_VERSION, for example com.example.myapp-1.0.3"' \ -F 'fileType="R8PG_MAP"' \ -F 'sourceMap=@"$LOCAL_SYMBOLFILE_LOCATION"'圧縮ファイルのサイズが 10 MB を超えると、エラー・メッセージ
request entity too largeが表示されます。 ステップ 3 を参照してください。
アップロードのコミット:
curl -L -X PUT \ 'https://$UNIT-$TENANT.instana.io/api/mobile-app-monitoring/config/$MOBILE_APP_ID/sourcemap-upload/$UPLOAD_CONFIG_ID/commit' \ -H 'authorization: apiToken $API_TOKEN' \ -F 'fileId="$IDENTIFIER_OF_APP_BUNDLE-$APP_VERSION, for example com.example.myapp-1.0.3"' \ -F 'fileType="R8PG_MAP"'
コミットコマンドを実行する前に、すべてのBlobをアップロードしてください。 Instana のUIでは、各ソースマップごとにアップロードされたBlobの数を確認できます。 ブロビングを使用しないソースマップの場合、ブロブ数は「1」と表示されます。
Success。
Instana からマッピングファイルを削除する
Instana からマッピングファイルを削除するには、次のいずれかの手順を実行してください:
Go 「Webサイトとモバイルアプリ 」>「 モバイルアプリ 」>「 設定 」> 「スタックトレースの変換 」に移動し、該当する設定の横にある削除アイコンをクリックします。
Web REST API へのリクエストを実行します。 サンプル・コマンドを以下の例に示します。
curl -L -X PUT \ 'https://$UNIT-$TENANT.instana.io/api/mobile-app-monitoring/config/$MOBILE_APP_ID/sourcemap-upload/$UPLOAD_CONFIG_ID/clear' \ -H 'authorization: apiToken $API_TOKEN'