2013年12月17日火曜日

fluentd+elasticsearch+kibana3をやってみた

■環境
CentOS 5.9

elasticsearch 0.90.5
kibana3
fluentd 0.10.39
のインストールは事前済ませておいてください
今回は/var/log/messagesを解析してみたいと思います

■/etc/fluent/fluent.confの設定
1. ログ送信側(クライアント側)設定
vim /etc/fluent/fluent_elasticsearch_client.conf
<source>
  type tail
  format syslog
  path /var/log/messages
  tag log.messages
</source>

<match log.messages>
  type forward
  flush_interval 5s
  <server>
    name server_host_name
    host server_host_name
    port 24224
    weight 60
  </server>
</match>

2. ログ受信側(サーバ側)設定
vim /etc/fluent/fluent.conf
<source>
  type forward
  port 24224
</source>

<match log.messages>
  index_name messages
  logstash_format true
  type elasticsearch
  host server_host_name
  port 9200
  include_tag_key true
  tag_key _key
  flush_interval 10s
</match>
include_tag_key を true にするとelasticsearchにログを突っ込む際にmatchに合致したタグ情報を自動で付与してくれます

■fluent-plugin-elasticsearchのインストール
fluent-gem install fluent-plugin-elasticsearch

■各種デーモンの起動
1. elasticsearch起動
elasticsearch -f
2. kibana3起動(apache起動)
service httpd start
3. サーバ側fluentd起動
fluentd
4. クライアント側fluentd起動
fluentd --conf /etc/fluent/fluent_elasticsearch_client.conf

各種起動が完了しエラーが表示されていないければkibana3を開きデータが入っていることを確認します
kibana3 サンプル画像


■Tips
syslogをelasticsearchに送る場合は素直に「format syslog」を使って下さい
format /^(?<timestamp>\w{3} \d{2} \d{2}:\d{2}:\d{2}) (?<host>[^ ]*) (?<body>.*)$/
こんな感じで自分でパースしてelasticsearchに渡すとうまくtimestampをパースしてくれません
以下にあるようにmappingを手動で設定してもダメでした
なので「format syslog」を使うのが定石になるのですが、ポイントとしてはサーバ側のfluent.confに「logstash_format true」を必ず入れて下さい
これを入れることでdynamic mappingもちゃんと働くので自分でmappingを登録する必要がなくなります

●elasticsearchにindexの登録とmappingの設定(今回は実施しなくて大丈夫です)
1. indexの登録
curl -X POST 'http://server_host_name:9200/messages'
サーバ側のfluent.confに記載してあるindex_nameと同じindexを作成してください

2. mapping登録
curl -X PUT http://server_host_name:9200/messages/fluentd/_mapping -d '{
  "app_log" : {
    "properties" : {
      "host" : {"type" : "string"},
      "body" : {"type" : "string"},
      "timestamp": {"format" : "MMM dd HH:mm:ss","type" : "date", "locale" : "ja_JP"}
    }
  }
}'

0 件のコメント:

コメントを投稿