Docs » Splunk Observability Cloud でサポートされているインテグレーション » モバイルおよび Web アプリケーションを Splunk RUM でインストルメンテーションする » Splunk RUM 用 Android アプリケーションのインストルメンテーション » Androidアプリケーションの手動インストルメンテーション

Androidアプリケーションの手動インストルメンテーション 🔗

Android RUM エージェントを使用して、Splunk RUM 用の Android アプリケーションを手動でインストルメンテーションし、追加のテレメトリを収集したり、個人識別情報 (PII) をサニタイズしたり、グローバル属性を追加したりすることができます。

スパンをフィルターーする 🔗

filterSpans() メソッドを使用して、スパンを変更または削除できます。例えば、個人を特定できる情報(PII)を含むスパンを削除または編集することができます。

次の例は、スパンを削除する方法を示しています:

SplunkRum.builder()
         .filterSpans(spanFilter ->
            spanFilter
                  .removeSpanAttribute(stringKey("http.user_agent")))

次の例は、機密データを削除するために属性の値を編集する方法を示しています:

SplunkRum.builder()
         .filterSpans(spanFilter ->
            spanFilter
                  .replaceSpanAttribute(StandardAttributes.HTTP_URL,
                     value -> Pattern.compile.. _"(user|pass:\\w+")
                           .matcher(value)
                           .replaceAll("$1=<redacted>")))

グローバル属性の管理 🔗

グローバル属性は、すべての報告データに追加されるキーと値のペアです。グローバル属性は、アプリやユーザー固有の値をタグとして報告するのに便利です。

次の例は、アプリのバージョンとキーと値のペアをグローバル属性として定義する方法を示しています:

SplunkRum.builder()
         .setGlobalAttributes(
               Attributes.builder()
                        .put("key", "value")
                        .put(StandardAttributes.APP_VERSION, BuildConfig.VERSION_NAME)
                        .build())

RUM ライブラリの初期化後にグローバル属性のセットを更新するには、以下の SplunkRum メソッドを使用します:

  • setGlobalAttribute(AttributeKey) を使用して、単一の属性を設定または更新します。

  • updateGlobalAttributes(Consumer<AttributesBuilder> attributesUpdater) 属性を一括更新します。

グローバル属性を使用してユーザーメタデータを追加する 🔗

デフォルトでは、Android RUMエージェントは、トレースをサイトのユーザーに自動的にリンクしません。しかし、トレースのフィルターリングやデバッグのために、ユーザーメタデータを収集する必要がある可能性があります。

OpenTelemetry仕様のグローバル属性( enduser.idenduser.role など)をスパンに追加することで、ユーザーを特定することができます。

以下の例は、初期化時にユーザデータにアクセスできるかどうかに応じて、エージェントの初期化時または初期化後に識別メタデータをグローバル属性として追加する方法を示しています:

初期化時に識別メタデータを追加する 🔗

SplunkRum.builder()
         .setGlobalAttributes(
               Attributes.builder()
                        // Adds existing userId
                        .put("enduser.id", "user-id-123456")
                        .build())

初期化後に識別メタデータを追加 🔗

splunkRum.setGlobalAttribute("enduser.id", "123456L");
splunkRum.setGlobalAttribute("enduser.type", "loggedInUser");
splunkRum.setGlobalAttribute("enduser.role", "premium");

カスタムイベントとワークフローを報告する 🔗

addRumEvent および startWorkflow API を使用して、Android アプリケーションで発生しているカスタムイベントやワークフローを報告できます。

次の例は、ユーザーがヘルプダイアログを閉じたときに報告する方法を示しています:

public Dialog onCreateDialog(Bundle savedInstanceState) {
   LayoutInflater inflater = LayoutInflater.from(activity);
   View alertView = inflater.inflate(R.layout.sample_mail_dialog, null);
   AlertDialog.Builder builder = new AlertDialog.Builder(activity);
   builder.setView(alertView)
            .setNegativeButton(R.string.cancel, (dialog, id) ->
               // Record a simple "zero duration" span with the provided name and attributes
                  SplunkRum.getInstance().addRumEvent("User Rejected Help", HELPER_ATTRIBUTES));
   return builder.create();
}

次の例は、Splunk RUM によってメトリクスが記録されるワークフローを開始する方法を示しています。ワークフローを記録するには、OpenTelemetry span インスタンスを終了する必要があります:

binding.buttonWork.setOnClickListener(v -> {
   Span hardWorker =
         SplunkRum.getInstance().startWorkflow("Main thread working hard");
   try {
      Random random = new Random();
      long startTime = System.currentTimeMillis();
      while (true) {
         random.nextDouble();
         if (System.currentTimeMillis() - startTime > 20_000) {
            break;
         }
      }
   } finally {
      hardWorker.end();
   }
});

スクリーン名のカスタマイズ 🔗

デフォルトでは、Android RUMエージェントは、screen.name 属性の値として、Fragment および Activity の各タイプの単純なクラス名を使用します。スクリーン名をカスタマイズするには、@RumScreenName アノテーションを使用します。

例えば、screen.name 属性に値 Buttercup を設定すると、以下のアクティビティが表示されます:

@RumScreenName("Buttercup")
public class MainActivity extends Activity {
   ...
}

エラー報告の設定 🔗

addRumException(Throwable) メソッドを使用して、処理されたエラー、例外、メッセージをレポートできます。例外は Splunk RUM UI にエラーとして表示され、エラーメトリクスが記録されます。

次の例は、サンプルアプリケーションで Unimplemented Feature: Settings エラーを報告する方法を示しています:

public boolean onOptionsItemSelected(MenuItem item) {
   int id = item.getItemId();
   if (id == R.id.action_settings) {
      SplunkRum.getInstance()
         .addRumException(
            new UnsupportedOperationException("Unimplemented Feature: Settings"),
            SETTINGS_FEATURE_ATTRIBUTES);
      return true;
   }
   return super.onOptionsItemSelected(item);
}

Splunk APM からサーバートレースコンテキストを追加する 🔗

Android RUMエージェントは、APMインストルメンテーションによって提供されるバックエンドデータを使用して、Server-Timing ヘッダーを通してサーバートレースコンテキストを収集します。ヘッダーを手動で生成したい場合もあるかも知れません。

To create the Server-Timing header manually, provide a Server-Timing header with the name traceparent, where the desc field holds the version, the trace ID, the parent ID, and the trace flag.

次のHTTPヘッダーを考えてみます:

Server-Timing: traceparent;desc="00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01"

この例は、以下のデータを含むコンテキストに解決します:

version=00 trace-id=4bf92f3577b34da6a3ce929d0e0e4736
parent-id=00f067aa0ba902b7 trace-flags=01

traceparent ヘッダーの値を生成するときは、それが以下の正規表現にマッチすることを確認します:

00-([0-9a-f]{32})-([0-9a-f]{16})-01

パターンにマッチしない値を持つサーバータイミングヘッダーは自動的に破棄されます。詳しくは、W3C ウェブサイトの Server-Timingtraceparent のドキュメントを参照してください。

次のステップ 🔗

This page was last updated on 2024年03月29日.