ようやくlog周りをfluentdを使って収集する事になったので、fluentd、fluent-agent-liteの設定を勉強すべくvagrantに立ててみていじってみた。
Nginxを使う事が多いので、本番に近い形でnginxで試してみる。
fluent-agent-liteとは?
fluentdは説明不要かと思いますが、fluent-agent-liteとはログ収集対象のサーバに特化したもの。
正規表現パースしないため動作が軽く、負荷の高いアプリケーションサーバでも問題なく使用可能との事。
vagrantの準備
まだvagrantを使った事が無い人は、下記のリンクを参考にしてインストールしてみて下さい。
Vagrant セットアップ (Mac)
VirtualBoxとVagrantで開発環境を構築
vagrantを2つ起動する必要があります。
下記のようにそれぞれipアドレスを設定してvagrant upを実行。
(送信側)
$ cd /home/moriyaman/work/vagrant_sent
$ vagrant init centos
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.network "private_network", ip: "192.168.33.11"
end
$ vagrant up
(受信側)
$ cd /home/moriyaman/work/vagrant_rec
$ vagrant init centos
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.network "private_network", ip: "192.168.33.10"
end
$ vagrant up
送信側:fluent-agent-lite
#fluent-agent-liteのインストール
yum install perl-ExtUtils-MakeMaker
git clone https://github.com/tagomoris/fluent-agent-lite
cd fluent-agent-lite
./bin/install.sh
インストールはこれで完了。設定ファイルを編集。
### LOGS: tag /path/to/log/file
TAG_PREFIX="nginx"
LOGS=$(cat <<"EOF"
access_log /var/log/nginx/access.log
EOF
)
#ポートはデフォルトの24224から変更
PRIMARY_SERVER="192.168.33.10:24207"
fluent-agent-liteを起動させときます。
$ sudo /etc/init.d/fluent-agent-lite start
続いてNginx。自分はchefで入れましたが、インストール方法は任せます。
参考URL:
CentOS6.xにてnginxの最新版をインストールする手順
CentOS 6.3にnginxをインストールする方法
インストールしたらNginxのlogフォーマットをltsvに変更。
log_format ltsv "remote_addr:$remote_addr\t"
"remote_user:$remote_user\t"
"time_local:$time_local\t"
"request:$request\t"
"status:$status\t"
"body_bytes_sent:$body_bytes_sent\t"
"http_refer:$http_referer\t"
"http_user_agent:$http_user_agent";
access_log /var/log/nginx/access.log ltsv;
※ltsvって??という方は下記のURLが参考になります。
LTSV FAQ - LTSV って何? どういうところが良いの?
LTSVフォーマットなログを fluentd + GrowthForecast で料理
受信側:fluentd
td-agentをyumでインストール
[treasuredata]
name=TreasureData
baseurl=http://packages.treasure-data.com/redhat/$basearch
gpgcheck=0
yum install td-agent
必要なプラグインをインストール。
$ /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-parser
$ /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-file-alternative
設定ファイルは下記のようにした。
<source>
type forward
port 24207
</source>
<match **.access_log>
type copy
<store>
type file_alternative
path /tmp/logs/access_log.*.log
time_slice_format %Y%m%d
output_include_time false
output_include_tag false
output_data_type attr:message
add_newline true
</store>
<store>
type parser
tag nginx.access
time_format %d/%b/%Y:%H:%M:%S %z
format ltsv
key_name message
</store>
</match>
<match nginx.access>
type file
path /tmp/logs/parsed_log
</match>
吐き出しのフォルダのパーミッション周りを設定。
$ mkdir /tmp/logs/
$ sudo chown root:vagrant /tmp/logs/
$ sudo chmod 775 /tmp/logs/
fluentdがltsvをサポートしてくれているので、formatはltsvで問題なし!
fluentdを起動。
$ sudo /etc/init.d/td-agent start
あとはvagrantの送信側のipにアクセスを飛ばせば、無事受信parse側で前/parse後のlogファイルを生成する事ができました。
$ ll /tmp/logs/
-rw-r--r--. 1 td-agent td-agent 3089 8月 13 14:22 2014 access_log.20140813.b5007bf755fc6330e.log
-rw-r--r--. 1 td-agent td-agent 347 8月 13 14:22 2014 parsed_log.20140813.b500838471fd35f8e
上手く行かないときは・・・
・送信側が上手く転送できているか?
下記のファイルにエラーメッセージが吐き出されていないか確認
$ sudo tail -f /tmp/fluent-agent.log
・受信側のtd-agentが立ち上がっているか?
僕はこれで少し手こずりました。
[vagrant@localhost ~]$ sudo /etc/init.d/td-agent start
Starting td-agent: [ OK ]
vagrant@localhost ~]$ sudo /etc/init.d/td-agent stop
Shutting down td-agent: [ 失敗 ]
立ち上がったっぽく見えて、実は立ち上がってない。。。
シャットダウンで失敗するのはその証拠です。
その場合は、ログを確認しましょう。
勝手にエラーでシャットダウンかかっているケースが多いです。
$ sudo tail -1000 /var/log/td-agent/td-agent.log
・受信側の設定ファイルはおかしくないか?
設定ファイルの記述方は公式サイトを見るのが一番早いです。
ググると結構formatで苦戦している人がいた。。。
自分で正規表現で作る場合はこのツールオススメ。
Fluentular - Fluentdに設定する正規表現をチェック
参考URL
fluentd (td-agent) , fluent-agent-liteを使ってMySQLのslowqueryをmongoDBに突っ込んで見やすくする
fluent-agent-liteとtd-agentで複数サーバーのログを集約 + chefでの設定例
fluent-agent-lite と td-agent で、小さくはじめる fluentd
Vagrant を使って fluentd のクラスタリングを試す
さらいfluentdの設定ファイル #fluentd ~fluent-plugin-parser,fluent-plugin-file-alternative,fluent-plugin-elasticsearch
Fluentdでparser用の正規表現を書く・試す