BigQueryを中心としたヴァルハラゲートのログ分析システム

33

Transcript of BigQueryを中心としたヴァルハラゲートのログ分析システム

Page 1: BigQueryを中心としたヴァルハラゲートのログ分析システム
Page 2: BigQueryを中心としたヴァルハラゲートのログ分析システム

Self Introduction

河合宜文 / Kawai Yoshifumi

株式会社グラニ取締役CTO

「最先端のC#技術を使った」ゲーム開発

http://grani.jp/

Microsoft MVP for Visual Studio and Development Technologies(C#)

http://neue.cc/

Twitter : @neuecc

Page 3: BigQueryを中心としたヴァルハラゲートのログ分析システム

About Grani

モバイル向けゲーム開発企業

2012年設立

代表作として「神獄のヴァルハラゲート」

GREE Platform Awardにて殿堂入り最優秀賞

他、カプコンとの共同開発による「モンスターハンター ロアオブ カード」

iOS/Android用ランアクションゲーム「マンモンラン」など

iOS/Android向けに次期タイトル「黒騎士と白の魔王」鋭意開発中

Page 4: BigQueryを中心としたヴァルハラゲートのログ分析システム
Page 5: BigQueryを中心としたヴァルハラゲートのログ分析システム
Page 6: BigQueryを中心としたヴァルハラゲートのログ分析システム

Technology of Valhalla-Gate

Windows on Cloud + C#

C# 6.0 + .NET Framework 4.6 + ASP.NET MVC 5 によるウェブゲーム

クラウド上のWindows Server 2012 R2 上にて稼働

データストアは Aurora(MySQL) + Redis

100 - Application Server

10,000 - Request/Sec

100,000,000 - Page View/Day

30,000 - Database Query/Sec

300,000 - Redis Command/Sec

60 - ms Average Response Time

Page 7: BigQueryを中心としたヴァルハラゲートのログ分析システム

Technology of Valhalla-Gate

Windows on Cloud + C#

C# 6.0 + .NET Framework 4.6 + ASP.NET MVC 5 によるウェブゲーム

クラウド上のWindows Server 2012 R2 上にて稼働

データストアは Aurora(MySQL) + Redis

100 - Application Server

10,000 - Request/Sec

100,000,000 - Page View/Day

30,000 - Database Query/Sec

300,000 - Redis Command/Sec

60 - ms Average Response Time

ゲームの性質クエリ/コマンド数がやたら多い(ワンクリックが更新)

キャッシュを効かせにくい(すぐ更新されるので)という中で、レスポンス時間を極力短くする(サクサク感)

Page 8: BigQueryを中心としたヴァルハラゲートのログ分析システム

using

Page 9: BigQueryを中心としたヴァルハラゲートのログ分析システム

using

Page 10: BigQueryを中心としたヴァルハラゲートのログ分析システム

BigQuery for Windows

Page 11: BigQueryを中心としたヴァルハラゲートのログ分析システム

Road to BigQuery

BigQuery以前のシステム

障害調査 / パフォーマンス系ログ /デバッグ出力

他社ログSaaS

ログ量の増大にたいして、とにかくクエリが遅い

独自クエリシンタックスも学習コストが高く、思ったより使われなかった

ゲーム行動解析

RDBMSに接続しての内製管理ツール

挿入量の多いものは蓄積/分析対象にできなかった

Page 12: BigQueryを中心としたヴァルハラゲートのログ分析システム

What do we needs?

求めているもの

解析速度、膨大なログからも素早く解析

ほぼリアルタイムであること、障害調査時に必須

調査系システムと分析計システムを単一でまかないたい

メンテナンスフリー、100%マネージドなサービス

Windowsフレンドリー

これらを唯一満たしたのがBigQuery

Page 13: BigQueryを中心としたヴァルハラゲートのログ分析システム

Send to BigQuery

を、どうやって?

Page 14: BigQueryを中心としたヴァルハラゲートのログ分析システム

Log Transfer Pipeline

ASP.NET

EventSource(C#)

Event Tracing for

Windows(ETW)

SLAB

BigQuery

Plugin(C#)

BigQuery

Page 15: BigQueryを中心としたヴァルハラゲートのログ分析システム

Log Transfer Pipeline

ASP.NET

EventSource(C#)

Event Tracing for

Windows(ETW)

SLAB

BigQuery

Plugin(C#)

BigQuery

アプリケーション本体

Windowsネイティブのイベント転送機構

ETWを受け取り処理する外部サービスプロセス

Streaming Insert

Page 16: BigQueryを中心としたヴァルハラゲートのログ分析システム

Event Tracing for Windows(ETW)

Windowsネイティブのイベント処理機構

マシン内でのログのストリーム伝送に使える

秒間数百万件を余裕で処理する

堅牢!高速!

ProviderアプリケーションがログをETWに転送

ConsumerログをETWから受けBigQueryに転送

Page 17: BigQueryを中心としたヴァルハラゲートのログ分析システム

Semantic Logging Application Block

ログ収集・転送

SLABというMicrosoftの出しているソフトウェア(inputがETW限定で

outputがプラグインで書けるログコレクタ)用に自社製BigQueryプラグイ

ン(C#製)を作り、バッファリングしてBigQueryに転送

ASP.NET

EventSource(C#)

Event Tracing for

Windows(ETW)

SLAB

BigQuery

Plugin(C#)

BigQuery

ETWへの軽量な転送 ETWからの軽量な受信 塊にしてHTTPで転送

Page 18: BigQueryを中心としたヴァルハラゲートのログ分析システム

Semantic Logging Application Block

ログ収集・転送

SLABというMicrosoftの出しているソフトウェア(inputがETW限定で

outputがプラグインで書けるログコレクタ)用に自社製BigQueryプラグイ

ン(C#製)を作り、バッファリングしてBigQueryに転送

ASP.NET

EventSource(C#)

Event Tracing for

Windows(ETW)

SLAB

BigQuery

Plugin(C#)

BigQuery

ETWへの軽量な転送 ETWからの軽量な受信 塊にしてHTTPで転送

但し現在は自社製ロギングフレームワーク「EtwStream」に移行作業開始中

https://github.com/neuecc/EtwStream

Page 19: BigQueryを中心としたヴァルハラゲートのログ分析システム

StreamingInsert

スキーマ自動生成

C#上のメソッド定義(EventSource)をそのままBigQueryのスキーマに

[Event(1, Keywords = Keywords.Battle, Version = 2)]public void AbilityExecute(long uid, long guildId...){

WriteEvent(1, uid, guildId...);}

Page 20: BigQueryを中心としたヴァルハラゲートのログ分析システム

StreamingInsert

スキーマ自動生成

C#上のメソッド定義(EventSource)をそのままBigQueryのスキーマに

[Event(1, Keywords = Keywords.Battle, Version = 2)]public void AbilityExecute(long uid, long guildId...){

WriteEvent(1, uid, guildId...);}

Page 21: BigQueryを中心としたヴァルハラゲートのログ分析システム

StreamingInsert

スキーマ自動生成

C#上のメソッド定義(EventSource)をそのままBigQueryのスキーマに

[Event(1, Keywords = Keywords.Battle, Version = 2)]public void AbilityExecute(long uid, long guildId...){

WriteEvent(1, uid, guildId...);}

Page 22: BigQueryを中心としたヴァルハラゲートのログ分析システム

StreamingInsert

末尾YYYYMMDDのテーブル名

TABLE_DATE_RANGEクエリとの相性が良い

ウェブコンソールでもまとめて表示してくれる

全てのテーブルに3つのカラム自動付与

timestamp - ログの日時

sourceHost - 送信元サーバーのIP

gitRevision - 送信元アプリのGitのリビジョン

Page 23: BigQueryを中心としたヴァルハラゲートのログ分析システム

Cost Reduction

BigQueryの費用感

クエリコストよりストレージとストリーミングインサートが大半を占める

ストリーミングインサート対策

一部に挿入量が膨大なテーブルが存在する(一日20億件程度)

それらはGCSからのバッチインポートで処理(リアルタイム性は若干犠牲)

ストレージ対策

ストレージ全体の増加量は月1000億件ぐらい(ン万, ン十万円……?)

重要度の低いログは3ヶ月後にサマライズして1/1000に切り捨て

Page 24: BigQueryを中心としたヴァルハラゲートのログ分析システム

Cost Reduction

BigQueryの費用感

クエリコストよりストレージとストリーミングインサートが大半を占める

ストリーミングインサート対策

一部に挿入量が膨大なテーブルが存在する(一日20億件程度)

それらはGCSからのバッチインポートで処理(リアルタイム性は若干犠牲)

ストレージ対策

ストレージ全体の増加量は月1000億件ぐらい(ン万, ン十万円……?)

重要度の低いログは3ヶ月後にサマライズして1/1000に切り捨て

最近のアップデートで古いものは自動的に半額になる(Long term storage)

が、さすがに1/1000とは値段が全然違うので変わらずに切り捨て継続中

Page 25: BigQueryを中心としたヴァルハラゲートのログ分析システム

How to Analyze

Page 26: BigQueryを中心としたヴァルハラゲートのログ分析システム

Table Details

障害/パフォーマンス調査

リクエスト・ログイン・サーバーエラー・HTTP・SQL・Redisなど通信系

などなどをアプリケーション側でフックして全データ記録

スレッドプール、アプリケーション側からのコネクション数などは1分毎

に取得して記録

ゲーム行動ログ解析

技の実行回数やダメージなど

RDBMSには(量が多くて)記録しにくいデータを全部投げる

取れるものは可能な限り全てとりあえず取っておくことで、いざというときの速やかな解決が可能

Page 27: BigQueryを中心としたヴァルハラゲートのログ分析システム

How to Adhoc Query

Web Console UI

かなり使いやすいウェブコンソールはBigQueryの優れた点

なんのかんので便利なので使う

LINQPad + LINQ to BigQuery

内製GUIデスクトップクライアント(OSSとして公開中)

Excel(Pivot Table + Pivot Chart)

ピボットテーブルは相当強力で、Excelはちゃんと評価されるべきツール

Page 28: BigQueryを中心としたヴァルハラゲートのログ分析システム

LINQPad / LINQ to BigQuery

LINQPadhttps://www.linqpad.net/

軽量C# Script Editor(IDE)

REPLのように使える

LINQ to BigQueryhttps://github.com/neuecc/LINQ-to-BigQuery/

BigQueryに対するC#のO/Rマッパー

LINQPadに対するプラグインも完備

Page 29: BigQueryを中心としたヴァルハラゲートのログ分析システム

LINQPad / LINQ to BigQuery

LINQPadhttps://www.linqpad.net/

軽量C# Script Editor(IDE)

REPLのように使える

LINQ to BigQueryhttps://github.com/neuecc/LINQ-to-BigQuery/

BigQueryに対するC#のO/Rマッパー

LINQPadに対するプラグインも完備

静的型生成スキーマエクスプローラー

グラフ化Dump

入力補完(IntelliSense)

コンパイルチェック

Page 30: BigQueryを中心としたヴァルハラゲートのログ分析システム

BI Dashboard

Domohttps:/www.domo.com/

クラウド型のBIサービス

評価額20億ドル超えのユニコーン企業

クエリのスケジューリング

美しく分かりやすい可視化

あらゆるデータソース (BigQuery/

MySQL/CSV/JSON API/etc...)との結合と蓄積

Page 31: BigQueryを中心としたヴァルハラゲートのログ分析システム

時間帯別の大技使用割合

技の平均ダメージと回数ランキング

Page 32: BigQueryを中心としたヴァルハラゲートのログ分析システム

Conslusion

Page 33: BigQueryを中心としたヴァルハラゲートのログ分析システム

ma to me

BigQueryは圧倒的なサービス

速い・使いやすい・柔軟

圧倒的な土管力、その上で何をするか、何でもできそう

安心して使える最高のインフラ、弊社にとってなくてはならないサービス

C#との親和性も高い

LINQ to BigQueryはとても良い

https://github.com/neuecc/LINQ-to-BigQuery/