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をインストールする
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>
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.
actindi/act-fluent-logger-rails
今さら聞けないfluentd~クラウド時代のログ管理入門(1):増えるログ、多様化するログをどう効率的に運用するか (1/2) - @IT
今さら聞けないfluentd~クラウド時代のログ管理入門(2):fluentdと定番プラグインのインストール (1/2) - @IT
今さら聞けないfluentd~クラウド時代のログ管理入門(3):fluentdの効果的な活用例と安定運用のポイント (1/3) - @IT
柔軟なログ収集を可能にする「fluentd」入門 - さくらのナレッジ
柔軟なログ収集を可能にする「fluentd」入門 - さくらのナレッジ - Part 2
柔軟なログ収集を可能にする「fluentd」入門 - さくらのナレッジ - Part 3