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
など)をスパンに追加することで、ユーザーを特定することができます。
The following examples show how to add identification metadata as global attributes when initializing the agent or after initializing it, depending on whether user data is accessible at initialization:
初期化時に識別メタデータを追加する 🔗
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-Timing
と traceparent
のドキュメントを参照してください。
次のステップ 🔗
カスタム属性の追加、環境やアプリケーションに合わせたインストルメンテーション、サンプリングのカスタマイズなどについては、Splunk Android RUM インストルメンテーションを設定する を参照してください。
データが Splunk RUM for Mobile インスタンスにあることを確認するには、データが入力されていることを確認する を参照してください。
トラブルシューティングするには、Splunk Observability Cloud 用 Android インストルメンテーションのトラブルシューティング を参照してください。