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.id
や enduser.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
オーバーロードは、String
、Error
、NSException
で利用できます。
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-Timing
と traceparent
のドキュメントを参照してください。
次のステップ 🔗
カスタム属性の追加、環境やアプリケーションに合わせたインストルメンテーション、サンプリングのカスタマイズなどについては、Splunk iOS RUM インストルメンテーションを設定する を参照してください。
データが Splunk RUM for Mobile インスタンスにあることを確認するには、データが入力されていることを確認する を参照してください。
トラブルシューティングするには、Splunk Observability Cloud の iOS インストルメンテーションのトラブルシューティング を参照してください。