はじめに
- fluentd から elasticsearch にログを送る際に
logstash形式で送るのがお手軽 - デフォルトでは
logstash-YYYY.MM.DDという名前のインデックスが一つしか作られない - でも、この形式で複数のインデックスを保存したい場合どうするの?
- 複数のインデックスは不要だけど elasticsearch の type を分けることで kibana からそれぞれにアクセスすることも可能
こうする
logstash_prefix を使う
fluent-plugin-elasticsearch の logstash_prefix を使う。
<source>
type tail
path /var/log/nginx/access.log
pos_file /tmp/nginx.pos
tag nginx.access
format nginx
</source>
<match nginx.access.**>
type copy
<store>
type elasticsearch
include_tag_key true
tag_key @log_name
host 127.0.0.1
port 9200
logstash_format true
logstash_prefix nginx01
flush_interval 10s
</store>
<store>
type elasticsearch
include_tag_key true
tag_key @log_name
host 127.0.0.1
port 9200
logstash_format true
logstash_prefix nginx02
flush_interval 10s
</store>
</match>
そうすると...

上記のように任意の名前で且つ logstash 形式でのインデックスが作成された。
スキーマを確認する。
curl -XGET "http://localhost:9200/nginx01-2013.11.30/_mapping?pretty"
以下のように出力される。
そもそも logstash 形式の明確な定義ってなんだろって思って良い資料が無いか調査中。とりあえず、現時点では...
- [index_name-]YYYY.MM.DD のインデックス名
@timestampが含まれている
ということだろうか...
kibana からも
以下のようにダッシュボード毎にインデックスを指定する。

[nginx01-]YYYY.MM.DD で指定したインデックス。

[nginx02-]YYYY.MM.DD で指定したインデックス。

最後に
今回は同じログを2つのインデックスに放り込んだが、実際の使い方としては複数のログを同じ fluentd で集約しておいてそこからそれぞれのインデックスに分けて保存するという使い方をするほうが実用的かも。