はじめに
- 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
で集約しておいてそこからそれぞれのインデックスに分けて保存するという使い方をするほうが実用的かも。