前回 Datadogを最も基本的な形でiOSに導入した。数行のコードでSDKを初期化できて、ログを出す度に呼べばいい。単純で良い感じ。
前回は Log & Tracing機能のみのモードでDatadog SDKを利用した。そのために Configurationの builderUsing(clientToken:environment:)
を利用した。 clientTokenを自分で生成しました (Datadogのコンソール > Organization Settings > Client Tokens > New Client Token)。
今回はRUM (Real time user monitoring)という機能を検証したい。そのために ConfigurationのbuilderUsing(rumApplicationId:clientToken:environment:)
メソッドを利用する。Log & Tracing機能のみのモードと違ってclient tokenを自分で作成しない。RUMアプリケーションを作成する過程で自動的にclient tokenも生成される 新application idと新client tokenをセットで用いる必要がある。
Datadog SDKのソースがわかりやすいので Githubでみたい方どうそ!
① Datadogコンソール上でRUM Applicationを作成
RUM機能を使う場合は Datadogサイト上でアプリケーションを作成する。RUM ApplicationIdの生成は UX Monitoring > RUM Applications > New Application. 「New Application」ボタン押下すると セットアップ方法が長い1ページで案内されてわかりやすい。 作成されたApplication idとclient tokenで通信があるときまで ステップ3の「Verify your installation」で「Waiting for data...」と表示される。


② RUM機能ありでSDKの初期化の実装
上記のコードの通りに実装する。新しく生成されたApplication IDと新しいclient tokenを利用する。
import Datadog
/// Initialize Datadog for RUM
Datadog.initialize(
appContext: .init(),
trackingConsent: .granted,
configuration: Datadog.Configuration
.builderUsing(
+ rumApplicationID: SecretsVault.current.dataDogRumApplicationId,
clientToken: SecretsVault.current.datadogClientToken,
environment: SecretsVault.current.datadogEnvironment
)
+ .trackUIKitRUMViews()
+ .trackUIKitRUMActions()
+ .trackRUMLongTasks()
.build()
)
iOSアプリ起動し動作してみて Chromeで確認すると「Waiting for data...」が「Data is reporting successfully」に変わり、正常稼働確認完了!

③ [オプション] クラッシュレポート収集
iOSアプリ開発者ならば クラッシュレポートをXcodeで見ることが多いと思うが、ザードパーティのツールでみたい場面もある。
- iOS開発者ではない方(必ずしもXcode環境を整えることできない方々 お客様、プロジェクトマネージャー、サーバーエンジニアなど)がクラッシュの傾向を確認したい場面
- Xcodeのクラッシュレポートに十分な情報がない場面。Xcodeのクラッシュレポートに情報を付加することができない。完全にannonymousで利用者のプライバシー的にいいが、サーバーのログなどと紐つけたい、関係性を見つけたい場合もある。利用者のプライバシーを保ちながら調査のしやすさを向上する端末id,requestidなどを追加したい場面
Datadog SDKでクラッシュレポート収集の設定
Datadog - iOS Crash Reporting and Error Tracking正式ガイドの通り 実装する。(DatadogCrashReportingをターゲットに追加する必要がある)
import Datadog
+ import DatadogCrashReporting
/// Initialize Datadog for RUM
Datadog.initialize(
appContext: .init(),
trackingConsent: .granted,
configuration: Datadog.Configuration
.builderUsing(
rumApplicationID: SecretsVault.current.dataDogRumApplicationId,
clientToken: SecretsVault.current.datadogClientToken,
environment: SecretsVault.current.datadogEnvironment
)
.trackUIKitRUMViews()
.trackUIKitRUMActions()
.trackRUMLongTasks()
+ .enableCrashReporting(using: DDCrashReportingPlugin())
.build()
)
Symbolication用にDSYMのアップロード
iOSの場合は symbolication処理が必要だから symbol情報を持つDSYMファイルのアップロードが必要。
-
当然ながらDSYMファイルが生成される設定になっていることが必要。デフォルトではXcodeのReleaseビルドではDSYMファイルが生成されるためOK(AppStore用のビルド(アーカイブ)はデフォルトでReleaseのConfigurationを使うため)。
-
DSYMファイルのアップロードコマンドを実行するにはAPI Keyが必要。Organization Settings > API Keysで作成可能
上記の情報でコマンドが打てる
export DATADOG_API_KEY="<API KEY>"
npx @datadog/datadog-ci dsyms upload /Users/ignacio/Library/Developer/Xcode/DerivedData/DataDogExampleApp-ebhfyomivkoozheszhzupvdbvtan/Build/Products/Debug-iphoneos
④ [オプション] クラッシュレポートを見る
クラッシュが発生した後で Datadogサイトでエラー情報を見つけることができる。
-
Error Tracking画面から: UX Monitoring > Error Trackingからアクセス
-
Analysis画面から: UX Monitoring > Analysis > Sessions and Replaysタブで In Errorsを選択し、isCrashで絞る
ハマったポイント
- RUMアプリケーションを作成して 動作確認は問題なさそうに見えるが、ずっと「Waiting for data...」表示のまま、どうやらSafariで現在2023/03/22時点で正常に動いていない。Chromeに同じURLをロードしたら「Data is reporting successfully!」に変わっていた。