fluentd を利用した大規模ウェブサービスのロギング
Upcoming SlideShare
Loading in...5
×
 

fluentd を利用した大規模ウェブサービスのロギング

on

  • 68,236 views

 

Statistics

Views

Total Views
68,236
Views on SlideShare
38,156
Embed Views
30,080

Actions

Likes
170
Downloads
301
Comments
0

51 Embeds 30,080

http://nagayama.hatenablog.com 16594
http://d.hatena.ne.jp 6639
http://secondlife.hatenablog.jp 3708
http://cptl.corp.yahoo.co.jp 1027
http://freerss.net 496
http://reader.freerss.net 405
http://test.shuffle.beat.co.jp 267
http://s.deeeki.com 150
http://a0.twimg.com 94
http://blog.kirishikistudios.com 93
http://www.freerss.net 93
https://livesense.atlassian.net 68
http://192.168.33.10 53
https://twitter.com 48
http://tweetedtimes.com 42
http://confluence.livesense.jp 41
http://feeds.feedburner.jp 40
http://us-w1.rockmelt.com 27
http://www.twylah.com 22
http://hotchpotch.hatenadiary.com 21
http://webmemo.uzuralife.com 19
https://www.google.co.jp 18
http://webcache.googleusercontent.com 15
https://si0.twimg.com 12
http://search2memo.net 11
http://harajuku-tech.org 10
https://confluence.livesense.jp 10
http://feedly.com 5
http://slide.localhost 5
https://ocean.cybozu-dev.com 5
http://localhost 5
http://xianguo.com 5
http://nuevospowerpoints.blogspot.com 4
http://www.hanrss.com 3
http://slideshare-download.seesaa.net 3
http://geechscamp.lovepop.jp 3
http://www.feedspot.com 3
http://ab-sn5.tumblr.com 2
http://131.253.14.66 2
http://leapf.org 1
http://pepper 1
http://twitter.com 1
https://kcw.kddi.ne.jp 1
http://digg.com 1
http://translate.googleusercontent.com 1
http://safe.txmblr.com 1
http://news.google.com 1
http://cache.yahoofs.jp 1
http://dev.portfolio.zeroprm.com 1
http://131.253.14.98 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

fluentd を利用した大規模ウェブサービスのロギング fluentd を利用した大規模ウェブサービスのロギング Presentation Transcript

  • fluentd を利用した大規模ウェブサービスの ロギング cookpad id:secondlife / @hotchpotch
  • 提供
  • • id:secondlife• @hotchpotch• 舘野祐一 / Yuichi Tateno• Shibuya.js 発起人• Asakusa.rb 所属• fluentd コミッタ̶• BiS, ももいろクローバーZ
  • 仕事•COOKPAD 開発基盤部所属•サービス開発をしやすく=ユーザに価値を届けやすく•Ruby/Rails のバージョン上げる•ミドルウェアの導入/ライブラリの実装•テスト / CI•デプロイの仕組み
  • なぜロギング?
  • なぜロギング?
  • なぜロギング?価値 検証
  • なぜロギング?価値 検証
  • なぜロギング? 現行いまいち 検証に時間がかかる価値 = 検証ユーザに価値を届けるのが遅れる 解決すべき仕事
  • COOKPAD
  • COOKPAD1,500万 UU (pc のみ)110万レシピ
  • ロギング それPV 以外
  • PVログ•巨大なデータ•MySQL•利用方法 •バッチで一時集計 •中間テーブルに保存
  • PVログ•巨大なデータ•MySQL•利用方法 •バッチで一時集計 •中間テーブルに保存
  • PVログ + MySQL•オンメモリなら高速 •一日分ならオンメモリ •バッチ用DB二台(メモリ32G)•オンメモリでない •遅い
  • PVログ + MySQL•保存速度 •blackhole + slave で速い •がそれでも詰まる時が
  • PVログ + MySQL•データの保持 •巨大・直近のデータしか保持できない •今後スケールしない恐れ•過去ログはバックアップ •即座に利用できない •過去データをサービス開発に利用できない
  • 他のログ•MySQL へ •JSON でシリアライズ •create table
  • 他のログ+MySQL•アプリケーションでたくさん記録 •insert コスト •もっと手軽に取りたいのに!•データ構造 •JSON で入れる -> 集計面倒 •create table -> たくさんテーブル…
  • 悩み•データストレージ •MySQL でない選択肢も •ログをたくさんとっても重くならない•データ構造 •扱いやすいスキーマレス •だけど高速・スケールする
  • fluentd
  • fluentd•データストレージ •MySQL でない選択肢も •ログをたくさんとっても重くならない•データ構造 •扱いやすいスキーマレス •だけど高速・スケールする
  • cookpad での構成
  • fluentd•構造化ロガー•安定性•パフォーマンス•プラガブル
  • 構造化ロガー前•MySQL だとカラム追加が必要•様々な所に気を使う •サービスを落とさない •バッチのコード•みんなログの情報を追加しない
  • 構造化ロガー後•MySQL だとカラム追加が必要 解決•様々な所に気を使う •サービスを落とさない •バッチのコード•みんなログの情報を追加しない
  • パフォーマンス•MySQL •insert コスト •blackhole ストレージエンジンでも ネットワークコストがそこそこ•アプリに気軽にログをしこみすぎると遅 く…
  • パフォーマンス•fluentd•バッファ + 転送•アプリサーバのローカルに fluentd •定期的に転送 •アプリでの処理時間はほぼ0コスト
  • パフォーマンス•処理能力•中央の fluentd は1台、1スレッドで 十分処理できてる (m1.large)
  • 安定性•11月下旬から合計100台弱で運用•本体は安定している •一回だけ古いバージョンで自然死•エラーになるのはプラグイン •対策して pull request
  • 安定性•buffered•転送先/保存先が落ちてても再送 •一時的に数分止めても、ちゃんと再送•保存先 mongodb •6時間止めても、ちゃんと保存
  • プラガブル•さまざまなInput Plugin •tail / TCP / HTTP etc...•さまざまなOutput Plugin •s3 / mongo / td / hdfs ...•Rubyで書ける
  • fluentd•PV系のLog •MySQL からの移行検討中•その他ロギング全部 •もうすでに移行 •mongodb
  • cookpad での具体的な利用法
  • fluentd 構成•すべてのアプリサーバは td-agent •CentOS なので rpm で •td-agent は自前のRuby1.9.2入り •構成管理は puppet •基本的に設定ファイルは変わらない
  • <match cookpad.**> type tcp host fluentd-proxy-01 retry_limit 9 <secondary> host fluentd-proxy-02 </secondary></match>
  • fluentd 構成•中央の転送用サーバ •Ruby 1.9.2 (RVM) •git で設定ファイル管理 •Gemfileで各種fluentd/plugin利用 •よく変更するため
  • # Gemfilesource :rubygemsgem "yajl-ruby"gem “bson_ext”gem "fluent-plugin-mongo", :git=>git://git-01/fluent-plugin-mongogem "fluentd", 0.10.8# ...
  • $ git pull --rebase$ bundle install$ bundle exec fluentd -c fluentd.conf -d fluentd.pid -o fluentd.log
  • Rails からの利用class CookpadLogger  class RailsLogger < ::Fluent::Logger::TextLogger    def initialize(rails_logger)      super()      @rails_logger = rails_logger    end    def post_text(text)      @rails_logger. debug("[CookpadLogger]t" + text)    end  end
  • Rails からの利用class CookpadLogger def self.create_logger(tag = cookpad) case Rails.env when production Fluent::Logger::FluentLogger.new(tag) when test Fluent::Logger::TestLogger.new else RailsLogger.new(Rails.logger) end end
  • テスト時it “PVログにユーザの アクセスが記録されていること”log = CookpadLogger.pvlog.queue.lastlog[:user_id].should == user.id
  • ロガーへの実装追加class CookpadLogger module PVLog def post(tag, data) super tag, normalize(data) end def normalize(data); do_something data; end enddef self.pvlog @@pv_log ||= lambda { logger = create_logger ‘cookpad.pvlog’ logger.extend PVLog }.callend
  • Tips•バッファからすぐ処理 •$ pkill -USR1 -f fluentd •flush_interval 1s # 設定に•設定ファイルを再読み込み •$ pkill -HUP -f fluentd •(ただしGemfile/ライブラリ更新時は うまくいかない)
  • 嵌ったこと•td-agent の設定ファイルの反映後の再 起動漏れ•初期設定のまま運用してしまった•設定でルーティングにミスっても エラーにならない•集計時、ちょっと少ないことに気づい て調査 •ngrep で転送されてないサーバが!
  • こうなったら嬉しいな•fluentd の設定ファイルをもっと柔軟に •今ほぼ全部の plugin を独自 git のレ ポジトリで管理 •正規表現/フィルター等…•変数等使えないため設定のコピペが…•それ Ruby の DSL で?
  • ログの重要性•数値は 何が正しいか の指針に •ログを取る、が fluentd で簡単に•きちんと統計を考えられるエンジニア •巨大データ処理 -> Map/Reduce の 出現で簡単に•どのデータに何の価値があり、それを仕 事に結びつけらるか
  • 提供
  • 提供 データを通じて料理をより楽しくしていきたい データマイニングエンジニア 大募集中です!
  • 質問? 提供 MySQL 統計 AWS EMR サービス開発 mongodb RailsRuby パフォーマンスmiyagawa fluentd