はじめに
検証用にログ集約をしたいと思い、そして今までリモートのサーバーから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
設定ファイルは以下。
/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
設定ファイルは以下。
/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準備
日時を吐き出すだけの以下のスクリプトを用意。
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
$
おわりに
送信先は重み付けして複数選択可能だったり結構柔軟だなと思った。
おしまい。