82
83

More than 5 years have passed since last update.

Fluentdで、RailsのログをS3に保存する方法

Posted at

What is fluentd?

  • ログ収集をプログラマブルに実施し、状況に応じた柔軟な対応が実現できるソフトウェア
  • ログの管理を「インプット」「バッファ」「アウトプット」という3つの層に分けて管理
  • fluentdは内部で各ログデータに対して「タグ」を付与し、管理
  • fluentdではログの内容(レコード)がJSON形式になっている
    • そのため、アプリケーション側でのパースが容易であるというメリットがある

Why Fluentd? : ログ管理への要求

  • ログの多様化・肥大化への対応
  • ログ情報を基にした分析の必要性

fluentdの設定方法

インストール方法

様々なインストール方法がある

  • RPMパッケージからFluentdをインストールする (Redhat Linux)
  • DEBパッケージからFluentdをインストールする (Debian / Ubuntu Linux)
  • DMGパッケージからFluentdをインストールする (Mac OS X)
  • Ruby GemからFluentdをインストールする
  • ChefでFluentdをインストールする
  • ソースコードからFluentdをインストールする

インストール | Fluentd

Gemからインストールする場合

  • gemの場合は、/etc/init.d/ にスクリプトは作られません
  • daemontools, runit, supervisord, またはupstartのようなプロセス管理ツールを使う必要があります
$ gem install fluentd
$ fluentd --setup ./fluent
$ fluentd -c ./fluent/fluent.conf -vv &
$ echo '{"json":"message"}' | fluent-cat debug.test

RPMパッケージからFluentdをインストールする場合

  • td-agentは、fluentdを稼働させるために必要なRubyインタープリターを含んだ安定版パッケージ
Install td-agent

Installing Fluentd Using rpm Package | Fluentd

Overview of Streaming Import by Treasure Agent (td-agent) | Treasure Data

Pluginのインストール

$ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-parser
$ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-s3

Configure

sudo vi /etc/td-agent/td-agent.conf

インプットプラグインに関する設定

<source>
  type forward
  port 24224
</source>

アウトプットプラグインに関する設定

  • s3にログをアウトプットする設定を記述
  • buffer_pathで、一時的にログをバッファしておく場所を指定
  • flush_intervalを設定することで、バッファされていたログをS3に吐き出す間隔を設定可能
    • time_slice_waitで設定しても良いのかもしれません
<match foo>
  type parser
  key_name messages
  format json
  tag rails
</match>
<match rails>
  type s3

  aws_key_id AWS_KEY_ID
  aws_sec_key AWS_SEC_ID
  s3_bucket foo-log
  s3_endpoint s3.amazonaws.com
  s3_object_key_format %{path}%{time_slice}_%{index}_%{hostname}.%{file_extension}
  path logs/
  buffer_path /var/log/td-agent/buffer/s3

  flush_interval 60s
  time_slice_format %Y%m%d/%Y%m%d-%H
</match>

fluent/fluent-plugin-s3

30分でできる!オブジェクトストレージへのログ保存(fluentd編) | IDC Frontier Engineers' Blog

S3とFluentdを用いた効率的なログ管理 | SmartNews開発者ブログ

Fluentdの起動・停止方法

$ /etc/init.d/td-agent start
$ /etc/init.d/td-agent stop
$ /etc/init.d/td-agent restart
$ /etc/init.d/td-agent status

with Rails

  • Gemfileに以下のGemを追加
gem 'act-fluent-logger-rails'
gem 'lograge'
  • application.rbに以下を追加
    config.log_level = :info
    config.logger = ActFluentLoggerRails::Logger.new
    config.lograge.enabled = true
    config.lograge.formatter = Lograge::Formatters::Json.new
  • config/fluent-logger.ymlを編集
development:
  fluent_host:   '127.0.0.1'
  fluent_port:   24224
  tag:           'foo'
  messages_type: 'string'

test:
  fluent_host:   '127.0.0.1'
  fluent_port:   24224
  tag:           'foo'
  messages_type: 'string'

production:
  fluent_host:   'xxx.yyy.zzz.xxx'
  fluent_port:   24224
  tag:           'foo'
  messages_type: 'string'
  • 環境変数にFLUENTD_URLを設定することでも対応可能
    • 今回は、複数台のサーバーで運用するため、こちらを採用し、サーバー毎にhost変数を設定した
export FLUENTD_URL='http://xxx.yyy.zzz.xxx:24224/foo?messages_type=string'

Collecting and Analyzing Ruby on Rails Logs | Fluentd

fluentd+rails+mongoでサクッとログ環境を整備してみる - dev.log

Streaming Import from Rails Apps | Treasure Data

Refs.

fluent/fluentd

actindi/act-fluent-logger-rails

fluent/fluent-logger-ruby

今さら聞けないfluentd~クラウド時代のログ管理入門(1):増えるログ、多様化するログをどう効率的に運用するか (1/2) - @IT

今さら聞けないfluentd~クラウド時代のログ管理入門(2):fluentdと定番プラグインのインストール (1/2) - @IT

今さら聞けないfluentd~クラウド時代のログ管理入門(3):fluentdの効果的な活用例と安定運用のポイント (1/3) - @IT

柔軟なログ収集を可能にする「fluentd」入門 - さくらのナレッジ

柔軟なログ収集を可能にする「fluentd」入門 - さくらのナレッジ - Part 2

柔軟なログ収集を可能にする「fluentd」入門 - さくらのナレッジ - Part 3

導入手順 - Fluentdにおけるログ運用 - Qiita

fluentdの簡単な使い方、設定方法一覧 - Hive Color

82
83
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
82
83