雑文発散

«前の日記(2014-10-23) 最新 次の日記(2014-10-25)» 編集
過去の日記

2014-10-24 [長年日記]

[Fluentd][Elasticsearch] Fluentd + Elasticsearch + Kibana での解析のログ収集部分を考える

昨日の日記「Fluentd + Elasticsearch + Kibana での解析の構成を考える」からの続き。

今日はログ収集側、つまり第三tDiary.Net側の仕込みをする。

Fluentd 公式ドキュメントの「Installing Fluentd Using deb Package」に従ってインストールをする。あ、そうそう第三tDiary.Netは Debian wheezy の上で動いている。

Fluentd (td-agent) のインストール

公式ドキュメントには 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

スクリプト内でやっていることはこんな感じ。

  • sudo で実行
  • apt 用の GPG-KEY の取得と登録
  • /etc/apt/sources.list.d にリポジトリ情報を追加
  • 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) の設定

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)に書かれるようなので、こいつを使ってデバッグ作業をした。

とりあえず今日のところはここまで。

つづきの日記へ