Fluentdを高速でセットアップしてその機能・効果を体感する


VM上にログ収集ミドルウェア「Fluentd」の動く環境を構築して簡易な設定で動かすまでのまとめ。
Fluentdのメリット、アーキテクチャ、これまでのログ運用との違い等々は一旦全て置いておいておき、まずはその機能を体感する。

自分自身、ログ収集ミドルウェアと聞いてもピンと来なかった経緯もあり、こういう記事を書いた。

ここでは、ApacheのログをFluentdのtailプラグインで監視して、逐次その結果を別のファイルへ出力するまでの設定を行う。


## 1. VagrantでCentOS6.5の環境を新規構築する
環境はVagrantで構築する。

まずはcentos6.5のVagrantBoxをダウンロード。

```
% vagrant box add centos65 http://www.lyricalsoftware.com/downloads/centos65.box
```

ダウンロードが終わったら、適当な作業ディレクトリを作ってVMを立ち上げる。

```
% mkdir fluentd
% cd flutned
% vagrant init centos65
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
.
.
% vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos65'...
==> default: Matching MAC address for NAT networking...
.
.
```

sshログインする。

```
% vagrant ssh
Last login: Fri Dec 20 14:39:16 2013 from 10.0.2.2
[vagrant@vagrant-centos65 ~]$
```

これで作業用サーバの構築は完了！

## 2. Fluentd、Apacheをインストールと起動
ここからは全てログインしたVM上での作業になる。

早速Fluentdをインストール。
色々なインストール方法があるみたいだが、ここでは簡単に終わる以下の方法でインストールする

```
% curl -L http://toolbelt.treasure-data.com/sh/install-redhat.sh | sh

// 確認
% td-agent --version
td-agent 0.10.55
```

Fluentdインストールが無事完了。起動する。

```
% sudo service td-agent start
Starting td-agent:                                         [  OK  ]
```

OK。では続いてApacheをインストール。

```
% sudo yum install httpd -y
```


curlで起動確認もしよう。

```
% curl localhost
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
	<head>
		<title>Apache HTTP Server Test Page powered by CentOS</title>
.
.
.
```

## 3. ApacheとFluentdの設定変更
サーバの準備は整った。
ここから、上述の通り「Apacheのログをtailプラグインで監視してFluentdで取得し、結果を別のファイルに流す」までの設定をする

Fluentdからログファイルが閲覧できるように、Apacheログファイルの権限を変更。

```
% sudo chmod -R 755 /var/log/httpd/
```


そしてFluentdの設定ファイルを編集する。
/var/log/httpd/access_logの変更を入力値としてFluentdが受け取り（取得し）、/tmp/access_log.fluentdに出力するように設定を行っている。

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

// 以下を追記する
<source>
  type tail
  path /var/log/httpd/access_log
  pos_file /var/log/td-agent/sample.pos
  format none
  tag apache.access
</source>

<match apache.access>
  type file
  path /tmp/access_log.fluentd
</match>
```

設定を反映させるため、td-agentを再起動

```
% sudo service td-agent restart
```

たったのこれだけで設定完了。

## 4. Fluentdの動作確認
それでは実際にApacheにリクエストを送ってFluentdの動きを体感する。

まずはApacheにリクエストを送る

```
% curl localhost
```

まずはApacheのログを確認する。

```
% tail -f /var/log/httpd/access_log
::1 - - [15/Nov/2014:15:22:31 +0000] "GET / HTTP/1.1" 403 4954 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
```

ちゃんとリクエストを受け取っている。続いてFluentdが出力したログを確認。

```
% ls /tmp
access_log.fluentd.20141115.b507e750700bb0b47  yum_save_tx-2014-11-15-15-04yXYsYf.yumtx

% tail -f /tmp/access_log.fluentd.20141115.b507e750700bb0b47  yum_save_tx-2014-11-15-15-04yXYsYf.yumtx
2014-11-15T15:22:31+00:00	apache.access	{"message":"::1 - - [15/Nov/2014:15:22:31 +0000] \"GET / HTTP/1.1\" 403 4954 \"-\" \"curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2\""}
```

こちらもちゃんと出力されている。
ここはtail -fとかでリアルタイム監視するともっといいかも。
ひとまずここまでで、Fluentdを実際に動作させその動きを体感することができた。

Fluentdには他にもインプットプラグインとアウトプットプラグインがたくさんあるようなので、色々試してみるといいかも。

- http://docs.fluentd.org/ja/articles/input-plugin-overview
- http://docs.fluentd.org/ja/articles/output-plugin-overview
- http://www.fluentd.org/plugins

ElasticSearch、Kibanaとの連携も鉄板っぽい。
- http://blog.excale.net/index.php/archives/1929

その他Fluentdの詳細については、[公式ドキュメント](http://docs.fluentd.org/ja/articles/quickstart)や「[サーバ／インフラエンジニア養成読本 ログ収集〜可視化編](http://www.amazon.co.jp/gp/product/B00MPDUQQI/)」に載ってるみたい。