モバイルアプリの新バージョンのパフォーマンス劣化に気付くための仕組み
はじめに
LuupのSREチームに所属している、ぐりもお(@gr1m0h)です。
この記事は、LUUP のTVCM放映に合わせた一足早い「Luup Developers Advent Calendar 2024」の11日目の記事です。
LUUPでは、iOS、Androidのアプリを2週間単位でリリースしています。
つまり、2週間単位で新しいバージョンが利用できるようになるのですが、新しいバージョンが前バージョンよりも著しくパフォーマンスが悪くなっているかを早期に検知する必要があります。
今回は、これを検知するためにDatadogを使ってアラートをPdMと調整しながら作成したので、これについて紹介します。
アラート設定
まず、どのような設定にしているかをお話します。
文にしてみると以下のようになります。
- 「1週間前の前バージョンの値と新バージョンの値」を「1日1回チェックして150%以上リフトアップしていたらアラート通知を飛ばす」
それぞれ見ていきます。
1週間前の前バージョンの値と新バージョンの値
前バージョンがアクティブかつ、安定的に動いている期間の値を取得するために1週間前の値を取得しています。
また、「新バージョンの値」についても同様で、1週間前から今現在(評価タイミング)までの平均(75%ile)を取得し、前バージョンの場合は今現在の1週間前までの平均を取って比較しています。
何故、平均(75%ile)にしているかというと、モバイルアプリのLatency SLIと同じ設定を採用しています。
以下、記載のとおりですが、ユーザー側の都合に左右される状況でパフォーマンスを評価するため、LCPを参考に75%ileを設定しています。
さらに、スパイクの影響やデータ量の問題(評価機関のデータ量が少なすぎるために期待する比較ができない)を受けにくくするために、「平均」を採用し、1週間分の値で評価するようにしています。
ユーザー側の都合に左右される問題については、SLOに関係なくウェブのパフォーマンスを評価する際に考慮すべき問題です。そこで、Googleが提唱するユーザー体験の品質を測定するための指標であるCore Web VitalsのLCPに注目しました。この指標では、良いスコアを「75%ileの2.5秒以下」としています。ここから、ユーザー側の都合に左右される問題を除外するために75%ileの設定が必要と判断しました。
1日1回チェックして150%以上リフトアップしていたらアラート通知を飛ばす
常に評価するとノイズが発生する可能性もあり、対応コストの増加につながるため、1日1回の評価にしています。
また、2週間に1回のリリースであるため、2週目は評価しないようにDatadog MonitorのDowntimeを設定し、隔週で評価するようにしています。
Datadogによる実現
以下のDatadog Queryでこの通知を実現しています。
avg(last_1w):p75:trace.${resource_name}{version:${new_version}, env:production} - (calendar_shift(p75:trace.${resource_name}{version:${previous_version}, env:production}, '-1w', 'Asia/Tokyo') * 1.5) > 0
隔週実行するためのDowntimeは以下の設定で行っています。
Details
Monitor Tags: ${monotor_tag}
Scope: *
Recurrence: every 2 weeks on Tuesday, Wednesday, Thursday, Friday beginning at 3:04 AM GMT+9 for 1h
課題と今後
以下の運用上の課題があります。
- 前バージョン、新バージョンという情報をDatadog側で共通のメトリクスとして設定するのが困難
- リリースタイミングの変更への追従
前バージョン、新バージョンという情報をDatadog側で共通のメトリクスとして設定するのが困難
現在、どのように回避しているかというと、都度バージョンを変更することで回避しています。
このDatadog MonitorはTerraformで管理しているので、バージョンの更新をPRで行っています。
これを2週間に1回行っており、Toilになっています。
将来的には、iOS、AndroidのRepo側でTagをpushしたタイミングでTerraformを管理しているRepoにバージョン変更のPRを自動で出すようにしたいと思っています。
リリースタイミングの変更への追従
現在、どのように回避しているかというと都度、状況を見て対応しています。
開発都合や祝日などでリリースタイミングがズレると、データ量が少なくなり評価に影響が出ます。これを回避するためにDatadog MonitorのMuteを都度行っています。
将来的には、iOS、Androidのエンジニアに追従を移管したいと思っています。
さいごに
モバイルアプリの新しいバージョンをリリースした際のパフォーマンス劣化に気付くためのDatadog Monitor設定について紹介しました。
なにかの参考になれば幸いです。
最後に、弊社のプロダクト開発やSRE、使用技術に興味を持っていただけた方は、以下のリンクからお気軽にご連絡ください!私のX(Twitter)アカウントでもDMを受け付けています。
副業や転職をお考えの方だけでなく、気軽に話を聞きたいという方も大歓迎です!
Discussion