Memo: Fluentdによるログ集約


# はじめに
検証用にログ集約をしたいと思い、そして今までリモートのサーバーからFluentd経由でログを集めたことがなかったのでメモっておく。

# 環境

- OS: CentOS7

# 構成

```
Server1<-Server2
```

# 必要パッケージのインストール

```
$ sudo yum -y install gcc zlib-devel openssl-devel sqlite sqlite-devel
```

# Fluentdのインストール
RPMパッケージのtd-agentをインストールする。
以下のコマンドでインストールできる。

```
$ wget http://packages.treasuredata.com.s3.amazonaws.com/2/redhat/7/x86_64/td-agent-2.1.4-0.x86_64.rpm
$ sudo rpm -ivh td-agent-2.1.4-0.x86_64.rpm
```

とりあえず起動してみる。

```
$ sudo service td-agent start
$ ps -ef | grep td-agent
td-agent  1369     1  0 11:58 ?        00:00:00 /opt/td-agent/embedded/bin/ruby /usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.log --use-v1-config --daemon /var/run/td-agent/td-agent.pid
td-agent  1372  1369  0 11:58 ?        00:00:00 /opt/td-agent/embedded/bin/ruby /usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.log --use-v1-config --daemon /var/run/td-agent/td-agent.pid
opsadmin  1398  1061  0 11:58 pts/0    00:00:00 grep --color=auto td-agent
$ sudo service td-agent stop
```

# Fluentdの設定

行う設定は以下。

- Server2はServer1にログを送る設定
- Server1はServer2から送られてきたログを適当なファイルに書き出す設定

Fluentdで利用可能なinput、output pluginは以下。

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

多分ほかにもあると思うけど。。。

## Server1
今回は送られてきたログをファイルに書き出すだけなので、以下のプラグインを利用する。

- input: in_forward
- output: out_file

設定ファイルは以下。

```file:/etc/td-agent/td-agent.conf
<source>
  type forward
  port 24224
  bind 0.0.0.0
  tag test.server2
</source>

<match test.*>
  type file
  path /tmp/server2/test
  time_slice_format %Y%m%d%H%M
  time_slice_wait 1m
</match>
```

`/tmp/server2`ディレクトリにファイルを作成する。
`time_slice_format`で分毎にファイルを作成する設定をしている。


## Server2
今回はファイルの新規書き込みをServer1に送るだけなので、以下のプラグインを利用する。

- input: in_tail
- output: out_forward

設定ファイルは以下。

```file:/etc/td-agent/td-agent.conf
<source>
  type tail
  path /tmp/test.log
  pos_file /tmp/test.log.pos
  tag test.server1
  format none
</source>

<match test.*>
  type forward
  <server>
    name server1
    host 10.3.0.88
    port 24224
  </server> 
</match>
```

# 試してみる

## Server1準備

ログの格納先であるディレクトリを作成。

```
$ mkdir -p /tmp/server2
$ chmod o+w /tmp/server2 # td-agentに書き込み権限を与える。
```

fluentd起動。

```
$ sudo service td-agent start
```

## Server2準備
日時を吐き出すだけの以下のスクリプトを用意。

```file:output_log.sh
#!/bin/bash

while true; do
  date >> /tmp/test.log
done&

```

スクリプト実行

```
$ chmod +x output_log.sh
$ ./output_log.sh
```

fluentd起動

```
$ sudo service td-agent start
```

## 確認

少し時間をおいてServer1で`/tmp/server2`の配下を確認してみると以下のファイルが作成される。

```
$ ls /tmp/server2/
test.201502211301.b50f913c61fff5d25  test.201502211303.b50f91421af679299
test.201502211302.b50f913c630932364
$
```

中身を確認すると、

```
$ head -10 /tmp/server2/test.201502211301.b50f913c61fff5d25 
2015-02-21T13:01:20+09:00	test.server1	{"message":"2015年  2月 21日 土曜日 13:01:20 JST"}
2015-02-21T13:01:20+09:00	test.server1	{"message":"2015年  2月 21日 土曜日 13:01:20 JST"}
2015-02-21T13:01:20+09:00	test.server1	{"message":"2015年  2月 21日 土曜日 13:01:20 JST"}
2015-02-21T13:01:20+09:00	test.server1	{"message":"2015年  2月 21日 土曜日 13:01:20 JST"}
2015-02-21T13:01:20+09:00	test.server1	{"message":"2015年  2月 21日 土曜日 13:01:20 JST"}
2015-02-21T13:01:20+09:00	test.server1	{"message":"2015年  2月 21日 土曜日 13:01:20 JST"}
2015-02-21T13:01:20+09:00	test.server1	{"message":"2015年  2月 21日 土曜日 13:01:20 JST"}
2015-02-21T13:01:20+09:00	test.server1	{"message":"2015年  2月 21日 土曜日 13:01:20 JST"}
2015-02-21T13:01:20+09:00	test.server1	{"message":"2015年  2月 21日 土曜日 13:01:20 JST"}
2015-02-21T13:01:20+09:00	test.server1	{"message":"2015年  2月 21日 土曜日 13:01:20 JST"}
$
```

の感じで保存されている。
末尾の数字はバッファの識別子とのこと。
http://docs.fluentd.org/ja/articles/out_file

フラッシュされるとパス+時間+.logで表示される。

```
$ ls -1 /tmp/server2
test.201502211301_0.log
test.201502211302_0.log
test.201502211303_0.log
test.201502211304.b50f9145bc2b2c92c
test.201502211305.b50f9149616d69166
test.201502211306.b50f914d05382ca8c
test.201502211307.b50f914d06c6fdd18
$
```

# おわりに
送信先は重み付けして複数選択可能だったり結構柔軟だなと思った。

おしまい。