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.id
や enduser.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();
}
});
スクリーン名のカスタマイズ 🔗
注釈
The @RumScreenName
annotation is deprecated in Splunk RUM as of February 4, 2025. Although this annotation continues to function, it will be removed in a future version. There is no replacement for this annotation.
デフォルトでは、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
ヘッダーを通してサーバートレースコンテキストを収集します。ヘッダーを手動で生成したい場合もあるかも知れません。
Server-Timing
ヘッダーを手動で作成するには、traceparent
という名前の Server-Timing
ヘッダーを用意します。desc
フィールドには、バージョン、トレース ID、親 ID、トレースフラグが格納されます。
次の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-Timing
と traceparent
のドキュメントを参照してください。
次のステップ 🔗
カスタム属性の追加、環境やアプリケーションに合わせたインストルメンテーション、サンプリングのカスタマイズなどについては、Splunk Android RUM インストルメンテーションを設定する を参照してください。
データが Splunk RUM for Mobile インスタンスにあることを確認するには、データが入力されていることを確認する を参照してください。
トラブルシューティングするには、Splunk Observability Cloud 用 Android インストルメンテーションのトラブルシューティング を参照してください。