Skip to content

Instantly share code, notes, and snippets.

@kenjiskywalker
Created October 28, 2012 11:10
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kenjiskywalker/3968342 to your computer and use it in GitHub Desktop.
Save kenjiskywalker/3968342 to your computer and use it in GitHub Desktop.
http://fluentd.org/doc/overview.html の日本語翻訳 [Overview]

概要

Fluentdは JSONストリームとしてログを扱うログ収集デーモンです。
これまでのところ、最大のユーザーではピーク時で
100台以上のサーバ、650GB daily 、70,000msgs/sec のログを収集しています。

目的

モダンなWebおよびモバイルアプリケーションは、
非常に多数の イベントログ (例:ログイン、ログアウト、購入、フォローなど)を生成しています。
このイベントログを分析することによって、これらのサービスを大きく向上させることが可能です。
しかし、シンプルで信頼性の高い方法で、これらのログを収集することが課題として残されています。

Fluentdは、次の機能をユーザに提供することによってこの問題を解決します:

  • 簡単なインストール
  • 小さなフットプリント
  • 半構造化データ·ロギング
  • 柔軟なプラグイン機構
  • 信頼性のあるバッファリング
  • ログの転送

簡単なインストール

FluentdはRuby gemにパッケージされています。これは、1回のコマンドでインストールできます。

小さなフットプリント

そのシンプルなアーキテクチャのため、Fluentdのコアは、
わずか3,000行のRubyコードで構成されています。

Fluentdは、さまざまな 入力 元からイベントを収集し、 出力 先に書き込みます。

  • 入力元例: HTTP, Syslog, Apache Log
  • 出力先例: Files, Mails, RDBMS databases, NoSQL storages

下図は、 入力出力 の基本的な考え方を示しています。

   Input                          Output
+--------------------------------------------+
|                                            |
|  Web Apps  ---+                 +--> File  |
|               |                 |          |
|               +-->           ---+          |
|  /var/log  ------>  Fluentd  ------> Mail  |
|               +-->           ---+          |
|               |                 |          |
|  Apache    ---+                 +--> S3    |
|                                            |
+--------------------------------------------+

半構造化データロギング

収集されたイベントログには、 tagtimerecord の3つのエンティティで構成されます。

tagは '.'(例:myapp.access) で区切られた文字列であり、イベントを分類するために使用されます。
timeはイベントが発生したUNIX時間です。recordはJSONオブジェクトです。

柔軟なプラグイン機構

Fluentdの入力元と出力先は、適切なRubyプラグインを書くことで拡張することができ、
そのプラグインは、Ruby gemsとして公開することができます。
使用可能なプラグインのリストは、次のコマンドで見ることができます:

$ gem search -rd fluent-plugin

信頼性のあるバッファリング

従来のシステムでは、予期しない書き込み障害が発生した場合(例:ネットワーク障害)
イベントログが失われる可能性があります。
Fluentdはこの問題と戦うために設計されており、信頼性のあるバッファリング戦略が装備されています。
Fluentdのバッファは、イベントログを含むチャンクのキューを一時的に格納します。

Queue
+---------+
|         |
|  Chunk <-- Write events to the top chunk
|         |  (never block)
|  Chunk  |
|         |
|  Chunk  |
|         |
|  Chunk --> Write out the bottom chunk
|         |  (transactional)
+---------+

Fluentdがその入力元からイベントを受信すると、イベントログがバッファ内の一番上のチャンクに追加されます。
一時的に記憶する為、この操作は次にサーバがダウンしてもブロックされません。

新しい空のチャンクは、(1)一番上のチャンクのサイズが限界に達するか、
または(2)タイマーが切れるキューの先頭にプッシュされます。

別のスレッドでは、次のサーバー、またはストレージサーバーのいずれかにボトムチャンクを書き出します。
この書き込み操作が成功した場合、チャンクはキューから削除されます。
それ以外の場合は、スレッドはキュー内のチャンクを残し、後で再試行します。

Fluentdのバッファはプラグインで実装可能です。
デフォルトのプラグイン、 'memory'は、メモリにチャンクを格納します。
処理速度は速いですが、データの持続性はありません。
別のプラグインに'file'があります。これはファイルにチャンクを格納します。

ログの転送

Fluentdは、シングルノード、およびマルチノード構成をサポートしています。
マルチノード構成では、Fluentdは、分析を行うために1つの場所にイベントログを転送することをサポートします。
アプリケーション·サーバーは、ローカルのログをFluentdインスタンスから中央サーバのFluentdインスタンスへ転送します:

Web Server
+---------+
| Fluentd -------+
+---------+      |
                 |
Proxy Server     |
+---------+      +--> +---------+
| Fluentd ----------> | Fluentd |
+---------+      +--> +---------+
                 |
Database Server  |
+---------+      |
| Fluentd -------+
+---------+
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment