はじめに
- こちらで試した後、しばらく時間が空いてしまったので改めて試す
- 今回は
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
に放り込む際のフォーマットなのか...。