Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Measuring the performance. Let’s own your analy...
Search
Hajime Sano
October 23, 2019
Technology
2
2.7k
Measuring the performance. Let’s own your analytics tool.
Fastlyを活用したリアルタイムアナリティクスツール「Ingestly」と、RUMを中心にWebパフォーマンス計測についてFastly YAMAGOYA Meetupでお話しした際の発表資料です。
Hajime Sano
October 23, 2019
Tweet
Share
More Decks by Hajime Sano
See All by Hajime Sano
メディア企業のデータエンジニアリング ~ 内製化と文化醸成 ~ NIKKEI TECH TALK #2
hsano
0
1k
Compute@Edge で機械学習モデルを動かす
hsano
1
340
顧客理解のための挑戦とは? (1st PartyData SHIFT〜Treasure Dataが提供するWebアナリティクスの高度化〜)
hsano
0
420
Fastly Meetup 3 / More about Ingestly
hsano
0
630
Other Decks in Technology
See All in Technology
Platform Engineering for Software Developers and Architects
syntasso
1
520
Engineer Career Talk
lycorp_recruit_jp
0
190
プロダクト活用度で見えた真実 ホリゾンタルSaaSでの顧客解像度の高め方
tadaken3
0
170
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
2
330
Amazon CloudWatch Network Monitor のススメ
yuki_ink
1
210
生成AIが変えるデータ分析の全体像
ishikawa_satoru
0
170
個人でもIAM Identity Centerを使おう!(アクセス管理編)
ryder472
4
230
iOSチームとAndroidチームでブランチ運用が違ったので整理してます
sansantech
PRO
0
150
rootlessコンテナのすゝめ - 研究室サーバーでもできる安全なコンテナ管理
kitsuya0828
3
390
障害対応指揮の意思決定と情報共有における価値観 / Waroom Meetup #2
arthur1
5
480
Flutterによる 効率的なAndroid・iOS・Webアプリケーション開発の事例
recruitengineers
PRO
0
110
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
870
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.2k
Automating Front-end Workflow
addyosmani
1366
200k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
Designing for humans not robots
tammielis
250
25k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
[RailsConf 2023] Rails as a piece of cake
palkan
52
4.9k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
109
49k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Become a Pro
speakerdeck
PRO
25
5k
Transcript
Measuring the performance. Let’s own your analytics tool. Hajime Sano,
Project Lead at Ingestly A maintanance free open-source real-time web analytics tool.
2 本日はご参加ありがとうございます。
3 自己紹介 • Digital Analytics & Data Marketing advocate •
Ingestlyプロジェクトを仕切ってます • リアルタイムなマーケティングデータ分析とデータ活用を 組織的に取り組む文化を広めたい • エンジニアリングとビジネスのバランス • アナリティクス原理主義 ◦ SiteTracker ◦ Omniture SiteCatalyst / Adobe Analytics ◦ Atlas ◦ Ingestly / Polytrek Hajime Sano @hjmsano
4 お話しするポイント 1. UXにWebパフォーマンスは重要 2. 広い視野でパフォーマンスを捉える 3. IngestlyとRUMについて
5 ページロード時間、計ってますか?
なぜWebパフォーマンスが重要? 6 • FTによる実験結果 • ページ表示速度を遅らせた場合の閲覧ペ ージ数の減少量をコントロールグループ と比較した • 3秒以上遅くした場合、2ページ以上閲覧
するユーザーが減少する • 速いは正義 https://medium.com/ft-product- technology/a-faster-ft-com- 10e7c077dc1c
パフォーマンス評価の手法 7 自分で測定 測定サービスを使う 全てのページビューで測定 各ブラウザの「タイムライン」タブ Google ChromeのAudit(Lighthouse) 古くはGomez、最近はSpeedCurve Real
User Monitoring ◦ 誰でも手元でできる ◦ 一切コストはかからない × 自分の環境のことしか分からない × 手間がかかる ◦ デバイスや地理条件の選択肢有り ◦ 定期的に自動計測できる × ユーザー行動への影響は不明 × 有償 ◦ ユーザー行動と関連付けできる ◦ 多種多様な条件の実データ × アクセスが無いとデータが来ない × データ量が圧倒的に多い
RUM: 実データを集めよう 8 • データの多様性 ◦ 機種・ソフトウェアバージョンの違い ◦ 地理条件・回線・通信経路 ◦
同じキャリアの同じ機種でも通信量が上限の人もいるし、デバイスのリソース状況も異なる • 行動との相関関係を評価できる ◦ 閲覧ページ数やコンバージョンへの到達状況 ◦ スクロール深度、読了率、動画視聴時間 ◦ Time-Spent、Time-to-Action
9 Fastly入れて速くなった… so what?
10 インフラや環境 ユーザー行動 ビジネス上の成果 RUMとその先の効果測定 コスト効率のような視点 従来のウェブアナリティクス
「速い」 と 「儲かる」 を繋ぐ 11 売上 コンバージョン 伝わる 速い 速いから閲覧ページ数が
増え、訴求機会が増える 訴求できるからコンバー ジョン数が増える コンバージョンが増える から売上も増える
「期待する成果」を明確に 12 売上 客数 客単価 新規 リピート 直帰率 アクション率 Time
to DOM Interactive キャッシュ ヒット率 … … 最上位・経営指標 事業部・部署の指標 施策ごとの指標 事業のパフォーマンス ← WEBパフォーマンス
13 何をどう計測する?
Critical Rendering Path RUM / CRP計測についてはGoogle のWeb Fundamentals内で詳しく 紹介されている 14
https://developers.google.com/web/fundamentals/performance/critical-rendering- path/measure-crp
15 日経電子版の例 https://hack.nikkei.com/blog/tech_book_fest04_performa nce_monitoring_rum/ キャッシュ設定の変更による 改善効果を、ABテストで評価 した事例が公開されている
16 様々な測定用API • Navigation Timing ◦ ブラウザ処理の大枠でタイムスタンプを得る ◦ ページ(ナビゲーション)全体 •
Resource Timing ◦ ページ内の個々の要素レベルでブレークダウンしたタイミング情報 • User Timing ◦ クライアント側で任意の処理を「マーク」して測定するもの • Server Timing ◦ サーバー側で任意の処理の時間を測定しhttpヘッダーに入れて返し、フロントで取得 他にもある。ハイレゾやLevel2も…
データを送る先が難しい 17 既存のアナリティクスツール 新たにツール導入 Pros Cons • 既に導入済みであることが多い • マーケティングデータと統合できる
• 従量課金、コスト効率悪い • データ構造の柔軟性が低い • 計測に特化できる • 二重投資 • 計測SDKの増加はパフォーマンスに 影響するので本末転倒 • Single Source of Truth にならない
18 そこで、Ingestly
既製のアナリティクスツールへの不満 • SDKがビミョー ◦ データ送信にdocument.write は論外、appendChild多用でReflow発生 ◦ メインスレッドで同期処理、ブロッキング、グローバル汚染 ◦ ちょっと凝った計測するのに実装が面倒
• エンドポイントがビミョー ◦ ロケーションが限定的、エッジで完結しない、レスポンスが遅い ◦ 個々のツールが1つ以上のCookieをセット、容量圧迫し通信量も増える • データの柔軟性が低い ◦ 任意の変数を受け付けない、事前設定必須、制約がある、ネストした構造が扱えない • 断片化とコスト増 ◦ ツール間で一意なデバイス特定ができない、データが繋がらない ◦ 複数部署 x 複数ツール でコストもSDKも増大、CX/UXのためのツールがCX/UX阻害している 19
Ingestlyとは… • 既製のアナリティクスツールに代わるもの • FastlyとBigQuery and/or Elasticsearchを組み合わせる • 低コストで高性能(無料で始められる) •
アプリケーションとしてはメンテナンスフリーを実現 • ニアリアルタイムな分析・データ利用が可能(1秒) • レポートUI無し、BI等を活用する前提 20
Ingestlyとは… 21 Ingestly Endpoint Ingestly Client JS エンドポイント用 カスタムVCL +
ログストリーミング設定 テーブルスキーマ & Mapping Template JS用計測SDK + add-ons (Survey, O2O)
不満を一挙解決 • SDKがイケてる ◦ sendBeacon / Fetch で通信 ◦ iframeでも動くのでメインスレッドの外に出せる
◦ RUMも含め様々な自動計測を内包して16KB • エンドポイントがシンプル ◦ Fastlyのエッジで処理、バックエンドを必要としない ◦ Cookie 2つ、ドメインやフラグ等のコントロールが可能 • データの柔軟性が高い ◦ DBに次第で使い勝手は変わるがスキーマレス、ネストに対応、変数増減は自由 • ツールを集約でき、しかも低コスト ◦ 様々な計測を単体でこなせるので、ツールを組み合わせる必要性があまりない ◦ BigQueryを使う場合で100万件の計測あたり$1程度、1億件で$106(1000万PV≒1億件) 22
基本的な仕組み 23 JS SDK Custom VCL Logging Schema Mapping •
sendBeaconでデータ送信 • Server-Side 1st Party Cookieをセット • HTTP 204 / No Contentを即答 • ログをJSON化 • BQまたはESにフィード • 適切な型で保存 • イベントから1秒程度で クエリー可能
24 重要なところはFastlyがやってくれる (私が書いたのSDKくらい…)
詳細はQiitaをご参照ください 25 https://qiita.com/hsano/items/dcb4be5bd210b54390be
SDKの特徴 • sendBeaconでデータ送信 ◦ データを送るためのモダンなAPI ◦ 非同期・unload中もキャセルされない(iOS Safari除く) ◦ FetchとXHRによるフォールバック有り
• iframeに入れられる ◦ window[self|parent|top]を指定できるのでiframeの中から親フレームを計測できる • 自動計測が充実 ◦ スクロール深度、読了、クリック、メディア再生、time-spent、RUMを自動計測 ◦ 組織横断での計測標準化が可能 • ネストしたデータに対応 ◦ 変数の値が階層構造の場合、JSON文字列として送信する ◦ DBがBQであればJSON文字列、ESであれば展開して格納する 26
対応するDB • BigQuery ◦ カラムナー ◦ SQLで集計 ◦ Data Studioや各種BI・ダッシュボードツールに連携
◦ 集計の柔軟性が高い • Elasticsearch ◦ ドキュメントストア ◦ Luceneで集計 ◦ Elastic StackとしてKibanaを利用する・Re:dash等ES対応しているBIもあり ◦ データ構造と(Kibana前提で)可視化の柔軟性が高い • その他 ◦ 原理的にはFastlyのLoggingにリストされている宛先にデータを供給できる 27
ITP2.3でも大丈夫 • 追跡期間が24時間または7日では短すぎる ◦ Safariのプライバシー機能「Intelligent Tracking Prevention」 ◦ 一定の条件下で1st Party
Cookieの有効期限が24時間にまで短くなる ◦ ユーザー行動の分析においては短すぎる • Server-Side 1st Party Cookieとして2年間有効 ◦ ITPはサードパーティツールによる追跡をブロックするもの ◦ サイトと同じFastlyでエンドポイントを構成し、1st Partyとなる ◦ FastlyをAレコードで自ドメインとすることで、DNS LookupをCNAMEより速くできる • LocalStorageによる一時保存 ◦ レスポンス処理の頻度を減らすため、期限が短いLocalStorageに値を保持する 28
IngestlyでRUM:実装 29 DOM Loading から… - Time to Interactiveまでの時差 -
DOM Content Loadedまでの時差 - 現在までの経過時間 SDKの初期化時にRUMを有効化
IngestlyでRUM:計測結果 30 RUM専用ビーコン • onLoadで送信 • RUM用なのでデータが揃い次第 即時計測 その他のビーコンにもパフォーマンス情報が乗る •
全てのビーコンに付帯 • スクロールや読了 x パフォーマンス情報 • Ingestly.trackAction() によるカスタムアクション 計測でも経過時間を測定
IngestlyでRUM:分析(Kibana) 31 RUM計測のビーコンをカウント 時間軸の粒度は自動 1秒未満、1〜2秒、2〜5秒… とレンジごとに集計
32 導入、難しいんでしょ?
33 導入はほぼコピー&ペースト 1. Fastlyでドメイン設定 2. カスタムVCLをコピー&ペースト 3. BigQueryにテーブル作成 4. BigQuery接続情報を指定
5. ログフォーマットをコピー&ペースト 6. SDKの設定を調整 7. SDKをサイトに導入 20分 10分
34 Custom VCL リポジトリからコピー&ペース ト 2行目のドメインを変更
35 Logging リポジトリからコピー&ペース ト
36 JS SDK jsを2つをページに組み込む page_code.js でエンドポイントや 自動計測の有効/無効を設定
37 Qiita と GitHubのREADMEをご参照ください https://qiita.com/hsano/items/7764583899e8 112782fc https://qiita.com/hsano/items/9e1684a211 9cd87313f6
今後やっていくこと • スクロール深度・読了の可視化をChrome拡張で実現 • BigQueryに入れたデータをCloud DataflowでEnrichment • クエリースニペットと分析に関するドキュメント整備 • SDK側処理の一部をカスタムVCLに置き換え
38
39 Thank you !