昨日の日記「Fluentd + Elasticsearch + Kibana での解析の構成を考える」からの続き。
今日はログ収集側、つまり第三tDiary.Net側の仕込みをする。
Fluentd 公式ドキュメントの「Installing Fluentd Using deb Package」に従ってインストールをする。あ、そうそう第三tDiary.Netは Debian wheezy の上で動いている。
公式ドキュメントには apt のリポジトリ登録と td-agent のインストールを一括して実行してくれるシェルスクリプトの紹介があるので、そのままコピペ。
% curl -L http://toolbelt.treasuredata.com/sh/install-debian-wheezy-td-agent2.sh | sh
最近は、このようにリモートのシェルスクリプトを実行するパターンのインストーラーも多いけど、本当はいきなり実行せずに中身を確認すべきだよね。
http://toolbelt.treasuredata.com/sh/install-debian-wheezy-td-agent2.sh
スクリプト内でやっていることはこんな感じ。
apt-get update
apt-get install td-agent
問題になりそうなことはやっていない。
まぁ、メジャーなプロジェクトだったら、大抵の場合は心配せずとも良い気がするんだけど、何も考えずに root 権限で実行するとヤバイ場合もあることだけは意識しておくべき。オレも含めて。
あと今回使うもの、まだ使わないものも含めて Fluentd のプラグインをインストールしておく。これもどこかのサイトを参考にさせて貰ったんだけど、、、元サイトを見つけられず。
% sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-tail-asis
% sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-parser
% sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-grepcounter
% sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-file-alternative
% sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-elasticsearch
% sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-geoip
fluent-plugin-elasticsearch
のインストール時に curl のライブラリが必要だと言われるかもしれない。状況によるとは思うけど、下記のどちらかをインストールすれば良いと思う。
% sudo apt-get install libcurl4-openssl-dev
% sudo apt-get install libcurl4-gnutls-dev
また、fluent-plugin-geoip
では、geoip のライブラリが要求されるので、インストールしていなければ libgeoip-dev
もインストールする。
% sudo apt-get install libgeoip-dev
Fluentd (td-agent) の設定ファイルは `/etc/td-agent/td-agent.conf' になる。ここにログの入力設定と出力設定を書くイメージなるようだ。
まず入力部分のところ。これは Apache2 のアクセスログを対象とする。tail インプットプラグイン を使えば、既存のログ出力設定をいじらずに済むようなので、これを使う。
ログのフォーマット指定(format
パラメータ)については、通常なら apache2
を設定するだけで良いようなのだが、第三tDiary.Netでは、ログのフォーマットをちょっとだけいじっているので、このままではパースできそうもなかったので、正規表現を自前で書いてみた。
ちなみにログのフォーマットはこんな感じ。複数の日記が稼働しているので、ログの中にホスト名を埋め込んでいる。
LogFormat "%h %l %u %t %{Host}i \\"%r\\" %>s %b \\"%{Referer}i\\" \\"%{User-Agent}i\\"" tdiary
これに対応する td-agent の format 設定はこうしてみた。
これ、だいぶがんばって書いたんだけど、tail インプットプラグイン のドキュメントには apache2 フォーマットの正規表現の例が書いてあったんだね。これを参考にして改良すれば良かったのかも。
<match>
の方で、stdout
にしておくと、td-agent のログ(/var/log/td-agent/td-agent.log
)に書かれるようなので、こいつを使ってデバッグ作業をした。
とりあえず今日のところはここまで。