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
RubyのWebアプリケーションを50倍速くする方法 / How to Make a Ruby Web Application 50 Times Faster
hogelog
3
940
スクラム成熟度セルフチェックツールを作って得た学びとその活用法
coincheck_recruit
1
140
【Startup CTO of the Year 2024 / Audience Award】アセンド取締役CTO 丹羽健
niwatakeru
0
1k
初心者向けAWS Securityの勉強会mini Security-JAWSを9ヶ月ぐらい実施してきての近況
cmusudakeisuke
0
120
AWS Lambdaと歩んだ“サーバーレス”と今後 #lambda_10years
yoshidashingo
1
170
Application Development WG Intro at AppDeveloperCon
salaboy
0
190
誰も全体を知らない ~ ロールの垣根を超えて引き上げる開発生産性 / Boosting Development Productivity Across Roles
kakehashi
1
230
強いチームと開発生産性
onk
PRO
34
11k
【令和最新版】AWS Direct Connectと愉快なGWたちのおさらい
minorun365
PRO
5
750
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
2
310
適材適所の技術選定 〜GraphQL・REST API・tRPC〜 / Optimal Technology Selection
kakehashi
1
400
Security-JAWS【第35回】勉強会クラウドにおけるマルウェアやコンテンツ改ざんへの対策
4su_para
0
180
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Site-Speed That Sticks
csswizardry
0
25
GraphQLとの向き合い方2022年版
quramy
43
13k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
YesSQL, Process and Tooling at Scale
rocio
169
14k
Done Done
chrislema
181
16k
Designing Experiences People Love
moore
138
23k
The Cost Of JavaScript in 2023
addyosmani
45
6.7k
Building an army of robots
kneath
302
43k
A designer walks into a library…
pauljervisheath
204
24k
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 !