ようへいの日々精進XP

よかろうもん

fluentd と Elasticsearch と kibana の引き続きメモ

はじめに

  • こちらで試した後、しばらく時間が空いてしまったので改めて試す
  • 今回は postfix のログで試してみる
  • 厳密に言うと fluentd ではなくて td-agent で検証を行なっている

参考


環境

前回の経験を踏まえて OS のバージョンをアップさせた。又、Kibana3こちらからではなくて kibana-latest.zip から取得したきたことが相違点。

  • Debian 7.1(Wheezy)
  • td-agent
  • Elasticsearch
  • Kibana3
  • postfixapt-get install postfix
  • nginxapt-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 を適切に付けることで複数のホストからログを収集した場合にもホスト単位でのログを確認することが出来る。Elasticsearchlocalhost で動かしているので host 127.0.0.1port 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 してきたものを利用しようとすると以下のような表示となってしまう。

f:id:inokara:20131003063432p:plain

ということで表示に従ってこちらをダウンロードして利用する。

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 のインデックスを作らないといけないとのこと(初期データが入っていないので作りましょう)だが、そのままにしておきつつ...

f:id:inokara:20131003064035p:plain

上図のように 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 をリロードしてみると...

f:id:inokara:20131003065338p:plain

ログが記録され、検索等が利用可能な状態になっている。


気付いた点とか

Elasticsearch のインデックスは作らなくていいのか?

Elasticsearch のインデックスは作らなくても一応は動いたけど、インデックスが無いと運用上困ることはないのかなと思って調べたら自動で logstash-yyyy.mm.dd という名前で生成されていた。

f:id:inokara:20131003072756p:plain

試しに上記の _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 に下図のように 時刻 が入ってしまっている。

f:id:inokara:20131003065748p:plain

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