Android モニタリング API

Androidアプリケーションを監視するには、 Instana のAndroidエージェント( API )をご利用いただけます。

Androidエージェントのバージョン

Androidエージェントのすべてのバージョン更新、機能、およびバグ修正については、 GitHub の 「変更履歴 」ファイルでご確認いただけます。

Instana Androidエージェント

Instana のAndroidエージェントは、クラスの Instana メソッドを通じて使用できます。

Instana の監視設定

Androidアプリケーションで Instana のモニタリングを設定するには、クラスの` Application main()` onCreate()メソッドの直後に` Instanasuper.onCreate()`を初期化してください

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = "YOUR_APP_KEY",
                reportingURL = "YOUR_REPORTING_URL"
            )
        )
    }
}
 

構成オプション

次の表は、設定パラメータの概要を示しています:

パラメーター 説明
key ( String ) Instana のモニタリング構成キー。
reportingURL ( String ) URL は、監視データが送信される Instana インスタンスを指しています。
httpCaptureConfig ( HTTPCaptureConfig 、任意) デフォルトでは、 HTTP のリクエストとレスポンスは自動的にキャプチャされます。 自動監視を無効にするには、このパラメータを に設定してください HTTPCaptureConfig.MANUAL 。 HTTP のセッション監視を無効にするには、このパラメータを に設定してください HTTPCaptureConfig.NONE
suspendReporting ( SuspendReportingType 、任意) Instana のビーコン送信は、バックグラウンドで低優先度で行われます。 ビーコンの伝送を中断する必要がある条件を選択することができます。例えば、バッテリーが低い場合、セルラー接続のみの場合、またはビーコンの伝送を中断しない場合などです。
initialBeaconDelayMs ( Long 、任意) エージェントは、 Instana サーバーにビーコンを送信する前に、クライアントが などの追加パラメータをすべて設定できるように、最初の Session Identifiers ビーコンの送信を所定の時間遅延させます。 ビーコンからの送信のみが遅延します。 エージェントが初期化されると、パラメータ initialBeaconDelayMs の設定にかかわらず、ビーコンの監視と取得が直ちに開始されます。
collectionEnabled ( Boolean 、任意) このパラメーターは、始動時の Android エージェントのデータ収集と実行依頼を有効または無効にします。 デフォルトでは、セットアップによってデータ収集がオンになります。 Instana を設定する際、データ収集を無効にするには、セットアップでこの false パラメータを に設定してください。 このパラメータは、Androidエージェントがデータを収集する前にユーザーの同意が必要な場合に役立ちます。 デフォルト値はtrueです。
enableCrashReporting ( Boolean 、任意) このパラメータは、起動時のクラッシュデータの収集と送信を有効または無効にします。 必要に応じて、始動後に収集と送信を有効にすることができます。 このパラメーターは、Android エージェントがクラッシュ・データを収集する前にユーザーの同意が必要なシナリオで役立ちます。 デフォルト値は falseです。
slowSendIntervalMillis ( Long 、任意)

この機能は非推奨です。

このパラメーターは、有効な正の整数 (2000 から 3600000 ミリ秒の範囲) をミリ秒単位で指定することにより、ビーコン送信障害時の低速送信モード機能を有効にします。 デフォルト値は nullです。これは、低速送信モードが無効であることを意味します。

usiRefreshTimeIntervalInHrs ( Long 、任意) このパラメータは、( usiuserSessionIdentifier ) の更新間隔を決定します。 usi は、 ユーザーの識別 データが明示的に指定されていない場合、またはアプリケーションがユーザー・コンテキストを持っていない場合に、アプリケーションに割り当てられる固有 ID として機能します。 このパラメーターが負の値に設定されている場合、 usi はデフォルトの動作を保持し、リフレッシュは行いません。 このパラメーターがゼロの値に設定されている場合、 usi はバックエンドに送信されないため、ID は非アクティブ化されます。 このパラメーターが正の値に設定されている場合、 usi は指定された時間間隔でリフレッシュします。 パラメーター値は時間単位で指定する必要があります。 デフォルト値は ` -1 です。
autoCaptureScreenNames ( Boolean 、任意) このパラメータを有効にすると、スクリーンネームが自動的に取得されます。 現在、 xml レイアウトで Fragments および Activities を使用して作成された Android アプリケーションの画面名キャプチャーがサポートされています (構成可能な UI やその他の UI には適用されません)。 この機能を有効にすると、コードベース内の既存の Instana.view 実装が置き換えとして機能するため、この実装が不要になります。 スクリーン名は、以下の複数のレベルで取得されます。 * アクティビティ * フラグメント アクティビティ :名前は、ルートレイアウトに割り当てられたアクセシビリティラベルから自動的に抽出されます。 見つからない場合は、クラス Activity 名がスクリーン名として使用されます。 フラグメント :エージェントはまず 内のラベルを検索し、次にフラグメント navController内のラベルを検索 tagsし、その後、ルートビュー上の accessibility labels 内のラベルを検索します。 利用可能なものがない場合、クラス Fragment 名をスクリーン名として使用します。 キャプチャされた各ビューのメタデータには、ローカルパス、 OnResume の時刻(コールバックから収集されるため、実際の再開時刻とキャプチャされた再開時刻にわずかな違いが生じる場合があります)、およびFragmentとActivityのクラス名が含まれます。 現時点では、自動キャプチャ機能は、minifyが無効になっている Fragments 、またはProGuardの除外設定が「すべて」に設定されているアプリケーションでのみ動作することにご注意ください。 デフォルト値は false です。
rateLimits ( RateLimits 、任意) このパラメータを使用すると、特定の時間間隔内に送信できるビーコンの数を制限するように設定できます。 利用可能なオプションは、DEFAULT_LIMITS、MID_LIMITS、MAX_LIMITSの3つです。 デフォルトでは、DEFAULT_LIMITS が選択されています。 DEFAULT_LIMITS : - 5分あたり500ビーコン - 10秒あたり20 MID_LIMITS ビーコン : - 5分あたり1000ビーコン - 10秒あたり40 MAX_LIMITS ビーコン : - 5分あたり2500ビーコン - 10秒あたり100ビーコン
dropBeaconReporting ( Boolean 、任意) このパラメータを有効にすると、ドロップされたビーコンの報告が可能になります。 ビーコンの数がレート制限に達した場合、新しいビーコンは Instana サーバーに送信される代わりに破棄されます。 このパラメータが に設定されている true場合、ドロップされたビーコンは内部で追跡され、ビーコンの数がレート制限を超えなくなった時点で、ビーコンレポートが Instana のバックエンドに送信されます。 デフォルト値はfalseです。
trustDeviceTiming ( Boolean 、任意) このオプションを有効にすると、各ビーコンには、 Instana バックエンドに対してそのビーコンの作成タイムスタンプを信頼するよう指示するフラグが含まれます。 デフォルトでは、ビーコンが作成から30分以上経過して受信された場合、バックエンドは作成時刻をサーバーの受信時刻で上書きします。 この設定のデフォルト値は false です。
enableW3CHeaders ( Boolean 、任意) このオプションを有効にすると、Androidエージェントは、監視対象の API 呼び出しに および tracestate ヘッダー traceparent を含めます。 これらのヘッダーを使用すると、バックエンドに Instana エージェントが導入されていなくても、バックエンドの相関分析が可能になります。 そのような場合は、 バックエンドのトレース詳細をInstana バックエンドにエクスポートするために、互換性のあるモニタリングツール( OpenTelemetry など)を使用する必要があります。 このオプションが無効になっている場合、 Instana エージェントがバックエンドも監視しているときは、バックエンドの相関分析が可能になります。 デフォルトの設定は「偽」です。
performanceMonitorConfig ( PerformanceMonitorConfig 、任意) このパラメータは、アプリケーションのパフォーマンス監視を設定します。 これは `PerformanceMonitorConfig` クラスのオブジェクトです。 パフォーマンス指標の監視パラメータを設定するには、 表2を参照してください。

パフォーマンス指標の設定

次の表は、パフォーマンス設定パラメータの概要を示しています

パラメーター 説明
enableAppStartTimeReport ( Boolean 、任意) このパラメータを有効にすると、アプリケーションのコールドスタート時間がレポートされます。 コールドスタート時間とは、バックグラウンドからではなく、完全にゼロの状態からAndroidアプリを起動する際に、起動完了までにかかる時間を指します。 測定は、Zygoteの初期化とプロセスのバインディングが完了した後に開始され、アプリケーションのUIが操作可能になった時点で終了します。 この間の時間こそが、開発者がアプリのコールドスタート性能を最適化できるタイミングなのです。 起動時間はミリ秒単位で測定されます。 デフォルト値は trueです。
enableAnrReport ( Boolean 、任意) このパラメータを有効にすると、アプリケーションが応答しなくなった場合(application not respond)のレポートが生成されます。デフォルト値は です false
anrThresholdMs ( Long 、任意) このパラメータは、アプリケーションが応答していないとみなされるまでの時間をミリ秒単位で指定します(application not respond)。このパラメータは、 が に設定されている enableAnrReporttrue 場合にのみ適用されます。 デフォルト値は3000Lです。
enableLowMemoryReport ( Boolean 、任意) このパラメータを有効にすると、メモリ不足に関する通知が表示されるようになります。 デフォルト値は falseです。
enableBackgroundEnuReport ( Boolean 、任意) このパラメータを有効にすると、24時間に1回、バックグラウンドでのネットワーク使用量が過剰である旨の通知が送信されます。 レポートを作成するには、このフラグも trustDeviceTiming true に設定する必要があります。 デフォルト値はfalseです。

現在の設定を確認中

現在の Instana の設定を確認するには、インスタンス InstanaConfig にアクセスしてください:

val currentConfig = Instana.config
 

セッション識別子の取得

各Instanaエージェント・インスタンスには、アプリで他の目的に使用できる固有のセッション識別子があります。

プロパティー 説明
sessionId ( String 、任意) 現行セッションの ID。 このセッション ID は、セットアップ・プロセス内で作成されます。

自動 HTTP モニタリング

デフォルトでは、 HTTP のセッションは自動的に記録されます。 Instana を初期化すると( Instana Androidプラグインと Instana Android SDK をインストールした後)、エージェントが残りの処理を自動的に行います。

Instana のAndroidエージェントは、サポートされているクライアントの HTTP リクエストを監視するために、コードを自動的に組み込みます

  • OkHttp3
  • HttpURLConnection
  • Retrofit

HTTP の自動監視を無効にし、代わりに HTTP による手動監視を行うことができます。

手動 HTTP モニタリング

HTTP のセッションを手動で監視することもできます。

録画を開始

この関数は HTTPMarkerを返します。これは、後で要求が完了したときに必要になります。

Instana {
    fun startCapture(url: String, viewName: String? = view, requestHeaders: Map<String,String>?): HTTPMarker?
}
 
構成パラメーター

次の表は、設定パラメータの概要を示しています:

パラメーター 説明
url ( String ) 取り込む URL。
viewName ( String 、任意) この要求に関連して表示されるビューの名前。
requestHeaders ( Map<String,String> 、任意) 要求ヘッダーの名前と値です。

この関数は、レスポンスサイズを設定したり、リクエストが完了した際に finish または error 状態を呼び出したりするために使用できる、 HTTP マーカーを返します。

キャプチャの完了

要求が完了したら、 HTTPMarker およびオプションの Errorに応答を指定して finish を呼び出す必要があります。

HTTPMarker {
    fun finish(response: okhttp3.Response)
    fun finish(request: okhttp3.Request, error: Throwable)
    fun finish(connection: java.net.HttpURLConnection)
    fun finish(connection: java.net.HttpURLConnection, error: Throwable)
    fun finish(data: com.instana.android.instrumentation.HTTPMarkerData)
}
 

キャプチャのキャンセル

完了前に要求が取り消された場合は、 HTTPMarkerで以下のメソッドを開始します。

fun cancel()
 

val request = yourMethodToCreateRequest()
val marker = Instana.startCapture(request.url().toString(), viewName: "User Details")
val response = OkHttpClient().newCall(request).execute()
marker?.finish(response)
 
val marker = Instana.startCapture("https://example.com/user", viewName: "User Details")
// Complete request and manually obtain any relevant information
val httpMarkerData = HTTPMarkerData(
            requestMethod = "GET",
            responseStatusCode = 200,
            responseSizeEncodedBytes = 200,
            responseSizeDecodedBytes = 1000
        )
marker?.finish(httpMarkerData)
 
HTTPMarker marker = Instana.startCapture("https://example.com/user", "User Details");
// Complete request and manually obtain any relevant information
HTTPMarkerData data = new HTTPMarkerData.Builder()
        .requestMethod("GET")
        .responseStatusCode(200)
        .responseSizeEncodedBytes(200)
        .responseSizeDecodedBytes(1000)
        .build();
marker.finish(data);
 

ビューの設定

Instana は、モバイル・アプリケーションの洞察を論理ビューによってセグメント化することができます。 これを行うには、 Instana.setView(String) メソッドを使用してビュー名を設定します。 その後、 setView が再度呼び出されたときにビューが変更されるまで、そのビューはすべてのモニター対象ビーコンに関連付けられます。

ビューの定義には、クラス ( WebViewActivityなど) のような技術名や総称名を使用しないでください。 読み取り可能なビュー名 ( product detail pagepayment selectionなど) を使用してください。 ユーザー・エクスペリエンスに焦点を当てることにより、コードベースに関する深い知識を持たないチーム・メンバーは、提供される洞察を理解することができます。

注: Instana.setView(String) このメソッドは、画面が作成されたときではなく(Fragmentのように一度作成されても複数回表示される場合とは異なり)、ユーザーに画面が表示されたときに呼び出す必要があります。 ビュー名を設定すると、 Instana はページの読み込みだけでなく、ページ遷移も追跡できるようになります。

class WebViewActivity : AppCompatActivity() {

    override fun onResume() {
        super.onResume()
        Instana.view = "Webview: FitBit authorization"
    }
}
 

ユーザーの識別

Instana に送信されるデータに、必要に応じてユーザー固有の情報を含めることができます。 この情報を利用することで、以下の追加機能を利用できるようになります:

  • エラーの影響を受けるユーザー数の計算
  • 特定のユーザーのデータのフィルタリング
  • ビューの変更または HTTP リクエストを発行したユーザーを特定する

デフォルトでは、 Instana は、ユーザーを特定できる情報をビーコンに関連付けます。 Instana にユーザー固有の情報を送信する際は、各国のデータ保護法に留意してください。 ユーザー ID を使用してユーザーを識別します。 Instana において、このアクションは、特定のメトリクスの計算にのみ使用される透過的な String 処理です。 より多くのフィルターにアクセスしたり、ユーザー情報をより快適に表示したりするために、userNameuserEmail を使用することもできます。

匿名ユーザーを処理するためにユーザー ID にアクセスできない場合は、代わりにセッション ID を使用することもできます。 セッション ID は、データをフィルタリングする際にユーザー ID ほど有用ではありませんが、影響を受けるユーザー・メトリックまたは固有のユーザー・メトリックを計算するのに適した指標です。 認証済みユーザーと非認証ユーザーを明確に区別するには、 Anonymous などのユーザー名を設定する必要があります。 セッション ID は、(使用するフレームワークまたはプラットフォームに応じて) 機密データにすることができます。 アクセス権を付与する可能性のあるデータを Instana に送信しないよう、セッションIDをハッシュ化してください。

Instana のバックエンドにすでに送信されたデータは、事後的に更新することはできません。 したがって、アプリの起動プロセスにおいて、できるだけ早い段階でこの API を呼び出す必要があります。

注: ユーザーデータが提供されていない場合、またはアプリケーションにユーザーコンテキストが存在しない場合、ビーコンから ( usiuserSessionIdentifier ) が取得されます。 これは一意の識別子 usi として機能し、ユーザーデータが利用できない状況において、ユーザーを一意に識別するためにアプリケーションに割り当てられます。 「設定パラメータ 」セクションの usiRefreshTimeIntervalInHrs パラメータを使用することで、の更新間隔を指定 usiできます。
Instana {
    void setUserId(@Nullable String)
    @Nullable String getUserId()
    void setUserName(@Nullable String)
    @Nullable String getUserName()
    void setUserEmail(@Nullable String)
    @Nullable String getUserEmail()
}
 

class MyApp : Application() {

    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = BuildConfig.INSTANA_KEY,
                reportingURL = BuildConfig.INSTANA_REPORTING_URL
            )
        )
        Instana.userId = "1234567890"
        Instana.userEmail = "instana@example.com"
        Instana.userName = "instana android agent demo"
    }
}
 

メタデータの追加

Instana に送信されるすべてのデータには、任意でメタデータを付加することができます。 このメタデータを使用して、UI 構成値、設定、機能フラグ、および分析に役立つ可能性のある追加コンテキストを追跡できます。

注: 現在、最大50個のメタキーまたは値のペアがサポートされています。 キーは最大 98 文字で、値は最大 1024 文字にすることができます。
Instana {
     val meta = MaxCapacityMap<String, String>(50)
}
 

プロパティー

パラメーター 説明
meta ( MaxCapacityMap ) すべてのメタ・キーまたは値のペアを保持するオブジェクト。 このインターフェースは、共通マップのインターフェースに似ています。 オブジェクトの最大容量を超えない場合は、通常どおりにエレメントを追加および削除できます。

class UserProfileActivity : AppCompatActivity() {

    override fun onResume() {
        super.onResume()
        Instana.meta.put("user authenticated", "true")
        Instana.meta.put("user type", "editor")
    }
}
 

モニター対象からの URL の除外

URL を無視するには、正規表現を ignoreURLs リストに追加します。 この機能を使用するのに適したシナリオは、パスワードなどの機密データが含まれるすべての HTTP 要求を無視する場合です。

自動的にモニターされる URL のみが無視されます。 手動でモニターされた URL は無視されません。

Instana {
    val ignoreURLs = mutableListOf<Regex>()
}
 
Instana {
    List<Pattern> getIgnoreURLs()
}
 

class MyApp : Application() {

    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = BuildConfig.INSTANA_KEY,
                reportingURL = BuildConfig.INSTANA_REPORTING_URL
            )
        )
        Instana.ignoreURLs.add("/.*([&?])password=.*/i".toRegex())
    }
}
 

この例では、照会にパスワードが含まれるすべての URL を無視します。

カスタム・イベントの報告

カスタムイベントを使用すると、標準外のアクティビティ、重要なインタラクション、およびカスタムタイミングに関するレポートを Instana に送信できます。 このレポートは、検出されていないエラー(ブレッドクラム)を分析したり、より多くのパフォーマンス指標を追跡したりするのに特に役立ちます。

Instana {
    fun reportEvent(event: CustomEvent)
}
 

Instana が提供する CustomEvent この機能を使用すると、複数のパラメータを設定できますが、 eventName (コンストラクタ内で)必須となるのは のみです。

構成パラメーター

次の表は、設定パラメータの概要を示しています:

パラメーター 説明
eventName ( String ) カスタム・イベントの名前。 Instana ダッシュボードに目立つように表示されています
startTime ( Long 、任意) イベントが開始されたタイム・スタンプ。エポック以降のミリ秒単位で定義されます。 デフォルトはNow()-durationです。
duration ( Long 、任意) イベントの期間 (ミリ秒単位で定義)。 既定は 0 です。
viewName ( String 、任意) イベントが発生した論理ビュー。 デフォルトは、 Instana.viewに設定されている現在のビューです。
meta ( Map<String, String> 、任意) メタ値のマップ。 これらの値は、このイベントのグローバル Instana.meta タグとマージされます。 他の将来のイベントには適用されません。 機密情報は含めないで meta ください。
backendTracingID ( String 、任意) Instanaintid;desc=backendTracingIDが有効なバックエンドからServer-Timingヘッダーとして送信される追跡IDは、.
error ( Throwable 、任意) 追加のコンテキストを提供するためにスローされるエラー(ある場合)。
customMetric ( Double 、任意) 小数点以下 4 桁までの精度でカスタム・メトリック・データを提供するためのオプション。 このメトリックには機密情報を含めないでください。

val myEvent = CustomEvent("MyCustomEvent").apply {
    duration = 300
    meta = mapOf("keyOne" to "valueOne", "keyTwo" to "valueTwo")
    backendTracingID = "1234567890"
    customMetric = 98.7654
}

Instana.reportEvent(myEvent)
 
Map<String,String> myMetas = new HashMap<>();
myMetas.put("keyOne", "valueOne");
myMetas.put("keyTwo", "valueTwo");

CustomEvent myEvent = new CustomEvent("MyCustomEvent");
myEvent.setDuration(300L, TimeUnit.MILLISECONDS);
myEvent.setMeta(myMetas);
myEvent.setBackendTracingID("1234567890");

Instana.reportEvent(myEvent);
 

「 Google 」のPlayサービス利用状況

Instana に対し、特定のユーザーおよびセッションで Google Playサービスが利用可能かどうかを明示的に指定することができます。

Instana {
    val googlePlayServicesMissing: Boolean?
}
 

class MyApp : Application() {

    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = BuildConfig.INSTANA_KEY,
                reportingURL = BuildConfig.INSTANA_REPORTING_URL
            )
        )
        Instana.googlePlayServicesMissing = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this) != ConnectionResult.SUCCESS
    }
}
 
//app/build.gradle
dependencies {
    implementation 'com.google.android.gms:play-services-basement:17.1.1'
    implementation 'com.google.android.gms:play-services-base:17.1.0'
}
 

ロギング・ファサード

デフォルトでは、 Instana は LogCat に直接ログを記録します。 これらのログをパイプ接続するには、ロガー・インターフェースを実装するオブジェクトを指定します。

interface Logger {
    fun log(level: Int, tag: String, message: String, error: Throwable?)
}

Instana {
    var logger: com.instana.android.Logger?
}
 

構成パラメーター

次の表は、設定パラメータの概要を示しています:

パラメーター 説明
level ( Int ) android.util.Log レベル (android.util.Log.INFO、android.util.Log.ERROR など) のいずれかによって定義されたログ・レベル
tag ( String ) 内部 Instana エージェント・タグ
message ( String ) Instana によって生成されるログ・メッセージ
error ( Throwable 、任意) より多くのコンテキストを提供するためにスローされるエラー (存在する場合)。

Instana.logger = object : Logger {
    override fun log(level: Int, tag: String, message: String, error: Throwable?) {
        Log.d("my_tag", "intercepted Instana Android Agent log message: '$message'")
    }
}
 

ロギングレベルの定義

デフォルトでは、 Instana はINFOレベルのログを生成します。 このデフォルトを変更するには、一般的な android.util.Log レベル (android.util.Log.INFOandroid.util.Log.ERROR、またはその他のレベル) 以外のログ・レベルを定義します。

Instana {
    var logLevel: Int
}
 

データ収集の有効化または無効化

Instana エージェントの起動時や実行中など、いつでもデータ収集と送信を有効にすることができます。

この機能は、データの収集を続行する前に明示的なユーザーの同意が必要なシナリオで最も役立ちます。

Instana {
    fun setCollectionEnabled(enabled: Boolean)
    fun isCollectionEnabled()
}
 

URL のクエリパラメータのマスキング

収集された URL の照会パラメーターに機密データが含まれている可能性があります。 したがって、 Instana エージェントでは、値を非表示にする必要があるクエリパラメータのキーに対して、正規表現パターンを指定することができます。非表示にする値はすべて「 <redacted>.」に置き換えられます。

データ消去は、 Instana エージェントが Instana バックエンドに報告を行う前に、そのエージェント内で実行されます。 したがって、シークレットは処理のために Instana のバックエンドに送信されず、UIでの分析や Instana API を使用した取得の対象とはなりません。

デフォルトでは、Instana エージェントは、照会パラメーター値を自動的に編集するために、以下の 3 つの正規表現パターンのリストを使用して構成されています。

  • key
  • secret
  • password

リダクションは、自動的にモニターされる要求とその関連ログにのみ適用されます。 手動でモニターされた要求は編集されません。

Instana {
    val redactHTTPQuery = mutableListOf<Regex>()
}
 

class MyApp : Application() {

    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = BuildConfig.INSTANA_KEY,
                reportingURL = BuildConfig.INSTANA_REPORTING_URL
            )
        )

        // in order to for example redact "https://example.com?secret=abcdef" into "https://example.com?secret=<redacted>"
        Instana.redactHTTPQuery.add("secret".toRegex())
        // in order to for example redact "https://example.com?hidden1=abcdef&hidden2=123456" into "https://example.com?hidden1=<redacted>&hidden2=<redacted>"
        Instana.redactHTTPQuery.add("^hidden[0-9]".toRegex())
    }
}
 

URL のクエリパラメータおよびフラグメントを追跡対象から除外する

デフォルトでは、Androidエージェントは、すべてのパラメータを含む完全な URL を収集します。 エージェントの設定により、指定された正規表現のリストに一致するURLのパラメータのみを収集するように設定できます。 除外されたURLのパラメータは追跡されません。

提供された正規表現のリストに基づき、Androidエージェントは次のようにURLを追跡します:

  • URL がリストのエントリと一致する場合、すべてのパラメータを含む URL 全体が取得されます。
  • URL がリストのエントリと一致しない場合、クエリパラメータおよび URL のフラグメントは、 Instana バックエンドに送信されません。
  • 指定されたリストが空の場合、デフォルトの動作が適用され、 URL およびそのパラメータのすべてが追跡されます。
Instana {
    val queryTrackedDomainList = mutableListOf<Regex>()
}
 

以下のシナリオでは、 URL に伏せられたシークレットまたはその一部が含まれている場合の挙動について説明します:

  • URL がの項目と一致した場合、秘密鍵またはその一部が伏せられた URLqueryTrackedDomainList全体が、 Instana バックエンドに送信されます。
  • URL がの項目と一致しない場合、 URL を queryTrackedDomainListInstana バックエンドに送信する前に、すべてのパラメータが除外されます。

次の例では、正規表現に一致するURLのみが、その .*10\\.0\\.2\\.2:8081.* パラメータを含めて完全に収集されます:

class MyApp : Application() {

    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = BuildConfig.INSTANA_KEY,
                reportingURL = BuildConfig.INSTANA_REPORTING_URL
            )
        )
        Instana.queryTrackedDomainList.add(".*10\\.0\\.2\\.2:8081.*".toRegex().toPattern())
    }
}
 

HTTP ヘッダーのキャプチャー

必要に応じて、 Instana エージェントは、追跡対象となるすべてのリクエストまたはレスポンスの HTTP ヘッダーを取得することができます。

どのヘッダーをキャプチャーするかを決定するために、正規表現パターンのリストを定義できます。

要求とその応答の両方に同じヘッダー名が存在する場合は、応答のヘッダー値のみが保持されます。

Instana {
    val captureHeaders = mutableListOf<Regex>()
}
 

class MyApp : Application() {

    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = BuildConfig.INSTANA_KEY,
                reportingURL = BuildConfig.INSTANA_REPORTING_URL
            )
        )

        // in order to capture all request/response headers like: "X-MyCompany-name1", "X-MyCompany-name2"...
        Instana.captureHeaders.add("X-MyCompany-.*".toRegex())
    }
}
 

低速送信モードを有効にする

低速送信モード機能は、デフォルトでは無効になっています。 必要に応じて、この機能を有効にすることができます。

デフォルトでは、ビーコンの送信に失敗した場合、 Instana エージェントは送信が成功するまでビーコンの再送信を試みます。 この再送は、一部のセルラー・ネットワークではうまく機能しません。 「低速送信モード」機能を有効にすると、ビーコンの送信間隔は、 パラメータ slowSendIntervalMillis に割り当てられた時間値に変更されます。 各ビーコン送信は、バッチではなく 1 つのビーコンのみで構成されます (バッチでは最大 100 ビーコン)。 Instana エージェントは、1つのビーコンが正常に送信されるまで、低速送信モードを維持します。

の有効な時間範囲は 2000 slowSendIntervalMillis ~3600000 ミリ秒です。

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = BuildConfig.INSTANA_KEY,
                reportingURL = BuildConfig.INSTANA_REPORTING_URL,
                slowSendIntervalMillis = 60000
            )
        )
    }
}
 

ユーザーセッションIDの追跡

デフォルトでは、ユーザー・セッションは追跡され、ID はランダムに生成された Universally Unique Identifier (UUID) です。 この ID は、アプリのインストール中は変更されません。 パラメータ usiRefreshTimeIntervalInHrs を使用することで、ユーザーセッションIDの有効期限を設定できます。 以下のパラメーター値は、ユーザー・セッション ID の状況を示します。

  • 負の数値: この値は、ユーザー・セッション ID の有効期限が切れないことを示します。 デフォルト値は -1 です。

  • 正数: この値は、設定された時間が経過した後にユーザー・セッション ID がリフレッシュされることを意味します。つまり、新しい UUID が生成されて使用されます。

  • ゼロ: この値 0.0 は、ユーザー・セッション ID が使用不可であることを意味します。

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = BuildConfig.INSTANA_KEY,
                reportingURL = BuildConfig.INSTANA_REPORTING_URL,
                usiRefreshTimeIntervalInHrs = 24
            )
        )
    }
}
 

コンポーザブルUIの名前を取得する

構成可能な UI の画面名を自動的にキャプチャーするには、構成可能なアプリケーションで NavHostController オブジェクトに addInstanaObserver() 拡張関数を追加します。 この関数は、構成可能なナビゲーション用に指定された経路パスの名前を収集します。

@Composable
fun RootNavigationGraph(navHostController: NavHostController, context: Context) {
    NavHost(
        navController = navHostController,
        route = Graph.ROOT,
        startDestination = Graph.INITIAL_FLOW,
    ) {
        initNavGraph(navHostController, context)
        composable(route = Graph.HOME) {
            navHostController.addInstanaObserver() //Adding Instana observer as a extension function.
            HomeScreen()
        }
    }
}