Copyright © 2023 Bitkey Inc. All right reserved.フロントエンドにおける Observability株式会社ビットキー 北村 順 2023/06/13
View Slide
Copyright © 2023 Bitkey Inc. All right reserved.2Outline1. 話すこと・話さないこと2. ざっくりアーキテクチャ全体像3. Metrics/Logs/Traces + Profiles for フロントエンド4. 実施した改善とその結果
Copyright © 2023 Bitkey Inc. All right reserved.3自己紹介北村 順Jun Kitamura2015.42019.42021.7株式会社フロムスクラッチ(現・株式会社データX)に入社SaaSマーケティングツールの導入エンジニア・インフラエンジニアを担当ビットキーへ参画最初の製品リリースとほぼ同時期に入社カギのプラットフォーム: bitkey platform や顔認証プロダクトの開発に従事SREチームの立ち上げ。SLO/SLIやインシデントレスポンスなど様々な運用設計、構築、ツール導入を実施し、信頼性向上へ貢献。2023.06 SREとしてこれまでに、構築してきた様々な施策・仕組みを各事業・プロダクトへと適切に還元していく活動を実施中。
ઃཱɹɹɿ20185݄ɹڌɹɹɿ౦ژɾେࡕɾԬɾٶ࡚ࢿຊۚɹɿ14,946,908,300ԁʢ202212݄31࣌ɹࢿຊ४උؚۚʣैۀһɿ233໊
5
6workhubͷશͯΛͭͳ͛ΔΞϓϩʔνશͯͷεςʔΫϗϧμʔ͕͍͍ͨػೳ͕͜͜ʹʮIVCʯ͔ͩΒ࣮ͦ͜ݱͰ͖Δຊʹศརͳz৽͍͠ಇ͖ํzࡉ͔ʹઃఆΛબΔ৺Α͍αʔϏεར༻ମݧ…and moreϏϧΞΫηείϯτϩʔϧ͋ΒΏΔ൶ΛҰݩཧిؾৣࣗಈυΞɺΤϨϕʔλʔ͔Βϑϥούʔήʔτ·ͰɺશͯͷηΩϡϦςΟΛworkhubʹ࿈ܞɻϗςϦϯάɾ"#8χϡʔϊʔϚϧͳಇ͘ॴͷߏஙQRϏʔίϯͰҐஔΛఆɻ࠲੮ʹՃ͑ɺϩοΧʔ༧ෳڌରԠՄೳSEQMBDFԣஅݕࡧ͙͢ʹݟ͔ͭΔɺΛ࣮ݱ͢ΔਤγΣΞΦϑΟεݸࣨϒʔεͳͲɺαʔϏεΛ·͍ͨͰݕࡧɾ༧ɻݸผʹϩάΠϯͯ͠୳͢खؒ͏ඞཁ͋Γ·ͤΜɻSEQMBDFӡӦࢧԉू٬͔ΒӡӦ·ͰΛแׅཧձһɾܖཧ͔ΒೖୀࣨɺձٞࣨͳͲͷར༻࣮ूܭ͔Βܾࡁ·Ͱɻ؆қͳ্ཱͪ͛Ͱ༨ΤϦΞͷऩӹԽʹɻϑϨΩγϒϧͳೝূํ๏༻్ɾਓʹԠͯ͡࠷దԽΧʔυQRɺإೝূͳͲΤϦΞɾࢪઃ༻్ʹԠͨ͡ೖࣨݖݶΛ࣮ݱɻࣾһ͚ͩͰͳ͘ɺήετۀऀɺϏϧཧऀʹɻࠞࡶঢ়گҐஔঢ়گఆີΛճආ͢Δۭؒͮ͘ΓAIΧϝϥͱ࿈ಈ͠ʮਓܕʯΛݕɻͦͷΤϦΞͷࠞࡶঢ়گΛՄࢹԽ͠ɺີΛආ͚͍ۭؒ͢Λԋग़ɻແਓडձٞࣨ༧ඇର໘͔ͭߴ͍ϗεϐλϦςΟQRͰͷड͔Βձٞࣨ༧ɾղৣ·Ͱ࿈ಈɻηΩϡϦςΟΛҡ࣋ͭͭ͠ɺ҆શͳඇର໘ແਓडΛ࣮ݱɻ4BB4ΞυΠϯ࿈ܞ׳Ε͠ΜͩπʔϧͰεϜʔζʹਁಁΧϨϯμʔɾνϟοτͳͲ׳Ε͠Μͩπʔϧͱͦͷ··ܨ͕Γɺࣗવʹਁಁͯ͠ΘΕΔπʔϧʹɻαʔϏεͭͳ͕ΔεϚʔτϏϧϥϯνୡɾਗ਼ͳͲՄࢹԽɾੳϓϥοτϑΥʔϜར༻࣮σʔλΛجʹͨ͠࠷దͳۭؒ׆༻ϚωδϝϯτμογϡϘʔυใΛू͠ɺࢄͨ͠ಇ͖ํΛέΞ֤ࣄۀͰͷऔΓΈɾ࣮ɹʙWorkspace Domainʙ
Copyright © 2023 Bitkey Inc. All right reserved.71. 話すこと・話さないこと
Copyright © 2023 Bitkey Inc. All right reserved.81. 話すこと・話さないことこんなこと思ったことないですか?
Copyright © 2023 Bitkey Inc. All right reserved.91. 話すこと・話さないこと・バックエンドのリファクタリング・バグ修正しても、事象が改善しない!・クエリパフォーマンスチューニングしても、画面が遅い!開かない!・一応、ボトルネック”っぽい”ところをみて改善したつもりのはずなのに。。。こんなこと思ったことないですか?
Copyright © 2023 Bitkey Inc. All right reserved.101. 話すこと・話さないこと・バックエンドのリファクタリング・バグ修正しても、事象が改善しない!・クエリパフォーマンスチューニングしても、画面が遅い!開かない!・一応、ボトルネック”っぽい”ところをみて改善したつもりのはずなのに。。。こんなこと思ったことないですか?ユーザー視点で考えられているだろうか?
Copyright © 2023 Bitkey Inc. All right reserved.111. 話すこと・話さないこと話すこと・GCP x Datadog を利用したフロントエンドのオブザーバビリティの観点について・Metrics/Logs/Traces + Profiles の 4 つの柱を利用して SREs の私(not フロントエンドエンジニア)が、どういうことを考えて、何をしたのか。
Copyright © 2023 Bitkey Inc. All right reserved.121. 話すこと・話さないこと話すこと話さないこと・フロントエンド以外のオブザーバビリティ・詳細な設定・改善方法について・GCP x Datadog を利用したフロントエンドのオブザーバビリティの観点について・Metrics/Logs/Traces + Profiles の 4 つの柱を利用して SREs の私(not フロントエンドエンジニア)が、どういうことを考えて、何をしたのか。
Copyright © 2023 Bitkey Inc. All right reserved.132. ざっくりアーキテクチャ全体像
Copyright © 2023 Bitkey Inc. All right reserved.14API2. ざっくりアーキテクチャ全体像CloudLoad BalancingCloud RunCloud FunctionsDatabaseAlloyDBFirestoreContentsCloud StoragefrontendʢSPAʣFirebasehostingHardwareRUM Logsdd-agentCloud RunAPMLoggingError Tracking Monitor
Copyright © 2023 Bitkey Inc. All right reserved.15API2. ざっくりアーキテクチャ全体像CloudLoad BalancingCloud RunCloud FunctionsDatabaseAlloyDBFirestoreContentsCloud StorageHardwareRUM Logsdd-agentCloud RunAPMLoggingError Tracking MonitorfrontendʢSPAʣFirebasehosting
Copyright © 2023 Bitkey Inc. All right reserved.163. Metrics/Logs/Traces + Profiles for フロントエンド
Copyright © 2023 Bitkey Inc. All right reserved.173. Metrics/Logs/Traces + Profiles for フロントエンドref. https://learning.oreilly.com/library/view/distributed-systems-observability/9781492033431/ch04.html1 Metrics2 Logs3 Traces時間の経過とともに発生した個別のイベントの不変のタイムスタンプ付き記録一定の時間間隔で測定されたデータを数値で表現したもの分散システムを介したエンドツーエンドのリクエストフローをエンコードする因果関係のある一連の分散イベントを表現したもの「サービス間」でのボトルネック特定に有効
Copyright © 2023 Bitkey Inc. All right reserved.183. Metrics/Logs/Traces + Profiles for フロントエンドref. https://learning.oreilly.com/library/view/distributed-systems-observability/9781492033431/ch04.html1 Metrics2 Logs3 Traces分散システムを介したエンドツーエンドのリクエストフローをエンコードする因果関係のある一連の分散イベントを表現したもの「サービス間」でのボトルネック特定に有効4 ProfilesCPU 使用率や関数呼び出しの頻度と時間などプログラムの複雑さをコードレベル、かつ時間ベースでその表現したもの「サービス内」のボトルネック特定に有効時間の経過とともに発生した個別のイベントの不変のタイムスタンプ付き記録一定の時間間隔で測定されたデータを数値で表現したもの
Copyright © 2023 Bitkey Inc. All right reserved.19Metrics
Copyright © 2023 Bitkey Inc. All right reserved.20MetricsʲಡΈࠐΈͷύϑΥʔϚϯεʳϖʔδಡΈࠐΈ։͔࢝ΒϝΠϯίϯςϯπ͕ಡΈࠐ·ΕΔ·Ͱͷ࣌ؒ2.5 sec ҎԼ͕Goodʂʲࢹ֮తͳ҆ఆੑʳϖʔδͷදࣔதʹൃੜͨ͠༧ظ͠ͳ͍ϨΠΞτγϑτΛఆྔԽͨ͠0.1 ҎԼ͕GoodʂʲಡΈࠐΈͷԠੑʳϢʔβʔ͕࠷ॳʹϖʔδΛૢ࡞ͨ͠ͱ͖͔Βͦͷૢ࡞ʹԠͯ͡ϒϥβʔ͕࣮ࡍʹΠϕϯτ ϋϯυϥʔͷॲཧΛ։࢝͢Δ·Ͱͷ࣌ؒ0.1 sec ҎԼ͕Goodʂhttps://web.dev/i18n/ja/vitals/
Copyright © 2023 Bitkey Inc. All right reserved.21MetricsʲಡΈࠐΈͷύϑΥʔϚϯεʳϖʔδಡΈࠐΈ։͔࢝ΒϝΠϯίϯςϯπ͕ಡΈࠐ·ΕΔ·Ͱͷ࣌ؒ2.5 sec ҎԼ͕Goodʂʲࢹ֮తͳ҆ఆੑʳϖʔδͷදࣔதʹൃੜͨ͠༧ظ͠ͳ͍ϨΠΞτγϑτΛఆྔԽͨ͠0.1 ҎԼ͕Goodʂhttps://web.dev/i18n/ja/vitals/https://web.dev/inp/݄͔Β'*%ʢ'JSTU*OQVU%FMBZʣ͔Β*/1ʢ*OUFSBDUJPOUP/FYU1BJOUʣʲಡΈࠐΈͷԠੑʳ
Copyright © 2023 Bitkey Inc. All right reserved.22フィールドデータ・ラボデータ
Copyright © 2023 Bitkey Inc. All right reserved.23Metrics - フィールドデータ・ラボデータ -ϑΟʔϧυσʔλϥϘσʔλ 一貫性のある管理された環境で、ページの読み込みをシミュレートするためのツールを使用して計測される指標e.g. CPU や Network の Throttling実際にページを読み込み、操作しているユーザーについて測定される指標
Copyright © 2023 Bitkey Inc. All right reserved.24Metrics - フィールドデータ・ラボデータ -https://web.dev/i18n/ja/vitals/
Copyright © 2023 Bitkey Inc. All right reserved.25Metrics - フィールドデータ・ラボデータ -ϑΟʔϧυσʔλhttps://web.dev/i18n/ja/vitals/
Copyright © 2023 Bitkey Inc. All right reserved.26Metrics - フィールドデータ・ラボデータ -ϥϘσʔλhttps://web.dev/i18n/ja/vitals/
Copyright © 2023 Bitkey Inc. All right reserved.27計測ツール
Copyright © 2023 Bitkey Inc. All right reserved.28Metrics - 計測ツール -計測ツール(フィールドデータ)の選定PageSpeedInsightsʢPSIʣ導入しやすさ認証継続的計測詳細分析備考DatadogRUMweb-vitalsʢlibraryʣ実環境へのパフォーマンス影響が多少発生してしまうが詳細な分析が可能。自前で分析する仕組みを用意する必要があるサクッと分析するには最適だがサイトにbasic 認証経由でアクセスを許可とかして、頑張ればいける。主にtoC向け。BigQuery x Looker Studio認証が必要なサイトはできなさそうChromeUX ReportʢCrUXʣ
Copyright © 2023 Bitkey Inc. All right reserved.29Metrics - 計測ツール -計測ツール(フィールドデータ)の選定PageSpeedInsightsʢPSIʣChromeUX ReportʢCrUXʣ導入しやすさ認証継続的計測詳細分析備考DatadogRUM実環境へのパフォーマンス影響が多少発生してしまうが詳細な分析が可能。主にtoC向け。BigQuery x Looker Studio認証が必要なサイトはできなさそうサクッと分析するには最適だがサイトにbasic 認証経由でアクセスを許可とかして、頑張ればいける。自前で分析する仕組みを用意する必要があるweb-vitalsʢlibraryʣ
Copyright © 2023 Bitkey Inc. All right reserved.30Metrics - 計測ツール -計測ツール(ラボデータ)の選定PageSpeedInsightsʢPSIʣChromeDevToolʢLighthouseʣ導入しやすさ認証継続的計測詳細分析備考LighthouseCIローカル環境で簡単かつ詳細に分析ができる。サクッと分析するには最適だがサイトにbasic 認証経由でアクセスを許可とかして、頑張ればいける。環境整備が少し手間だがより再現性の高く継続的な計測が実現可能。
Copyright © 2023 Bitkey Inc. All right reserved.31Metrics - 計測ツール -計測ツール(ラボデータ)の選定PageSpeedInsightsʢPSIʣChromeDevToolʢLighthouseʣ導入しやすさ認証継続的計測詳細分析備考LighthouseCI環境整備が少し手間だがより再現性の高く継続的な計測が実現可能。ローカル環境で簡単かつ詳細に分析ができる。サクッと分析するには最適だがサイトにbasic 認証経由でアクセスを許可とかして、頑張ればいける。
Copyright © 2023 Bitkey Inc. All right reserved.32Datadog RUM(フィールドデータ)
Copyright © 2023 Bitkey Inc. All right reserved.33Metrics - Datadog RUM(フィールドデータ) -フィールドデータɾDatadog RUM ͷઃఆɺdatadogRum.init Λ࠷ॳʹಡΈࠐΉ͚ͩͰ؆୯ɻɾpackage.json ͷ version Λऔಘͯ͠ɺversion Λࢦఆ͢Δͱɺversion ຖͷ web vitals error rateͱ͔ΈΕΔΑ͏ʹͳΔɻref. https://docs.datadoghq.com/ja/real_user_monitoring/browser/
Copyright © 2023 Bitkey Inc. All right reserved.34Metrics - Datadog RUM(フィールドデータ) -
Copyright © 2023 Bitkey Inc. All right reserved.35Lighthouse CI(ラボデータ)
Copyright © 2023 Bitkey Inc. All right reserved.36Lighthouse CIMetrics - Lighthouse CI(ラボデータ) -Lighthouse CI ServerCloudLoad BalancingCloud RunPostgreSQLCloud SQLBackend ServiceBackend ServiceIdentity-Aware ProxyuploadDevelopersfrontendʢSPAʣFirebasehosting監査(参考)ヤフー全社横断「Webパフォーマンス改善」の取り組み (Core Web Vitalsスコアの向上)https://techblog.yahoo.co.jp/entry/2022090530337093/lighthouse CI を使うことで簡単に、Lighthouse による監査をコマンドラインで実施することができます。また、Lighthouse CI Sever で Web UI による可視化。
Copyright © 2023 Bitkey Inc. All right reserved.37Metrics - Lighthouse CI(ラボデータ) -lighthouserc.jspuppeteer-script.js認証が必要な url においては、puppeteerScript を利用して、監査前に都度実行するスクリプトの中で、ログインを実施するように puppeteer のスクリプトを実行してあげればok
Copyright © 2023 Bitkey Inc. All right reserved.38Metrics - Lighthouse CI(ラボデータ) -Lighthouse CI Server の Web UI で URL x Branch 単位で、Lighthouse のスコアを時系列に確認することができ、いつそのスコアが下がったのかなどを観測できるようになった。
Copyright © 2023 Bitkey Inc. All right reserved.39Logs
Copyright © 2023 Bitkey Inc. All right reserved.40フロントエンドにおける Logsɾͬ͘͟Γ Chrome DevTools > Console ʹग़ྗ͞ΕΔΠϕϯτͷهɾͱ͍͑ɺຊ൪ڥͰɺconsole.log Λग़͢ͷ͍͔͕ͳͷ͔ɻɾͦ͜ͰɺDatadog RUMͱDatadog LogsLogs
Copyright © 2023 Bitkey Inc. All right reserved.41■ Datadog RUM・datadogRum.addError すると、対象のRUM session に対して、発生したエラーを紐づけて送信し、分析することができます。・その際、任意の context も付与することもできます。■ Datadog Logs・datadogLogs.logger.xxx すると、Datadog Logs へ指定したログを送信することができます。・当然 error だけではなく、debug・info も送信できるので、実際のユーザーの任意の操作をログで確認することもできます。・Firebase Analytics(Google Analytics)でも似たようなことができるが、導入のしやすさ、リアルタイム性等の点において、Datadog Logs の方が使いやすいなと感じています。Logsフロントエンドにおける Logs
Copyright © 2023 Bitkey Inc. All right reserved.42LogsdatadogRum.addError で、 ブラウザのエラーを収集すると Error Tracking を活用して、ブラウザのエラーをグルーピングして管理・監視することができます。
Copyright © 2023 Bitkey Inc. All right reserved.43LogsCI ͰɺࣄલʹɺDatadog sourcemap Λ upload ͓͚ͯ͠ɺIDEGitHubͱ࿈ܞ͢Δ͜ͱͰ͖·͢ɻ
Copyright © 2023 Bitkey Inc. All right reserved.44LogsError Tracking x Monitor Λར༻͢Εɺ࣮ࡍͷϢʔβʔͷڥͰൃੜͨ͠ϒϥβΤϥʔΛࢹ͢Δ͜ͱ͕Ͱ͖·͢ɻ
Copyright © 2023 Bitkey Inc. All right reserved.45Traces
Copyright © 2023 Bitkey Inc. All right reserved.46フロントエンドにおける TracesɾେલఏɺTraces ɺࢄτϨʔγϯάͳͷͰɺϑϩϯτΤϯυ͚ͩͰ݁͢Δ͓Ͱͳ͍ɻɾόοΫΤϯυ͚ͩͰͳ͘ɺϑϩϯτΤϯυؚΊͨγεςϜશମͰΈͨ࣌ͷϘτϧωοΫΛಛఆ͢Δ͜ͱɺϢʔβʔࢹతʹॏཁɻTraces
Copyright © 2023 Bitkey Inc. All right reserved.47Traces・当初 Opentelemetry + Cloud Trace を利用して、バックエンド間のトレーシングを実現していた。Traces を活用すると、ユーザーのセッション・操作と実行されているSQLを紐付けて観測することができるようになります。
Copyright © 2023 Bitkey Inc. All right reserved.48Profiles
Copyright © 2023 Bitkey Inc. All right reserved.49Profileshttps://blog.sentry.io/profiling-101-what-is-profiling/そもそも Profiles を取得するための手法(Profiling)にはどういったものがあるのか
Copyright © 2023 Bitkey Inc. All right reserved.50Profileshttps://blog.sentry.io/profiling-101-what-is-profiling/そもそも Profiles を取得するための手法(Profiling)にはどういったものがあるのかフロントエンドバックエンド? ?CloudProfilerv8-profiler(Sentry…?)
Copyright © 2023 Bitkey Inc. All right reserved.51ProfilesChrome DevTools > Performances から Profiling することができます。どのコンポーネント・処理にどれくらいの時間・リソース(e.g. CPU)がかかっているのか等が特定できます。
Copyright © 2023 Bitkey Inc. All right reserved.524. 実施した改善とその結果
Copyright © 2023 Bitkey Inc. All right reserved.53■ Metrics(Lighthouse)・不要なコンポーネント削除・link タグに、preconnect・dns-prefetch 付与・適宜、Dynamic Importへ変更・webpack bundle analyzer 導入、webpack v4 -> v5 へ version up ・Tree Shaking、splitChunks 最適化 ・ついでに、CICD速度改善・Firebase Storage Region 移行(Storage Transfer Service利用・Cloud CDN導入・画像リサイズ(Firebase Resize Images ・ref. https://extensions.dev/extensions/firebase/storage-resize-images4. 実施した改善とその結果frontendʢSPAʣFirebasehostingContentsCloud Storage 3-5s速度改善EndUsers CloudLoad Balancing100-200s速度改善preconnectdns-prefetch
Copyright © 2023 Bitkey Inc. All right reserved.54■ Logs(ブラウザエラー監視)・リリース直後に、発生した新しいエラーを通知することで、すぐにブラウザでのエラーを検知し、修正・リリースする流れを構築することができた。4. 実施した改善とその結果DevelopersEndUsers■ Profiles(Chrome DevTools)・コードレベルで、ボトルネック特定し、不要な処理の削除、及び、メモ化等のリファクタリング・フロントエンドの重複した処理を、バックエンドに寄せるように API 追加・修正 etc...frontendʢSPAʣFirebasehostingDevelopersfrontendʢSPAʣFirebasehostingエラー発生!新しいエラーのみProfiling
Copyright © 2023 Bitkey Inc. All right reserved.55■ 結果・Lighthouse のスコアは若干上がったけど、全然上がらん。。。!? ・主要な URL をいくつか監査したが、全体平均5ポイント程度しか改善しなかった。・逆にがっつりリファクタリングしたコンポーネントを含む URL とかは、25 -> 55 と 30 ポイントくらい改善しているので、ちまちま改善するより、書き直した方がいい場合もあるなーという感想。(もはやフロントエンド関係ない ・傾向として、TBT が大きい(メインスレッドを占有している)コンポーネントとかは、その傾向が高いかも?・(ここまで言っておいてなんだが)Lighthouse のスコアやDatadogの指標を改善することは 結果論であって、目的ではない。 ・そもそも SEO とか関係ないプロダクトはそこまで意識する必要はないかも?という前提がある。 ・かつ、改善したいのは、「スコア」ではなく、「ユーザー体験」ということを忘れてはならない。 ・ステークホルダーと「ユーザー体験に基づいた指標(SLI)とスコアの基準(SLO)」を、合意することが大切。4. 実施した改善とその結果
Copyright © 2023 Bitkey Inc. All right reserved.56さいごに
Copyright © 2023 Bitkey Inc. All right reserved.57さいごにユーザー視点で考えられているだろうか?
Copyright © 2023 Bitkey Inc. All right reserved.58・「ユーザー視点」によるオブザーバビリティの構築・運用 ・フロントエンド ~ ハードウェア 一気通貫したオブザーバビリティ の実現へ・「ユーザー視点」によるSLO/SLIの構築・運用 ・ハードウェアを絡めた解錠体験等に対する SLO・SLI の実装、運用へ・「ユーザー視点」による運用体制構築 ・アラート ~ サポート対応までのシームレスな体制へさいごに
End of FileCopyright © 2023 Bitkey Inc. All right reserved.59