Amebaサービスのログ解析基盤
-
Upload
toshihiro-suzuki -
Category
Technology
-
view
8.095 -
download
4
description
Transcript of Amebaサービスのログ解析基盤
Amebaサービスのログ解析基盤
株式会社サイバーエージェントアメーバ事業本部 プラットフォームディビジョンNeutralTechnologyGroup
鈴木 俊裕
自己紹介• 鈴木 俊裕(すずき としひろ)
• 27歳
• 株式会社サイバーエージェントアメーバ事業本部 プラットフォームディビジョンNeutralTechnologyGroup(新卒入社4年目)
• ログ解析基盤をやっている
• 【twitter】@brfrn169 【hatena】 brfrn169
アジェンダ
• Hadoop/Hiveを用いたログ解析基盤Patriot
• Flume + HBaseによるリアルタイム解析システムStinger
Hadoop/Hiveを用いたログ解析基盤Patirot
Patriot開発までの経緯[2009年]
11月 開発合宿にて大議論 → ログ解析基盤が必要という結論
局長に直訴 → 即GOサイン[2010年]
3月末 本格検証開始7月 第一弾リリース11月 WebUIを中心にリニューアル
今までの問題点
• 各サービスごとに独自に解析
• ログ容量の肥大化- 消されていくログ
• サービス開発担当者が解析部分まで手が回らない- モバイルゲーム・スマフォなど開発スピードがはやい
- サービスリリースしてすぐに情報が欲しい
Patriotの目的
• Amebaサービス全体の統合的な現状把握と未来予測
• 各サービスのデータの集約
• サービス開発支援
方法
• ログの集約- HDFS
• ログの集計・構造化- Hive(Map/Reduce)
• 集計結果の表示- Patriot WebUI
• アドホックな集計、解析- Hue
Patirotの名前の由来
• 迎撃ミサイル
• 攻撃のためではなく防御のための武器
• レーダー装置や射撃管制装置
Hadoopについて
• HDFS
- 巨大なファイルブロック(デフォルトで64M)
- 同一ファイルブロックのコピーを複数のノードが保持
• MapReuce
- 互いに並列可能な形に処理を分解
- 関数型言語の考え方を巨大データに適用
- map関数(=射影)とreduce関数(=集約)
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クラスタ
Hiveについて
• Hadoopのサブプロジェクト
• Facebookで開発されていた
• HiveQLというSQLライクな言語でMapReduceを記述
• 同様の試みにPig(スクリプト言語)
Hiveについて
• 特徴‣ HiveQL
- SQLのような言語でMapReduceを記述
‣ メタストア- デーブルのカラム情報などを保持- デフォルトはDerby
- PatriotではMySQLを使用
‣ 行単位での更新が出来ない- Partitionを使う
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
・・・
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’);
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;
Patriotについて
• 開発体制- システム4名
- インフラ担当
- 課金系担当
- 会員獲得系担当
都度対応
Patriotについて
• 解析フロー
収集サーバHadoopクラスタ
ログ整形Hiveインポート
Hive Job各サービス
サマリDB(MySQL)
サマリデータ
View
Patriotについて
• システム構成namenode2CoreCPU16GB RAM
jobtracker4CoreCPU24GB RAM
secondary namenode2CoreCPU16GB RAM
datanode/jobtracker × 184CoreCPU16GB RAM
1TB HDD × 4
Patriotについて
• システム構成- CDH3u0(Hadoop0.20, Hive0.7, Hue1.2.0)
- Puppet
- Nagios, Ganglia
- ExtJS3.2.1
- Hinemos 3.2
Patriotについて
• インポート処理ログ転送DBレプリケーション
Hadoopクラスタ
各サービスSCP
• 正規表現でマッチするレコードを抽出• gzip,SeqenceFileでHDFS上に出力• Hiveにロード
収集サーバ
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 } (つづく)
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" }}}
Patriotについて
• 集計・解析処理 Hadoopクラスタ
サマリDB(MySQL)
サマリデータ
Hive JobBatchサーバ
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'"}・・・
Patriotについて
• 運用上の数字‣ HiveQLクエリ
- デイリー(定型)・・・約600
- マンスリー(定型)・・・約800
‣ ログ容量(デイリー)・・・約20GB強
‣ 処理時間(全集計)・・・4~5時間
Patriotについて
• WebUI(デイリー、マンスリー)
Patriotについて
• WebUI(属性レポート)
Patriotについて
• WebUI(タレントブログ解析 大和)
あるタレントのブログを見ている人の属性
Patriotについて
• Hue
‣ HiveQLを直接WebUIから叩ける
‣ アドホックな解析
Patriotについて
• Hue
Patriotの今後
• アクセスログの収集
• ログ収集の改善
- Flume
• DSLの改善
• レコメンド
• 「なう」などのグラフ構造を使った解析
- グラフデータベース?
Flume + HBaseによるリアルタイム解析システム
Stinger
リアルタイム解析システム Stinger
• ブログ閲覧のリアルタイムトラッキング
• ブログ閲覧者の属性別トラッキング
• Flume + HBaseを用いて プロトタイプ を実装
Flumeについて
• 概要‣ オープンソースのログ収集システム‣ Cloudera社が開発
‣ Flume Agent
‣ Flume Collector
‣ Flume Master
Flumeについて
HBaseについて
• 概要‣ Google BigTableをモデルとした分散カラム指向データストア
‣ HDFS上に構築
‣ HDFSにランダム読込/書込機能を追加
HBaseについて
• データモデル‣ 各レコードはRow Key(主キーみたいなもの)を持つ
‣ テーブルは、一つ以上のカラムファミリー
- 通常は少数のカラムファミリー
- カラムファミリーはほとんど変化しない
- カラムファミリーはいくつでもレコードを持つことができる
‣ 各レコードはタイムスタンプを持っている
- 複数バージョンの行が存在する
HBaseについて
• データモデル
HBaseについて
• アーキテクチャ
HBaseについて
• 使いどころ‣ 高い信頼性
‣ 大容量のデータ
- 数百ギガバイトからペタバイトまで
‣ 高書込スループット
- ノードあたり 数千クエリ/秒
Stingerについて
• システム構成
node + soket.ioHBaseクラスタ
pollingpush
flume agent
log
flume collector
increment
flume master
websocket
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
Stingerについて
• デモ
‣ データはモバイルブログ閲覧ログの一部で
Stingerの今後
• アメーバブログのアクセス解析をリアルタイムに?
• リアルタイムな広告効果計測システム?
まとめ• Patriot
• ログ解析基盤
• Hadoop/Hive
• Stinger
• リアルタイム解析システム
• Flume + HBase
• ご清聴ありがとうございました