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

           cookpad
  id:secondlife / @hotchpotch
提供
• id:secondlife
• @hotchpotch
• 舘野祐一 / Yuichi Tateno
• Shibuya.js 発起人
• Asakusa.rb 所属
• fluentd コミッタ̶
• BiS, ももいろクローバーZ
仕事
•COOKPAD 開発基盤部所属
•サービス開発をしやすく=ユーザに価値
を届けやすく

•Ruby/Rails のバージョン上げる
•ミドルウェアの導入/ライブラリの実装
•テスト / CI
•デプロイの仕組み
なぜロギング?
なぜロギング?
なぜロギング?



価値   検証
なぜロギング?



価値   検証
なぜロギング?
    現行いまいち

   検証に時間がかかる
価値     =     検証
ユーザに価値を届けるのが遅れる

    解決すべき仕事
COOKPAD
COOKPAD

1,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利用
  •よく変更するため
# Gemfile
source :rubygems

gem "yajl-ruby"
gem “bson_ext”
gem "fluent-plugin-mongo",
 :git=>'git://git-01/fluent-plugin-mongo'
gem "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.last
log[: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
 end

def self.pvlog
 @@pv_log ||= lambda {
  logger = create_logger ‘cookpad.pvlog’
  logger.extend PVLog
 }.call
end
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 Rails
Ruby パフォーマンス
miyagawa fluentd

More Related Content

PPTX
Fluentd+elasticsearch+kibana(fluentd編)
PDF
ROMA のアーキテクチャと社内事例
PPTX
EmbulkとDigdagとデータ分析基盤と
PDF
Embulkを活用したログ管理システム
PDF
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
PDF
Apache Drill で見る Twitter の世界
PDF
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
PDF
分割と整合性と戦う
Fluentd+elasticsearch+kibana(fluentd編)
ROMA のアーキテクチャと社内事例
EmbulkとDigdagとデータ分析基盤と
Embulkを活用したログ管理システム
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
Apache Drill で見る Twitter の世界
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
分割と整合性と戦う

What's hot (20)

PDF
introduction of WalB
PDF
Webサーバのチューニング
PPTX
DynamoDBだけでソシャゲを作ってみた
PDF
Presto As A Service - Treasure DataでのPresto運用事例
PDF
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
PDF
ISUCON夏期講習2015_2 実践編
PPTX
Persistence on Azure - Microsoft Azure の永続化
PPTX
Apacheチューニング
PPT
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
PDF
Kibanaでsysstatを可視化する
PDF
Guide to Cassandra for Production Deployments
PDF
MySQL at Yahoo! JAPAN #dbts2018
PDF
爆速クエリエンジン”Presto”を使いたくなる話
PDF
SQLによるDynamoDBの操作
PPTX
Windows Azure Storage:Best Practices and Internals
PDF
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
PDF
PHPからJavaへ乗り換えた。そんな昔話をしよう
PPTX
LINEのMySQL運用について 修正版
PPTX
中小規模サービスのApacheチューニング
PDF
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
introduction of WalB
Webサーバのチューニング
DynamoDBだけでソシャゲを作ってみた
Presto As A Service - Treasure DataでのPresto運用事例
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
ISUCON夏期講習2015_2 実践編
Persistence on Azure - Microsoft Azure の永続化
Apacheチューニング
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
Kibanaでsysstatを可視化する
Guide to Cassandra for Production Deployments
MySQL at Yahoo! JAPAN #dbts2018
爆速クエリエンジン”Presto”を使いたくなる話
SQLによるDynamoDBの操作
Windows Azure Storage:Best Practices and Internals
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
PHPからJavaへ乗り換えた。そんな昔話をしよう
LINEのMySQL運用について 修正版
中小規模サービスのApacheチューニング
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
Ad

Viewers also liked (20)

PDF
Fluentdのお勧めシステム構成パターン
PPTX
はじめての外注ゼミ04 - ツールの選定眼を鍛えよう
PPTX
はじめての外注ゼミ02 - PMBOKの基礎と外注制作の体験談
PDF
「HOME'Sデータセット」提供を通じた不動産領域におけるオープンイノベーション促進の取り組み
PPTX
はじめての外注ゼミ03 - TiDD(チケット駆動開発)の手法、思想とプランニングポーカー
PPTX
はじめての外注ゼミ01 - 目的にあった外注パートナーの探し方
PDF
ビックデータ最適解とAWSにおける新しい武器
PDF
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
PDF
Amazon Elasticsearch Serviceを利用したAWSのログ活用
PPTX
Elasticsearch+nodejs+dynamodbで作る全社システム基盤
PDF
CloudTrail でログとれ〜る
PDF
20140329 modern logging and data analysis pattern on .NET
PDF
AWS Casual2 LT
PDF
20140418 aws-casual-network
PDF
Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習
PDF
5分でできる ebfly
PDF
ログ管理のベストプラクティス
PDF
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
PPTX
Kafkaを活用するためのストリーム処理の基本
PDF
[Black Belt Online Seminar] AWS上でのログ管理
Fluentdのお勧めシステム構成パターン
はじめての外注ゼミ04 - ツールの選定眼を鍛えよう
はじめての外注ゼミ02 - PMBOKの基礎と外注制作の体験談
「HOME'Sデータセット」提供を通じた不動産領域におけるオープンイノベーション促進の取り組み
はじめての外注ゼミ03 - TiDD(チケット駆動開発)の手法、思想とプランニングポーカー
はじめての外注ゼミ01 - 目的にあった外注パートナーの探し方
ビックデータ最適解とAWSにおける新しい武器
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
Amazon Elasticsearch Serviceを利用したAWSのログ活用
Elasticsearch+nodejs+dynamodbで作る全社システム基盤
CloudTrail でログとれ〜る
20140329 modern logging and data analysis pattern on .NET
AWS Casual2 LT
20140418 aws-casual-network
Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習
5分でできる ebfly
ログ管理のベストプラクティス
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
Kafkaを活用するためのストリーム処理の基本
[Black Belt Online Seminar] AWS上でのログ管理
Ad

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

PDF
Fluentd casual
PDF
Fluentd Casual Talks LT #fluentd #fluentdcasual
PDF
社内向けTech Talk資料~Fluentdの基本紹介~
PDF
Fluentd in #tkrk10
PPTX
Log collect with google fluentd
KEY
Webサーバ勉強会 LT資料
PDF
Complex Event Processing on Ruby, Fluentd and Norikra #rubykaigi
PDF
Big Data入門に見せかけたFluentd入門
PPTX
[デブサミ秋2015] 新卒入社エンジニアが 2年間fluentdを運用して学んだ事いろいろ
PDF
FluentdとGrothForecastをインストールする
PDF
Fluentdへようこそ
PDF
Flume cassandra real time log processing (日本語)
PPTX
それFluentdで! #fluentd
PDF
既存システムへの新技術活用法 ~fluntd/MongoDB~
PDF
Shadow Server on Fluentd at Fluentd Casual Talks #3
PPTX
20130215 fluentd esper_2
PDF
Webサーバ勉強会#5
PPTX
PDF
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
PDF
Facebookのリアルタイム Big Data 処理
Fluentd casual
Fluentd Casual Talks LT #fluentd #fluentdcasual
社内向けTech Talk資料~Fluentdの基本紹介~
Fluentd in #tkrk10
Log collect with google fluentd
Webサーバ勉強会 LT資料
Complex Event Processing on Ruby, Fluentd and Norikra #rubykaigi
Big Data入門に見せかけたFluentd入門
[デブサミ秋2015] 新卒入社エンジニアが 2年間fluentdを運用して学んだ事いろいろ
FluentdとGrothForecastをインストールする
Fluentdへようこそ
Flume cassandra real time log processing (日本語)
それFluentdで! #fluentd
既存システムへの新技術活用法 ~fluntd/MongoDB~
Shadow Server on Fluentd at Fluentd Casual Talks #3
20130215 fluentd esper_2
Webサーバ勉強会#5
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
Facebookのリアルタイム Big Data 処理

More from Yuichi Tateno (6)

PDF
Ruby を利用した大規模ウェブサービスの開発・運用
KEY
継続的インテグレーション - Ruby勉強会@札幌-18
KEY
大江戸Ruby会議01 高速なテストサイクルを回すには
PDF
さいきんの JavaScript テスト / Test.js - Shibuya.js 発表資料
PDF
Deb2009
PDF
デブサミ2009 はてなの開発戦略
Ruby を利用した大規模ウェブサービスの開発・運用
継続的インテグレーション - Ruby勉強会@札幌-18
大江戸Ruby会議01 高速なテストサイクルを回すには
さいきんの JavaScript テスト / Test.js - Shibuya.js 発表資料
Deb2009
デブサミ2009 はてなの開発戦略

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