• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
fluentd を利用した大規模ウェブサービスのロギング
 

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

on

  • 67,510 views

 

Statistics

Views

Total Views
67,510
Views on SlideShare
37,620
Embed Views
29,890

Actions

Likes
170
Downloads
299
Comments
0

49 Embeds 29,890

http://nagayama.hatenablog.com 16520
http://d.hatena.ne.jp 6639
http://secondlife.hatenablog.jp 3665
http://cptl.corp.yahoo.co.jp 1022
http://freerss.net 496
http://reader.freerss.net 405
http://test.shuffle.beat.co.jp 267
http://s.deeeki.com 98
http://a0.twimg.com 94
http://www.freerss.net 93
http://blog.kirishikistudios.com 93
https://livesense.atlassian.net 68
http://192.168.33.10 49
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
https://confluence.livesense.jp 10
http://harajuku-tech.org 10
http://search2memo.net 7
http://feedly.com 5
http://xianguo.com 5
http://slide.localhost 5
https://ocean.cybozu-dev.com 5
http://localhost 5
http://nuevospowerpoints.blogspot.com 4
http://www.feedspot.com 3
http://ab-sn5.tumblr.com 2
http://131.253.14.66 2
http://dev.portfolio.zeroprm.com 1
http://reader.aol.com 1
http://www.hanrss.com 1
http://cache.yahoofs.jp 1
http://leapf.org 1
http://131.253.14.98 1
https://kcw.kddi.ne.jp 1
http://digg.com 1
http://translate.googleusercontent.com 1
http://pepper 1
http://news.google.com 1
http://twitter.com 1
http://safe.txmblr.com 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