2023/05/23 Google Cloud Day ’23 Tour
イベントURL : https://cloudonair.withgoogle.com/events/google-cloud-day-23
TVer の月間ユニークブラウザ数2700 万のサービスを支える統合ログ基盤の開発黒瀬祐平株式会社TVerサービス事業本部プロダクトタスク
View Slide
スピーカー自己紹介● 株式会社TVer (2021/4 ~)○ 2020/3 ~ 2021/3は株式会社TVer Technologiesに所属● データシステムの開発・運用を担当● 検索基盤も開発・運用を担当● 趣味は語学とダンス● 好きなGoogle Cloudのサービス: Cloud LoggingのLog Analytics黒瀬祐平株式会社TVer プロダクトタスク
TVerについて
● 民放テレビ局のコンテンツを配信する民放公式テレビ配信サービス● 毎週約650番組を無料でPC・スマートフォン・タブレット・TVに配信TVerについて
TVerリニューアルと TVer ID● TVer IDに登録しログインすることで、デバイス間のマイリスト連携などの機能が利用可能に
統合ログ基盤開発の背景
背景● 今後のサービス改善のため、サービスの利用状況やニーズを複数の観点から分析したい意思決定情報収集分析 サービス展開
● BigQueryにデータを集約して分析● 収集目的ごとに複数のログ収集サービスを利用従来のデータ分析環境PCMobileBigQueryTV行動ログ収集サービス視聴ログ収集サービス
● 異なるログのテーブルの仕様を個別に理解する必要があり、分析のオーバヘッドが増大する● テーブル同士をIDで突合するためのベンダ調整の手間がかかる○ 異なるカラム名でも実は同じID体系だったりする...課題①: 突合の手間がかかるPCMobileBigQueryTV行動ログ収集サービス視聴ログ収集サービス
● 収集できるログはサービスの仕様で決まってしまう課題②: ログに拡張性がないPCMobileBigQueryTV行動ログ収集サービス視聴ログ収集サービス仕様外のログ収集は不可
● ログ収集サービスごとに利用料を支払う必要があり、コストがかさむ○ 請求書も増えてお金かかっている箇所の深掘りに限界がある課題③: 費用がかかる$$PCMobileBigQueryTV行動ログ収集サービス視聴ログ収集サービス
● サービス戦略に合わせて自在にログを収集・集約できるログ基盤=TVerTagの開発実現したいものPCMobileBigQueryTVTVerTag
TVerTagの開発
● ユーザの行動やコンテンツの視聴状況といった大まかなデータ=ログ種別ごとに集計をしたい● ログを集計対象などで適宜スキャン範囲を制限することでクエリのコストを抑えられるようにしたいログ要件
複数の種別のログを統一的に収集・集約できること①③② ログおよびシステムに拡張性があることリソースの維持費やストレージコスト・クエリコストが小さいこと目指したシステム
TVerTag収集 集約Client大まかな仕組み
ログ収集の方針● クライアントはログ種別や各フィールドの値を載せてTVerTagへリクエストを送信する● TVerTagのエンドポイントはpixelデータを返却し、LBのアクセスログを収集するhttps://cloud.google.com/blog/products/gcp/how-to-do-serverless-pixel-tracking-with-gcp
● ストレージが安価なGCSにログを集約し、ログ種別ごとのexternal tableとしてBigQueryに見せるログ集約の方針Cloud Logging Cloud StorageETLBigQueryBucket A -> Table ABucket B -> Table BBucket C -> Table C
● BigQueryのexternal tableとしてGCSを参照したときに、所定の形式でGCSのパスを切っておくことで指定範囲だけをスキャンさせることができる○ dayだけを指定すればyear/monthを指定しなくてもよい形式に工夫したGCS Hive Partitioninggs://tableA/year=2023/month=202303/day=20230304/*gs://tableA/year=2023/month=202304/day=20230305/*スキャンスキャンSELECT * FROM tableAWHERE day="20230304"SELECT * FROM tableAWHERE day="20230305"
● Cloud Loggingでログ種別ごとにRouter経由でPub/Subへ流す○ ログ種別を後から追加できる● Cloud Run ServiceがPub/SubからログをPullしてGCSへ格納ETL処理(行動ログ)(視聴ログ)(イベントログ)(行動ログ)(視聴ログ)(イベントログ)Cloud LoggingCloud Run
TVerTag集約収集全体構成(初版)Client
● external tableの参照先GCSにもアクセス権を付与する必要があり、管理コスト増加につながるexternal tableの問題(1)gs://tableAtableAクエリ実行参照読み取り権限読み取り権限
● BigLake○ オブジェクトストレージに実データを置いているexternal tableをnativetableと同じUXで利用できる機能○ '22 7月にGAexternal tableの問題(1)の解決方法https://cloud.google.com/bigquery/docs/biglake-intro
● BigLakeにより、権限管理をGCSからBigQueryに移譲することで、BigQueryと同じ体系で権限管理が可能external tableの問題(1)へのアプローチgs://tableAtableAクエリ実行参照読み取り権限BigLake経由で読み取り
gs://tableA/year=2022/month=202204/...gs://tableA/year=2022/month=202205/...gs://tableA/year=2022/month=202206/......● GCSのファイル数が多くなってくるとクエリ性能が劣化○ 運用開始当初1分以内に返る集計クエリが2か月後には20分以上かかるようにexternal tableの問題(2)クエリ実行集計結果< 1分→ 20+分
● BigQueryのnative tableに順次投入していくバッチを追加○ ただしユースケースの都合でexternal tableも現状は存続external tableの問題(2)へのアプローチgs://tableA/year=2022/month=202204/...gs://tableA/year=2022/month=202205/...gs://tableA/year=2022/month=202206/......tableA_20220401...tableA_20220501...tableA_20220601ETL
TVerTag全体構成(2版)集約収集追加Client
億1日あたりのログ数GiB1日あたりのログサイズアクセス1日のピークにおける秒間同時接続数92021,00011● Google Cloudを活用することで、リリース以後1年以上の期間においてTVerTagの安定稼働を実現TVerTag運用状況件ログ欠損発生件数0
さらなる改善に向けて
● 必ずしもGCSを経由しなくてもよくなったため、Cloud LoggingからBigQueryへの集約を簡略化を検討中○ コスト削減・運用負荷軽減がねらい集約の簡略化TVerTag集約収集初版から追加Client
方式検討Log RouterCloud LoggingLog StorageCloud LoggingCloud Pub/SubDatasetBigQueryLinked DatasetBigQueryTableBigQuery参照用TableBigQuery①BigQuery Subscriptionsを利用する方法②Log RouterのSinkにBigQueryを指定する方法③Log Analytics('23 1月GA)のLinked Datasetを利用する方法
● Cloud LoggingのログをBigQueryのSQLで集計できるようにする○ '22 9月にサービスPreview, '23 1月 GA● Log Analyticsを有効化したLog BucketをLogRouterのSinkに指定することで利用可能● Log BucketのRetentionが30日以内であれば課金されないLog Analyticshttps://cloud.google.com/blog/products/data-analytics/moving-to-log-analytics-for-bigquery-export-users
● Cloud Loggingのログをそのまま参照できるViewを指定Dataset配下に作成する機能● メリット○ Log Bucketに入ってくるログをリアルタイムで参照できる○ BigQueryには実データを保持しない○ Viewではtimestampフィールドでpartitioningされているためスキャン量を制限可能Log AnalyticsのLinked Datasethttps://cloud.google.com/blog/products/data-analytics/moving-to-log-analytics-for-bigquery-export-users
新しい構成Log RouterCloud LoggingLog BucketCloud LoggingLinked DatasetBigQuerySpeed LayerBigQueryTVerTag収集 集約Batch LayerETLBatch LayerBigQuery集計用ViewBigQuery※開発中
● 結果的にPub/SubやCloud Run・GCSなどをショートカットする想定集約の簡略化TVerTag集約収集削除Client永続化処理
結論
結論● TVerのサービス戦略に合わせて統一的に拡張性高くログを収集・集約できるログ基盤をGoogle Cloudのサービスや機能を活用して構築した○ ①突合の手間がかかる■ →複数のログ種別を一つのログ基盤で統一的に収集・集約が可能○ ②ログ種別を後から追加可能■ →ログおよびシステムの拡張性を実現○ ③Google Cloudのサービスでコストを抑えたデータ基盤を開発■ →コストを最小限に抑えた構成で実現
データマート今後の展望● 体系化されたデータマートの構築● さらなるサービスや機能を利用した構成改善TVerTagClientユースケース用テーブルユースケース用テーブル
Thank you.