はじめに
- こちらで試した後、しばらく時間が空いてしまったので改めて試す
- 今回は
postfixのログで試してみる - 厳密に言うと
fluentdではなくてtd-agentで検証を行なっている
参考
環境
前回の経験を踏まえて OS のバージョンをアップさせた。又、Kibana3 を こちらからではなくて kibana-latest.zip から取得したきたことが相違点。
- Debian 7.1(Wheezy)
- td-agent
- Elasticsearch
- Kibana3
postfix(apt-get install postfix)nginx(apt-get install nginx)※Kibana3を動かす為の Web サーバーとして
構築
前回と異なる点のみを記載。
td-agent
td-agent.conf は下記のように設定した。
<source> type tail format /^(?<date>[^ ]* [^ ]* [^ ]*) (?<host>[^ ]+) (?<process>[^:]+): (?<message>((?<key>[^ :]+)[ :])? ?((to|from)=<(?<address>[^>]+)>)?.*)$/ path /var/log/mail.log tag wheezy-test.maillog.log pos_file /tmp/fluent.pos </source> <match *.maillog.*> index_name adminpack type_name postfix type elasticsearch include_tag_key true tag_key @log_name host 127.0.0.1 port 9200 logstash_format true flush_interval 10s </match>
tag を適切に付けることで複数のホストからログを収集した場合にもホスト単位でのログを確認することが出来る。Elasticsearch は localhost で動かしているので host 127.0.0.1 と port 9200 となる。
尚、/var/log/mail.log のパーミッションを 600 から 644 にするのもお忘れなく...設定後、以下のようにして configtest を行う。
invoke-rc.d td-agent configtest
設定に問題が無い場合には td-agent を再起動する。
Kibana3 と Elasticsearch
Web サーバーは nginx
/usr/share/nginx/www 以下に git clone してきたものを設置した。nginx で無くても良いと思う。
Oops. Looks like you've upgraded from an old version
git clone してきたものを利用しようとすると以下のような表示となってしまう。

ということで表示に従ってこちらをダウンロードして利用する。
Please create at least one index.
Kibana3 に初めてアクセスした際、画面上部にピンク色の帯で以下のようなエラーが表示された。
Error No index found at http://xxx.xxx.xxx.xxx:9200/_all/_mapping. Please create at least one index.If you're using a proxy ensure it is configured correctly.
Elasticsearch のインデックスを作らないといけないとのこと(初期データが入っていないので作りましょう)だが、そのままにしておきつつ...

上図のように Sample Dashboard をクリックする。
試したところでは、Elasticsearch 側にログが登録されていない状態だと上記のようなエラーが表示されるものの、適当にログを登録すると解消される。
以下のように telnet コマンドでメールを送信してみる。
root@debian:/usr/share/nginx/www# telnet localhost 25 Trying ::1... Connected to localhost. Escape character is '^]'. 220 debian ESMTP Postfix (Debian/GNU) HELO wheezy-test01.inokara.com 250 debian MAIL From:inokara@wheezy-test01.inokara.com 250 2.1.0 Ok RCPT To:inokara@hogehoge.com 250 2.1.5 Ok data 354 End data with <CR><LF>.<CR><LF> test test . 250 2.0.0 Ok: queued as 7E02C443EA quit 221 2.0.0 Bye Connection closed by foreign host
そして Kibana3 をリロードしてみると...

ログが記録され、検索等が利用可能な状態になっている。
気付いた点とか
Elasticsearch のインデックスは作らなくていいのか?
Elasticsearch のインデックスは作らなくても一応は動いたけど、インデックスが無いと運用上困ることはないのかなと思って調べたら自動で logstash-yyyy.mm.dd という名前で生成されていた。

試しに上記の _index や _type の情報を利用してコマンドラインから Elasticsearch にクエリを投げてみると...
curl -XGET 'http://localhost:9200/logstash-2013.10.02/postfix/orKreTiiRlOOzJ5oPP3ByQ' | python -mjson.tool
以下のように結果を取得することが出来た。
{ "_id": "orKreTiiRlOOzJ5oPP3ByQ", "_index": "logstash-2013.10.02", "_source": { "@log_name": "wheezy-test.maillog.log", "@timestamp": "2013-10-03T06:46:36+09:00", "date": "Oct 3", "host": "06:46:36", "key": "7E02C443EA", "message": "7E02C443EA: removed", "process": "debian postfix/qmgr[13706]" }, "_type": "postfix", "_version": 1, "exists": true }
だからと言って、インデックスがどのように作成されるのかは、はたまた、これが標準の仕様なのかについては改めて確認。
あらかじめコマンドラインでインデックスを作るというのもやり方として考えれる。
curl -XPUT 'http://localhost:9200/maillog/postfix/1' -d '{
"name" : "kappa",
"date" : "2013-10-03",
"message" : "nemui"
}'
上記のように任意のインデックス(maillog)とタイプ(postfix)でレコードを登録することでインデックスを作ることは出来る。
format がおかしい
Kibana3 でログを見た場合 host に下図のように 時刻 が入ってしまっている。

td-agent 側の format か Elasticsearch に放り込む際のフォーマットなのか...。