モバイルチームでDatadogツールを調査しながら学んだこと

この記事は「[Commune Advent Calendar 2024 シリーズ３](https://adventar.org/calendars/9979)」の13日目の記事です。

# はじめに
こんにちは。Communeモバイルチームのエンジニアです。
今回は、コミューンモバイルチームが使用しているモニタリングツール「Datadog（データドック）」について調査を行い、そこで学んだことを共有したいと思います。

# 背景
既存のモニタリング体制では、アプリで特定のエラーが発生した際、Datadogモニタリングがこれを検知し、Slackに通知を送信する仕組みを導入していました。しかし、通知が漏れたり、内容が不正確になるケースが多く見られました。この課題を解決し、モニタリング機能を改善するために、問題の調査を開始しました。

# どこから始めるべきだったのか
当初、Datadogに関する背景知識が不足していたため、まずはDatadogの必要な機能を分析することから始めました。Datadogは多様なモニタリング機能を提供していますが、モバイルチームでは、アプリの状態をリアルタイムでモニタリングし、ユーザー行動データを分析できるツールが求められていました。この要件に関連する機能が**RUM(Real User Monitoring)** でした。RUMでは、パフォーマンスモニタリングやエラートラッキングといった機能が利用可能です。

# どのようなモニタリングを使用したのか
RUMモニタリングは、Datadogの「Monitors」メニューから「Real User Monitoring」を選択することで、新しいモニタリングを作成できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957749/084665fe-d3c9-ed2d-b930-09ec10f5373d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957749/50921102-5e83-a0f2-0e30-8a6621792cda.png)

一方、エラーの場合は「RUM-Error Tracking」メニューから簡単にモニタリングを作成できます。「Create Monitor」ボタンを押すだけで設定が完了するため、こちらを活用することをお勧めします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957749/116a759b-5ba1-9e65-8cbe-b2bf76f4f109.png)

Datadogのエラー監視は、2種類の通知を提供します。
- **新しいイシュー**: 新たに発見されたバグを通知し、問題の予防を支援します
- **重大な問題**: アプリケーションやサービスに深刻な影響を与えるバグを即時に通知します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957749/d93fa76f-2589-19bc-01e6-e39a83e1dc72.png)

調査過程でさまざまなモニターや方式を検討しましたが、パフォーマンスモニタリングなどすべての通知を有効にすると、チームに過度な負担をかける可能性があると判断しました。そこで、新しいイシューと重大なイシューに対するエラーモニタリングを優先して導入することを決定しました。

# 学んだこと
### 1. Slackに送信されたDatadogモニタリングメッセージで、エラーメッセージの内容が破損または不完全に表示される問題が発生しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957749/98ab79c8-7449-a4ec-39dd-6e8283d39014.png)

- **原因**：エラーメッセージの変数 `{{rum.attributes.error.message}}` を設定したことが問題でした。この変数を使用すると、Datadogの通知で文字エスケープ処理が必要なため、正しく表示されないエラーが発生します。Datadogの[変数 - 文字エスケープ](https://docs.datadoghq.com/ja/monitors/notify/variables/?tab=is_alert#%E6%96%87%E5%AD%97%E3%82%A8%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%97)ガイドに従い、三重括弧で変数を囲む必要があります
- **解決**：エラーメッセージの変数 `{{rum.attributes.error.message}}`を`{{{rum.attributes.error.message}}}`と三重括弧で囲むことで、問題が解決しました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957749/cfa2eab2-feaf-0652-2922-0a09bcd4eae2.png)

### 2. モニタリング中に、過去のデータ記録が予期せず消失する現象を発見しました。
AlertおよびWarningメッセージの基準を決めるために過去のデータを分析していたところ、以前のデータが消える現象が繰り返し発生していることが判明しました。
- **原因**: データの保存期間に対する理解が不足していたことが原因でした
- **解決**:RUMのError Trackingデータの保存期間は30日です。そのため、特定の期間のデータを調査する際には、保存期間を考慮して注意が必要です。モバイルチームの場合、保存されたデータを基準にリスクが大きいエラーケースの発生量を基準に作業を進めました

+) 参照） [Datadog Data Collection, Resolution, and Retention](https://docs.datadoghq.com/developers/guide/data-collection-resolution-retention/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957749/cb1f2c29-0e6b-f789-8308-83802723fecb.png)

### 3. errorEventMapperメッセージが簡潔に漏れる場合
- **原因**:データドックSDKのバグが原因でした
- **解決**:データドックサポートチームと話し合った後に提供された対応策を適用し、SDKを最新バージョンにアップデートして問題を解決しました。 そのため、問題予防のためにできるだけSDKを最新バージョンに保つことが重要です

### 4. その他、自動化について
- **原因**: コミューンの場合、JIRAを通じてタスクやバグに関する案件を作成しています。 モニタリングメッセージを確認した後、JIRAケットを作成する過程を自動化しようとしましたが、スラックではアドミンアカウントのみチケット作成が可能で、すべてのメンバーがこれを行うことができませんでした
- **解決**:プロダクトマネージャーの助けを借りて、Zapierを活用してエクセルシートをベースにチケットが自動生成されるワークフローを構築し、問題を解決しました

# 振り返り
コミューンに入社して初めてデータドックモニタリングを使用しながら、0から1を作り出すために多くの調査を行いました。 RUMの各指標を分析し、直接ツールを活用しながら経験を積みました。

解決が難しく見えた問題もデータドックサポートチームの助けで解決することができ、メンバーのフィードバックを通じて予想できなかった観点から問題を眺めながら改善方案を捜し出した経験も多かったです。 特に、プロダクトマネージャーと協力してZapierツールを活用して自動化問題を解決したことはとても新しい経験でした。

最後に、モニタリングシステムを構築して作動できるように助けてくれたチームメンバーに感謝の言葉を伝えながらこの文を終わります。