wwwave'sTechblog |ウェイブのエンジニアブログ

株式会社ウェイブのエンジニアによるテックブログです。会社の話や Ruby、Vue.jsについてなど技術的な話をしていきたいと思います。

株式会社ウェイブの人事部ブログです。社内の雰囲気やイベント、福利厚生などについてお伝えいたします!

株式会社ウェイブのエンジニアブログです。 エンジニアの目線から会社の話や技術的な話をしていきます。

Amazon CloudWatch RUM と Grafana で Web Vitals の監視

f:id:sys_wwwave:20211213155908p:plain

ウェイブSREの白戸です!

今回は、AWS re:Invent 2021(11月29日)にて発表された Amazon CloudWatch RUM を Coolmic に導入、及び Grafana での監視を行いましたので、ご紹介いたします!

↓ Amazon CloudWatch RUM の存在を知った時の白戸。

f:id:sys_wwwave:20211213153558p:plain

はじめに

本記事では、CloudWatch RUM の導入前に知りたかった情報を主に記載しております。
▫ CloudWatch RUM の料金は、10万イベントごとに1USDだが、1度のサイトアクセスで何イベント発行される?
▫ CloudWatch Logs に収集されるデータサイズは何GBになる?
▫ etc

また、『ウェイブSREが普段どんな実務をしているのか?』を読者の方に少しでもお伝えできればと思います😚

目標

以下の2つが目標ですが、まずは①を達成するべく、RUM を導入しました。
①フロントエンドパフォーマンス悪化自動検知
②フロントエンドパフォーマンスが売上へ与える影響の可視化

アーキテクチャ

CloudWatch RUM 用のスクリプトはGTMから配信しました。

f:id:sys_wwwave:20211213152438p:plain

CloudWatch RUM 設定

コスト削減のため、以下の設定を行いました。
▫ 測定対象を、Performance telemetry のみ有効
▫ 測定対象ページを、主要ページのみ有効
▫ 集計サンプル数を、1 / 100 にして間引き対応

上記すべて、CloudWatch RUM で設定できます。
ただ、/titles/[:id] みたいな Path を正規表現で設定する方法がわからなかったので、GTMで対応しました。

CloudWatch RUM イベント数

Google Chrome の DevTools で確認可能でした。
(以下、1回のアクセスで11イベント発行された例)

f:id:sys_wwwave:20211213113915p:plain

実際に発行されるイベント数は、導入してみないとわからないので、集計サンプル数を間引きして初期導入することをオススメします。

CloudWatch Log データサイズ

あくまで目安ですが、50万イベントで、60MBくらいでした。
サイズが小さかったので、長期保存もできそうです🙌

CloudWatch Log データ構造

event_type ごとに関連情報が含まれております。
例えば、LCPの場合、event_type が com.amazon.rum.largest_contentful_paint_event となっており、event_details.value に実際の数値(ms)が含まれていました。
以下、ログの詳細です(一部省略)

{
    "event_type": "com.amazon.rum.largest_contentful_paint_event",
    "metadata": {
        "browserName": "Chrome",
        "browserVersion": "96.0.4664.92",
        "osName": "Android",
        "osVersion": "11",
        "deviceType": "mobile",
        "domain": "coolmic.me",
        "pageId": "/episodes/1111",
    },
    "event_details": {
        "version": "1.0.0",
        "value": 1010.299
    }
}

Grafana ダッシュボード

主要ページごとにWeb Vitals(LCP, FID, CLS)を可視化しました。
かなり改善し甲斐のある数値でした😇

f:id:sys_wwwave:20211213120048p:plain

Grafana アラート

LCPのアラートを例にすると、『LCPの75パーセンタイルが、5秒以上を5分間継続した場合、アラート発行』にしました。
現状のパフォーマンスが良いとは言い切れない事実を受け入れつつ、悪化を防ぐための設定です。
最終的には、『LCPの75パーセンタイルが、2.5秒以上を5分間継続した場合、アラート発行』にできれば理想です💪

75パーセンタイルにした理由としては、Googleの指標と合わせました。
Googleが閾値を75パーセンタイルにした背景などは、公式記事をご参照下さい。

まとめ

今回の対応によりフロントエンドのパフォーマンス悪化を防ぐことはできそうです。
展望として、フロントエンドパフォーマンスが売上へ与える影響の可視化も行うことで、パフォーマンスに対する意識をチーム全体で底上げできればと思います!

トップに戻る