Amebaサービスのログ解析基盤

47
Amebaサービスの ログ解析基盤 株式会社サイバーエージェント アメーバ事業本部 プラットフォームディビジョン NeutralTechnologyGroup 鈴木 俊裕

description

第一回 mixi × サイバーエージェント合同勉強会の発表資料です。

Transcript of Amebaサービスのログ解析基盤

Page 1: Amebaサービスのログ解析基盤

Amebaサービスのログ解析基盤

株式会社サイバーエージェントアメーバ事業本部 プラットフォームディビジョンNeutralTechnologyGroup

鈴木 俊裕

Page 2: Amebaサービスのログ解析基盤

自己紹介• 鈴木 俊裕(すずき としひろ)

• 27歳

• 株式会社サイバーエージェントアメーバ事業本部 プラットフォームディビジョンNeutralTechnologyGroup(新卒入社4年目)

• ログ解析基盤をやっている

• 【twitter】@brfrn169 【hatena】 brfrn169

Page 3: Amebaサービスのログ解析基盤

アジェンダ

• Hadoop/Hiveを用いたログ解析基盤Patriot

• Flume + HBaseによるリアルタイム解析システムStinger

Page 4: Amebaサービスのログ解析基盤

Hadoop/Hiveを用いたログ解析基盤Patirot

Page 5: Amebaサービスのログ解析基盤

Patriot開発までの経緯[2009年]

11月 開発合宿にて大議論 → ログ解析基盤が必要という結論

局長に直訴 → 即GOサイン[2010年]

3月末 本格検証開始7月 第一弾リリース11月 WebUIを中心にリニューアル

Page 6: Amebaサービスのログ解析基盤

今までの問題点

• 各サービスごとに独自に解析

• ログ容量の肥大化- 消されていくログ

• サービス開発担当者が解析部分まで手が回らない- モバイルゲーム・スマフォなど開発スピードがはやい

- サービスリリースしてすぐに情報が欲しい

Page 7: Amebaサービスのログ解析基盤

Patriotの目的

• Amebaサービス全体の統合的な現状把握と未来予測

• 各サービスのデータの集約

• サービス開発支援

Page 8: Amebaサービスのログ解析基盤

方法

• ログの集約- HDFS

• ログの集計・構造化- Hive(Map/Reduce)

• 集計結果の表示- Patriot WebUI

• アドホックな集計、解析- Hue

Page 9: Amebaサービスのログ解析基盤

Patirotの名前の由来

• 迎撃ミサイル

• 攻撃のためではなく防御のための武器

• レーダー装置や射撃管制装置

Page 10: Amebaサービスのログ解析基盤

Hadoopについて

• HDFS

- 巨大なファイルブロック(デフォルトで64M)

- 同一ファイルブロックのコピーを複数のノードが保持

• MapReuce

- 互いに並列可能な形に処理を分解

- 関数型言語の考え方を巨大データに適用

- map関数(=射影)とreduce関数(=集約)

Page 11: Amebaサービスのログ解析基盤

Hadoopについて(アーキテクチャ)

HDFSクライアント HDFS API

NameNode

JobTracker

HDFSメタデータ

MapReduceプログラム JobClient

DataNode

TaskTracker

HDFSストレージ

map/reduce HDFSクライアント

map/reduce HDFSクライアント

SecondaryNameNode

マスタノード

ワーカノード

DataNode

TaskTracker

HDFSストレージ

map/reduce HDFSクライアント

map/reduce HDFSクライアント

ワーカノード

クライアント

クライアント

Hadoopクラスタ

Page 12: Amebaサービスのログ解析基盤

Hiveについて

• Hadoopのサブプロジェクト

• Facebookで開発されていた

• HiveQLというSQLライクな言語でMapReduceを記述

• 同様の試みにPig(スクリプト言語)

Page 13: Amebaサービスのログ解析基盤

Hiveについて

• 特徴‣ HiveQL

- SQLのような言語でMapReduceを記述

‣ メタストア- デーブルのカラム情報などを保持- デフォルトはDerby

- PatriotではMySQLを使用

‣ 行単位での更新が出来ない- Partitionを使う

Page 14: Amebaサービスのログ解析基盤

Hiveについて(例)

• ログファイル pigg_login.log

2011-05-13 00:12:34 yamada_taro2011-05-13 02:23:45 suzuki_ichiro2011-05-13 03:34:56 brfrn1692011-05-13 04:56:34 yamada_taro2011-05-13 05:23:45 suzuki_ichiro2011-05-13 06:45:56 yamada_taro2011-05-13 07:56:23 yamada_hanako2011-05-13 08:45:56 yamada_taro2011-05-13 09:12:34 yamada_hanako

・・・

Page 15: Amebaサービスのログ解析基盤

Hiveについて(例)

• DDL

CREATE TABLE pigg_login (time STRING,ameba_id STRING)PARTITIONED BY (dt STRING),ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’,STORED AS TEXTFILE;

• データのロードLOAD DATA INPATH ‘/path/pigg_login.log’INTO TABLE pigg_loginPARTITION (dt=‘2011-05-13’);

Page 16: Amebaサービスのログ解析基盤

Hiveについて(例)

• HiveQL

‣ ピグのログインUU(デイリー、マンスリー)

- SELECT count(distinct ameba_id) FROM pigg_login WHERE dt=‘2011-05-13’;

- SELECT count(distinct ameba_id) FROM pigg_login WHERE dt LIKE ‘2011-05-__’;

‣ ピグの年齢別のログインUU (JOIN, GROUP BY)

- SELECT p.age, count(distinct l.ameba_id) FROM pigg_login l JOIN profile p on (l.ameba_id=p.ameba_id) WHERE l.dt= ‘2011-05-13‘ GROUP BY p.age;

Page 17: Amebaサービスのログ解析基盤

Patriotについて

• 開発体制- システム4名

- インフラ担当

- 課金系担当

- 会員獲得系担当

都度対応

Page 18: Amebaサービスのログ解析基盤

Patriotについて

• 解析フロー

収集サーバHadoopクラスタ

ログ整形Hiveインポート

Hive Job各サービス

サマリDB(MySQL)

サマリデータ

View

Page 19: Amebaサービスのログ解析基盤

Patriotについて

• システム構成namenode2CoreCPU16GB RAM

jobtracker4CoreCPU24GB RAM

secondary namenode2CoreCPU16GB RAM

datanode/jobtracker × 184CoreCPU16GB RAM

1TB HDD × 4

Page 20: Amebaサービスのログ解析基盤

Patriotについて

• システム構成- CDH3u0(Hadoop0.20, Hive0.7, Hue1.2.0)

- Puppet

- Nagios, Ganglia

- ExtJS3.2.1

- Hinemos 3.2

Page 21: Amebaサービスのログ解析基盤

Patriotについて

• インポート処理ログ転送DBレプリケーション

Hadoopクラスタ

各サービスSCP

• 正規表現でマッチするレコードを抽出• gzip,SeqenceFileでHDFS上に出力• Hiveにロード

収集サーバ

Page 22: Amebaサービスのログ解析基盤

Patriotについて

• インポート処理DSL (1)

import { service "gyaos" backup_dir "/data/log/gyaos" data { type "scp" ← その他に「mysql」,「hdfs」 servers ["172.xxx.yyy.zzz", " 172.xxx.yyy.zzz "]  user "cy_httpd" path "/home/cy_httpd/logs/tomcat/lifelog/*.#{$dt}*" limit 10000 } (つづく)

Page 23: Amebaサービスのログ解析基盤

Patriotについて

• インポート処理DSL (2)

load { type "hive" ← 「mysql」 table { name "game_login" regexp "^[^\\t]*\\t([^\\t]*)\\tlogin" output "$1" partition :dt => "#{$dt}", :service => "gyaos" } table { name "game_user" regexp "^([^\\t]*)\\t([^\\t]*)\\tregist_game" output "$2\t$1" partition :dt => "#{$dt}", :service => "gyaos" }}}

Page 24: Amebaサービスのログ解析基盤

Patriotについて

• 集計・解析処理 Hadoopクラスタ

サマリDB(MySQL)

サマリデータ

Hive JobBatchサーバ

Page 25: Amebaサービスのログ解析基盤

Patriotについて

• 集計・解析処理DSL

mysql { host "localhost" port 3306 username "patriot-batch" password "xxx database "gyaos"}analyze { name "gyaos_new_user_num_daily" primary "dt" hive_ql "select count(1), '#{$dt}' from game_user where dt='#{$dt}' and service='gyaos'"}analyze { name "gyaos_unregist_user_num_daily" primary "dt" hive_ql "select count(1), '#{$dt}' from game_user g join ameba_member a on (g.ameba_id = a.ameba_id) where a.unregist_date <> '' and to_date(a.unregist_date)='#{$dt}' and g.service='gyaos'"}・・・

Page 26: Amebaサービスのログ解析基盤

Patriotについて

• 運用上の数字‣ HiveQLクエリ

- デイリー(定型)・・・約600

- マンスリー(定型)・・・約800

‣ ログ容量(デイリー)・・・約20GB強

‣ 処理時間(全集計)・・・4~5時間

Page 27: Amebaサービスのログ解析基盤

Patriotについて

• WebUI(デイリー、マンスリー)

Page 28: Amebaサービスのログ解析基盤

Patriotについて

• WebUI(属性レポート)

Page 29: Amebaサービスのログ解析基盤

Patriotについて

• WebUI(タレントブログ解析 大和)

あるタレントのブログを見ている人の属性

Page 30: Amebaサービスのログ解析基盤

Patriotについて

• Hue

‣ HiveQLを直接WebUIから叩ける

‣ アドホックな解析

Page 31: Amebaサービスのログ解析基盤

Patriotについて

• Hue

Page 32: Amebaサービスのログ解析基盤

Patriotの今後

• アクセスログの収集

• ログ収集の改善

- Flume

• DSLの改善

• レコメンド

• 「なう」などのグラフ構造を使った解析

- グラフデータベース?

Page 33: Amebaサービスのログ解析基盤

Flume + HBaseによるリアルタイム解析システム

Stinger

Page 34: Amebaサービスのログ解析基盤

リアルタイム解析システム Stinger

• ブログ閲覧のリアルタイムトラッキング

• ブログ閲覧者の属性別トラッキング

• Flume + HBaseを用いて プロトタイプ を実装

Page 35: Amebaサービスのログ解析基盤

Flumeについて

• 概要‣ オープンソースのログ収集システム‣ Cloudera社が開発

‣ Flume Agent

‣ Flume Collector

‣ Flume Master

Page 36: Amebaサービスのログ解析基盤

Flumeについて

Page 37: Amebaサービスのログ解析基盤

HBaseについて

• 概要‣ Google BigTableをモデルとした分散カラム指向データストア

‣ HDFS上に構築

‣ HDFSにランダム読込/書込機能を追加

Page 38: Amebaサービスのログ解析基盤

HBaseについて

• データモデル‣ 各レコードはRow Key(主キーみたいなもの)を持つ

‣ テーブルは、一つ以上のカラムファミリー

- 通常は少数のカラムファミリー

- カラムファミリーはほとんど変化しない

- カラムファミリーはいくつでもレコードを持つことができる

‣ 各レコードはタイムスタンプを持っている

- 複数バージョンの行が存在する

Page 39: Amebaサービスのログ解析基盤

HBaseについて

• データモデル

Page 40: Amebaサービスのログ解析基盤

HBaseについて

• アーキテクチャ

Page 41: Amebaサービスのログ解析基盤

HBaseについて

• 使いどころ‣ 高い信頼性

‣ 大容量のデータ

- 数百ギガバイトからペタバイトまで

‣ 高書込スループット

- ノードあたり 数千クエリ/秒

Page 42: Amebaサービスのログ解析基盤

Stingerについて

• システム構成

node + soket.ioHBaseクラスタ

pollingpush

flume agent

log

flume collector

increment

flume master

websocket

Page 43: Amebaサービスのログ解析基盤

Stingerについて

• HBase スキーマ定義

‣ Row Key

- md5(アメーバID + 日時) + アメーバID + 日時

Column Family : hourly

12 amtotal

100

12 amlogin

35

12 ammale

10

12 am20’s

12

Column Family : daily

total

100

login

35

male

10

20’s

12

Page 44: Amebaサービスのログ解析基盤

Stingerについて

• デモ

‣ データはモバイルブログ閲覧ログの一部で

Page 45: Amebaサービスのログ解析基盤

Stingerの今後

• アメーバブログのアクセス解析をリアルタイムに?

• リアルタイムな広告効果計測システム?

Page 46: Amebaサービスのログ解析基盤

まとめ• Patriot

• ログ解析基盤

• Hadoop/Hive

• Stinger

• リアルタイム解析システム

• Flume + HBase

Page 47: Amebaサービスのログ解析基盤

• ご清聴ありがとうございました