È w ¤ ï ¬ Æ @ @ ¤ ¬ Ê ñ - KAKEN · (1)ログ収集・管理システム構築 本研究での基本となるログ収集・管理システ ムは、オープンソースソフトウェアである
BigQueryを中心としたヴァルハラゲートのログ分析システム
-
Upload
yoshifumi-kawai -
Category
Technology
-
view
24.574 -
download
0
Transcript of BigQueryを中心としたヴァルハラゲートのログ分析システム
Self Introduction
河合宜文 / Kawai Yoshifumi
株式会社グラニ取締役CTO
「最先端のC#技術を使った」ゲーム開発
http://grani.jp/
Microsoft MVP for Visual Studio and Development Technologies(C#)
http://neue.cc/
Twitter : @neuecc
About Grani
モバイル向けゲーム開発企業
2012年設立
代表作として「神獄のヴァルハラゲート」
GREE Platform Awardにて殿堂入り最優秀賞
他、カプコンとの共同開発による「モンスターハンター ロアオブ カード」
iOS/Android用ランアクションゲーム「マンモンラン」など
iOS/Android向けに次期タイトル「黒騎士と白の魔王」鋭意開発中
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
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
ゲームの性質クエリ/コマンド数がやたら多い(ワンクリックが更新)
キャッシュを効かせにくい(すぐ更新されるので)という中で、レスポンス時間を極力短くする(サクサク感)
using
using
BigQuery for Windows
Road to BigQuery
BigQuery以前のシステム
障害調査 / パフォーマンス系ログ /デバッグ出力
他社ログSaaS
ログ量の増大にたいして、とにかくクエリが遅い
独自クエリシンタックスも学習コストが高く、思ったより使われなかった
ゲーム行動解析
RDBMSに接続しての内製管理ツール
挿入量の多いものは蓄積/分析対象にできなかった
What do we needs?
求めているもの
解析速度、膨大なログからも素早く解析
ほぼリアルタイムであること、障害調査時に必須
調査系システムと分析計システムを単一でまかないたい
メンテナンスフリー、100%マネージドなサービス
Windowsフレンドリー
これらを唯一満たしたのがBigQuery
Send to BigQuery
を、どうやって?
Log Transfer Pipeline
ASP.NET
EventSource(C#)
Event Tracing for
Windows(ETW)
SLAB
BigQuery
Plugin(C#)
BigQuery
Log Transfer Pipeline
ASP.NET
EventSource(C#)
Event Tracing for
Windows(ETW)
SLAB
BigQuery
Plugin(C#)
BigQuery
アプリケーション本体
Windowsネイティブのイベント転送機構
ETWを受け取り処理する外部サービスプロセス
Streaming Insert
Event Tracing for Windows(ETW)
Windowsネイティブのイベント処理機構
マシン内でのログのストリーム伝送に使える
秒間数百万件を余裕で処理する
堅牢!高速!
ProviderアプリケーションがログをETWに転送
ConsumerログをETWから受け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で転送
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
StreamingInsert
スキーマ自動生成
C#上のメソッド定義(EventSource)をそのままBigQueryのスキーマに
[Event(1, Keywords = Keywords.Battle, Version = 2)]public void AbilityExecute(long uid, long guildId...){
WriteEvent(1, uid, guildId...);}
StreamingInsert
スキーマ自動生成
C#上のメソッド定義(EventSource)をそのままBigQueryのスキーマに
[Event(1, Keywords = Keywords.Battle, Version = 2)]public void AbilityExecute(long uid, long guildId...){
WriteEvent(1, uid, guildId...);}
StreamingInsert
スキーマ自動生成
C#上のメソッド定義(EventSource)をそのままBigQueryのスキーマに
[Event(1, Keywords = Keywords.Battle, Version = 2)]public void AbilityExecute(long uid, long guildId...){
WriteEvent(1, uid, guildId...);}
StreamingInsert
末尾YYYYMMDDのテーブル名
TABLE_DATE_RANGEクエリとの相性が良い
ウェブコンソールでもまとめて表示してくれる
全てのテーブルに3つのカラム自動付与
timestamp - ログの日時
sourceHost - 送信元サーバーのIP
gitRevision - 送信元アプリのGitのリビジョン
Cost Reduction
BigQueryの費用感
クエリコストよりストレージとストリーミングインサートが大半を占める
ストリーミングインサート対策
一部に挿入量が膨大なテーブルが存在する(一日20億件程度)
それらはGCSからのバッチインポートで処理(リアルタイム性は若干犠牲)
ストレージ対策
ストレージ全体の増加量は月1000億件ぐらい(ン万, ン十万円……?)
重要度の低いログは3ヶ月後にサマライズして1/1000に切り捨て
Cost Reduction
BigQueryの費用感
クエリコストよりストレージとストリーミングインサートが大半を占める
ストリーミングインサート対策
一部に挿入量が膨大なテーブルが存在する(一日20億件程度)
それらはGCSからのバッチインポートで処理(リアルタイム性は若干犠牲)
ストレージ対策
ストレージ全体の増加量は月1000億件ぐらい(ン万, ン十万円……?)
重要度の低いログは3ヶ月後にサマライズして1/1000に切り捨て
最近のアップデートで古いものは自動的に半額になる(Long term storage)
が、さすがに1/1000とは値段が全然違うので変わらずに切り捨て継続中
How to Analyze
Table Details
障害/パフォーマンス調査
リクエスト・ログイン・サーバーエラー・HTTP・SQL・Redisなど通信系
などなどをアプリケーション側でフックして全データ記録
スレッドプール、アプリケーション側からのコネクション数などは1分毎
に取得して記録
ゲーム行動ログ解析
技の実行回数やダメージなど
RDBMSには(量が多くて)記録しにくいデータを全部投げる
取れるものは可能な限り全てとりあえず取っておくことで、いざというときの速やかな解決が可能
How to Adhoc Query
Web Console UI
かなり使いやすいウェブコンソールはBigQueryの優れた点
なんのかんので便利なので使う
LINQPad + LINQ to BigQuery
内製GUIデスクトップクライアント(OSSとして公開中)
Excel(Pivot Table + Pivot Chart)
ピボットテーブルは相当強力で、Excelはちゃんと評価されるべきツール
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に対するプラグインも完備
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)
コンパイルチェック
BI Dashboard
Domohttps:/www.domo.com/
クラウド型のBIサービス
評価額20億ドル超えのユニコーン企業
クエリのスケジューリング
美しく分かりやすい可視化
あらゆるデータソース (BigQuery/
MySQL/CSV/JSON API/etc...)との結合と蓄積
時間帯別の大技使用割合
技の平均ダメージと回数ランキング
Conslusion
ma to me
BigQueryは圧倒的なサービス
速い・使いやすい・柔軟
圧倒的な土管力、その上で何をするか、何でもできそう
安心して使える最高のインフラ、弊社にとってなくてはならないサービス
C#との親和性も高い
LINQ to BigQueryはとても良い
https://github.com/neuecc/LINQ-to-BigQuery/