DMM.comラボエンジニアブログスマートフォン用の表示で見るスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。読者です読者をやめる読者になる読者になるDMM.comラボエンジニアブログDMM.comラボのエンジニアブログです。DMM.comを支える技術について書いています。2015-08-20DMMゲームのログ解析~ログ収集と解析の概要~現在オンラインゲームのバックエンド、KPIシステムを担当していますマサヨシです。今回のブログでは【DMMオンラインゲームで実際に実装しているログとKPI】に関して3回にわたってご紹介致します。DMMオンラインゲームでは、これまではオンラインゲームのプロジェクトごとに行っていたログの収集方法を統一し、プロジェクトに依存しない基本KPI機能とゲーム独自のKPI機能を実装するためのフレームワークを開発しましたのでその事例をもとにご紹介します。ログ収集、解析の概要まず、オンラインゲームのログ収集の全体像をご紹介します。オンラインゲームのログ収集ではApacheやnginx、PHPのログをfluentdで収集しています。fluentdに集めたログをHadoopの分散処理システムに保存し、HiveやImpalaで解析をする流れになっています。ご存知の方も多いと思いますが、HiveとはHDFS上に格納したCSV、JSONなどを参照するテーブルを作成しSQLで問い合わせると、MapReduceジョブに変換されるというものです。ImpalaはMapReduceとは異なる分散処理エンジンで、商用並列RDBMSに似たエンジンです。Impalaの良さは可能な限りキャッシュし、高速に実行されるところにあります。Hiveでは30秒以上かかるクエリもImpalaでは数秒で処理されます。オンラインゲームではバッチ処理はHive、リアルタイム処理はImpalaと使い分けて実装しています。細かい説明を致します。ゲームログの収集ゲームログの集取では、PHPからのログをfluentdで収集しています。fluentdの入力時にgame、ゲームID、アクセスの種類と3つタグをつけてログを収集しています。アクセスの種類と言うのはアクセスや課金等です。fluentdからはWebHDFSを使用してHadoopのHDFS上にストリーミングでログを保存していきます。この時の保存先はタグの名前の通りの階層になっています。次にhttpdのログの収集方法です。httpdから出力したログをfluentdのinputプラグイン(tail)を利用してログ収集していきます。こちらでもfluentdで設定したタグを3つつけています。先頭からhttpd,ゲームID,そして、アクセスログ/エラーログです。現状はアクセスログとエラーログの2種類を取得しています。fluentdからhdfsへの出力方法は先ほどのゲームログの出力と同じです。KPI試算KPI計算は、まずPHPでHIVEにクエリを送り、受け取った結果をMySQLに格納します。ここで他のKPI計算に必要となるKPIデータを、MySQLからHIVEにコピーします。ここでのKPIの計算はバッチ処理で行っています。PHPのフレームワークにはLaravel5を使用しているので、バッチ処理はLaravel5のスケジューリング機能を利用してバッチの管理をしています。スケジューリング機能をつかうことでソースコードで実行日時を管理できるので、cronの更新が不要になるので結構便利です。計算済みのKPIはMySQLからPHPで取得します。ログの検索や複雑なKPIの取得についてはImpalaにクエリを投げて、検索していきます。まとめ今回は【DMMオンラインゲームで実際に実装しているログとKPI】をテーマにした第1回目ということで、DMMオンラインゲームが実装するログ収集と解析の概要をご紹介しあした。次回はログ収集でパフォーマンス向上のために活用している「Parquet」についてご紹介します。Labo採用ページツチノコブログ。