CodeZine(コードジン)

特集ページ一覧

Fluentdで始めるリアルタイムでのログ有効活用

ログ収集ミドルウェア「Fluentd」入門

  • LINEで送る
  • このエントリーをはてなブックマークに追加

目次

Fluentdの概要

 Fluentdは、「Log everything in JSON」を掲げ、すべてのログをJSONとして扱うことを目的として開発されたログコレクターデーモンです。さまざまなログ元からログをインプットとして収集し、アウトプット先にJSON形式に変換したものを各種データストアに渡します。

Fluentdの出力形式について

 Fluentdは、インプットされたログを「タグ」と「日時」と「レコード」の3つから構成される形式に変換します。リスト1は、nginxのログをFluentdにインプットし、テキストファイルにアウトプットしたログです。リスト1を見ると、時間とタグが冒頭にあり、その後にJSON形式のKey-Valueがレコードとして続いていることが分かります。Fluentdに投入されたログは、いったん必ずリスト1のような形式に変換されます。

[リスト1]fluentdの変換サンプル
2012-09-11T10:01:03+09:00       nginx.access    {"host":"10.10.0.1","user":"-","method":"GET","path":"/test/test.aspx?sid=15","code":"200","size":"14835""agent":"DoCoMo/2.0","response_time":"0.157"}

Fluentdのプラグイン

 Fluentdの機能は、インプットとアウトプットとバッファリングの3種類に分かれています。図3のように、Fluentdへのインプットとアウトプットはすべてプラグインで構成されています。

図3:Fluentdとプラグイン
図3:Fluentdとプラグイン

 デフォルトでもいくつかのプラグインが同梱されていますが、プラグインを追加することでさらに機能拡張できます。すでに多くのプラグインが有志によって開発され公開されています。また、Rubyを使用して既存のプラグインを改造したり、新規プラグインを開発することができます。他言語のスクリプトを呼び出すためのプラグインも公開されていますので、使用するとRuby以外の言語でも機能拡張ができるようになっています。

主なプラグイン
プラグイン種別 プラグイン名 説明
Input
プラグイン
in_forward TCPソケットで、他のFluentdインスタンスから
イベントログを受けるのに最もよく使用されるプラグイン
in_http HTTP Postでレコードを受け取るプラグイン
in_tail テキストファイルの末尾からイベントログを
読み取るプラグイン
in_exec 外部ブログラムを実行してイベントログを受信したり
pullするプラグイン
in_syslog UDP上でsyslogプロトコル経由で
レコードを受け取るプラグイン
in_scribe Scribeプロトコルからレコードを受け取るプラグイン。
ScribeはFacebookがオープンソースで提供する
ログ収集デーモン。
Output
プラグイン
out_file ファイルにイベントログを書きだすプラグイン
out_forward 他のFluentdインスタンスにイベントログを転送するプラグイン
out_exec 外部プログラムにタブ区切りでイベントログを受け渡すプラグイン
out_exec_filter タブ区切りのイベントログを外部プログラムに渡し、
外部プログラムから新しいイベントログを読み込むプラグイン
out_copy イベントログを複数のアウトプットプラグインに渡すプラグイン
out_roundrobin ラウンドロビンアルゴリズムを使用して、
複数のアウトプットにイベントログを分散させるプラグイン
out_stdout stdoutにイベントログをプリントするプラグイン
out_null ログを捨てるプラグイン
out_s3 Amazon S3クラウドオブジェクトストレージサービスに
イベントログを書き込むプラグイン
out_mongo MongoDBにイベントログを書き込むプラグイン
out_mongo_replset ReplicaSetを使用しているユーザー用のMongoDBに
イベントログを書き込むプラグイン
out_webhdfs HDFS (Hadoop Distributed File System)に
イベントログを書き込むプラグイン

Fluentdの導入

 Fluentdは簡単に導入することができます。既存のシステム構成やアプリケーションの修正をしなくても導入できるようになっているため、試験的に導入してみることも可能です。

Fluentdのインストール

 今回は、CentOS 5.8でRuby 1.9を使用できる環境を前提として説明します。Fluentdのステーブルパッケージとして、Treasure Data社が管理するtd-agentが提供されています。通常はtd-agentを使用してFluentdを導入するのが一番簡単な導入方法です。

[1]yumにtd-agentの設定を追加する

 yumでインストールするために、td-agent用のyum設定ファイルを/etc/yum.repos.d/td.repoに作成します。td.repoには、リスト2を書き込み保存します。

[リスト2]td-agnetのパッケージ情報を追加する
[treasuredata]
name=TreasureData
baseurl=http://packages.treasure-data.com/redhat/$basearch
gpgcheck=0

[2]yumでtd-agentをインストールする

 td-agentのパッケージ情報を反映させるため、yumを更新し、td-agentをインストールします。

[リスト3]yumでtd-agnetをインストールする
# yum install td-agent

Fluentd(td-agnet)の起動・停止・再起動

 td-agentをインストールが完了すると、/etc/init.d/td-agentのスクリプトが配置されているます。このスクリプトを使用するとtd-agentを起動・停止・再起動することができます(リスト4)。

[リスト4]td-agentの起動・停止・再起動
# /etc/init.d/td-agent start
# /etc/init.d/td-agent stop
# /etc/init.d/td-agent restart

Fluentd(td-agnet)自体のログの参照

 td-agent自体のログは、/var/log/td-agent/td-agent.logに出力されるので、td-agentを起動したり、設定ファイルを修正し再起動したりした後には、ログを確認して正常に起動しているかどうかを確認してください。

 td-agentの設定ファイルは、/etc/td-agent/td-agent.confに作成されています。デフォルトでサンプル設定が記載されていますので、必要に応じて修正してください。設定ファイルの変更を反映させるためには、td-agentを再起動させる必要があります。今のところ、設定ファイルのチェック機能は提供されていないので、修正しtd-agentを再起動した後は、/var/log/td-agent/td-agent.logを確認してエラーが出ていないか、設定が読み込まれているかを確認してください。

 td-agent.logには、プロセスの起動や停止、設定ファイルの読み込み、設定ファイルのロード状況などが記載されます。

 リスト5は、td-agentの起動と、読み込んだ設定ファイルのパス、追加したプラグインについて出力されています。

[リスト5]td-agent.logのログ例(1)
2012-09-11 17:04:50 +0900: starting fluentd-0.10.25
2012-09-11 17:04:50 +0900: reading config file path="/etc/td-agent/td-agent.conf"
2012-09-11 17:04:50 +0900: adding source type="forward"
2012-09-17 21:01:14 +0900: adding source type="tail"

 リスト6は、設定ファイルの記述ミスで使用されなかったパラメータについて出力された例です。「is not used.」のような出力がある場合は、設定ファイルの記述ミスの可能性があるので、設定ファイルを見直すようにしてください。

[リスト6]td-agent.logのログ例(2)
2012-09-11 17:04:50 +0900: parameter 'type' in <match nginx.access>
  type file
  path /var/log/fluentd/access_log
</match> is not used.

 詳細は後述しますが、Fluentdの出力はタグを使用して制御されます。プラグインを使用する場合は、タグを指定します。しかし、Fluentdの出力のタグにマッチする設定が記載されていない場合は、リスト7のようなエラーが出力されます。この場合は、設定漏れの可能性が高いので、設定ファイルやログ活用フローを見直す必要があります。

[リスト7]td-agent.logのログ例(3)
2012-09-11 18:01:01 +0900: no patterns matched tag="debug.test"

  • LINEで送る
  • このエントリーをはてなブックマークに追加

修正履歴

  • 2013/02/25 20:34 誤字を修正しました

著者プロフィール

  • WINGSプロジェクト 大和屋 貴仁(ヤマトヤ タカヒト )

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5