LoginSignup
0
0

More than 1 year has passed since last update.

Datadog RUMをiOSアプリに入れてみた

Last updated at Posted at 2023-03-24

前回 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...」と表示される。

新しく生成されたクライアントトークンがClient Tokens一覧画面で確認できる(やはり pubで始まるね)!

② 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ファイルの親フォルダーは DWARF_DSYM_FOLDER_PATH にある

  • 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!」に変わっていた。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0