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

iOSアプリケーションを手動でインストルメンテーションする 🔗

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

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

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

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

options.spanFilter = { spanData in
   var spanData = spanData
   if spanData.name == "DropThis" {
      // Spans with the name "DropThis" aren't sent
      return nil
   }
   var atts = spanData.attributes
   // Change values for all URLs
   atts["http.url"] = .string("redacted")
   return spanData.settingAttributes(atts)
}

注釈

スパンフィルターリングはObjective-Cでは機能しません。

グローバル属性の管理 🔗

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

次の例は、コード内でグローバル属性を定義する方法を示しています:

import SplunkOtel
//..
SplunkRumBuilder(realm: "<realm>", rumAuth: "<rum-token>")
// You can set the globalAttributes option to the map at initialization
   .deploymentEnvironment(environment: "<environment>")
   .setApplicationName("<your_app_name>")
   .build()

// You can also call the ``setGlobalAttributes`` function
// anywhere in your code using the same map
SplunkRum.setGlobalAttributes([])

// To remove a global attribute, pass the key name to removeGlobalAttribute
SplunkRum.removeGlobalAttribute("key2")

手動でスクリーン名を変更する 🔗

デフォルトでは、iOS RUM ライブラリは ViewController で設定された名前を収集します。setScreenName 関数を使用することで、アプリケーションのスクリーン名をカスタマイズできます。カスタム名は、次に setScreenName を呼び出すまで保持されます。

次の例は、アカウント設定画面の名前をカスタマイズする方法を示しています:

SplunkRum.setScreenName("AccountSettingsTab")

setScreenName 関数を呼び出すと、カスタム名の上書きを避けるため、スクリーン名の自動インストルメンテーションが解除されます。

注釈

アプリケーションのすべてのビューで setScreenName を使用し、データの名前の不統一を避けます。

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

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

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

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

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

import SplunkOtel
//..
SplunkRumBuilder(realm: "<realm>", rumAuth: "<rum-token>")
   .globalAttributes(globalAttributes: ["enduser.id": "user-id-123456"])
   .build()

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

SplunkRum.setGlobalAttributes(["enduser.id": "user-id-123456"])
SplunkRum.setGlobalAttributes(["enduser.id": "128762"]);
SplunkRum.setGlobalAttributes(["enduser.role': "premium"]);

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

OpenTelemetry Swift API を使って、iOS アプリケーションで起こっているカスタムイベントをレポートすることができます。

次の例では、OTel Swift API を使用して、時間を設定したい関数をレポートする方法を示します:

func calculateTax() {
   let tracer = OpenTelemetrySDK.instance.tracerProvider.get(instrumentationName: "MyApp")
   let span = tracer.spanBuilder(spanName: "calculateTax").startSpan()
   span.setAttribute(key: "numClaims", value: claims.count)
   span.setAttribute(key: "workflow.name", value: "<your_workflow>") // This allows the event to appear in the UI
 //...
 //...
   span.end() // You can also use defer for this
}

Alternatively, you can also use the following snippet:

func calculateTax() {
   let tracer = OpenTelemetry.instance.tracerProvider.get(instrumentationName: "MyApp", instrumentationVersion: nil)
   let span = tracer.spanBuilder(spanName: "calculateTax").startSpan()
   span.setAttribute(key: "numClaims", value: claims.count)
 //...
 //...
   span.end() // You can also use defer for this
}

この他の例では、持続時間のないイベント、つまり一瞬に起こるイベントを記録する方法を示しています:

let dictionary: NSDictionary = [
                  "attribute1": "hello",
                  "attribute2": "world!",
                  "attribute3": 3
]
SplunkRum.reportEvent(name: "testEvent", attributes: dictionary)

エラー報告の設定 🔗

reportError 関数を使用して、処理されたエラー、例外、メッセージを報告することができます。

次の例は、example_error を報告する方法を示しています:

SplunkRum.reportError(example_error)

reportError オーバーロードは、StringErrorNSException で利用できます。

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

iOSの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 のドキュメントを参照してください。

次のステップ 🔗

このページは 2024年07月09日 に最終更新されました。