Fluentdを使ってローカル環境にログ収集サーバを構築する

アプリケーションサーバとログ収集サーバにFluentdをインストールし、アプリケーションサーバからログ収集サーバにログをフォワードする方法を紹介します。
ここでは、アプリケーションサーバをMacOS X、ログ収集サーバをVagrantとします。

Fluentdをホストマシン(Mac)にインストール

.dmgをダウンロードしてインストールしてください。

以下でFluentdを起動します。

1
$ sudo launchctl load /Library/LaunchDaemons/td-agent.plist

Fluentdのログは /var/log/td-agent/td-agent.log に出力されます。

1
$ less /var/log/td-agent/td-agent.log

停止は以下です。

1
$ sudo launchctl unload /Library/LaunchDaemons/td-agent.plist

設定ファイルは /etc/td-agent/td-agent.conf です。
設定を反映させるには、以下のコマンドで行います。

1
2
$ sudo launchctl stop td-agent
$ sudo launchctl start td-agent

以下でFluentdにリクエストします。

1
$ curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test

/var/log/td-agent/td-agent.log にログが出力されているはずです。

1
2
$ tail -n 1 /var/log/td-agent/td-agent.log
2016-07-01 16:51:47 -0700 debug.test: {"json":"message"}

ログ収集サーバにFluentdをインストール

次にログ収集サーバにFluentdをインストールします。
OSはCentos6.5を使いました。
vagrantの使い方は割愛します。
networkはprivate_networkとし、192.168.33.10でアクセスできることとします。

以下でログ収集サーバにログインします。

1
2
3
4
5
6
7
8
9
10
$ vagrant ssh

# iptablesは無効にしておきます
$ sudo service iptables stop

# 以下のコマンドでFluentdインストールします。
$ curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh

# Fluentdを起動します
$ sudo /etc/init.d/td-agent start

ログ収集サーバでも同じように確認してみます。

1
2
3
$ curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test
$ tail -n 1 /var/log/td-agent/td-agent.log
2016-07-01 16:51:47 -0700 debug.test: {"json":"message"}

アプリケーションサーバからログ収集サーバのFluentdにリクエストを送る

アプリケーションサーバからログ収集サーバのFluentdにリクエストを送れるかを確認します。

1
$ curl -X POST -d 'json={"json":"message"}' http://192.168.33.10:8888/debug.test

ログ収集サーバでログを確認します。
Fluentdは出力をバッファするのでフォワードされるまでにタイムログがある場合があります。

1
$ tail -n 1 /var/log/td-agent/td-agent.log

疎通を確認できたら、アプリケーションサーバからログ収集サーバのFluentdにログをforwardしてみましょう。

アプリケーションサーバの/etc/td-agent/td-agent.conf を以下のように編集します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<source>
type http
port 8888
</source>

<source>
@type forward
port 24224
</source>

# tagがvagrantの場合はvagrantのFluentdにフォワードする
<match tag vagrant.**>
type forward
<server>
host 192.168.33.10
port 24224
</server>
</match>

<match debug.**>
type stdout
</match>

ログ収集サーバの/etc/td-agent/td-agent.confに以下の設定を追加します。
tagがvagrantで送られてきたものをログに出力します。

1
2
3
<match vagrant.**>
type stdout
</match>

以下のコマンドでログ収集サーバのFluentdにデータがフォワードされます。

1
$ curl -X POST -d 'json={"json":"Fluentd!!!"}' http://localhost:8888/vagrant.test

以上で基本的なフォワードの設定ができました。

ファイルを監視してログ収集サーバにフォワードする

次はファイルを監視してファイルにデータが追加されたらその内容をログ収集サーバにフォワードするようにします。
in_tailプラグインを使います。
in_tailプラグインを使うにはtypeにtailを使います。

アプリケーションサーバの/etc/td-agent/td-agent.confに以下を追記します。

1
2
3
4
5
6
7
<source>
type tail # in_tailプラグインを指定
path /tmp/access_log # 監視するファイルの指定
tag vagrant.access_log # ログにつけるタグを指定
pos_file /tmp/access_log.pos # ファイル内のどの行までを読んだかを記録しておくファイルを指定
format none # フォーマットはnoneを指定
</source>

設定を反映させるには、以下のコマンドで行います。

1
2
$ sudo launchctl stop td-agent
$ sudo launchctl start td-agent

/tmp/access_log に追記してみましょう。

1
$ echo "hello" >> /tmp/access_log

すると、ログ収集サーバのFluentdに内容がフォワードされます。

参考リンク