fluentdからElasticSearch+kibana3に文字列を転送すると、最初に必ず分かち書きの問題で困ることになると思います。
ここでは分かち書きの回避について書いてみます。
分かち書きで困った例
fluentdを使ってApacheのアクセスログをElasticSearch+kibana3に転送し、どのページに何回アクセスがあったかを一覧するダッシュボードを作ってみたとします。
「アクセスされたパス一覧とアクセス数テーブル」というテーブルにはApacheのLogFormatの「リクエストされたURLアドレス(%U)」要素を入れて、アクセスされたパスごとのアクセス数が集計できるようにしています。グラフはそれをグラフ化したものです。
ちょうど以下の様なwordpressのサイトがあったとして、
上記のURLに1回アクセスされた結果が、
のようになることをイメージしています。
しかし、実際にやってみると、
のように、アクセスされたパスが、スラッシュやハイフンなどで区切られた細切れの文字列になってしまうと思います。
これは、パス文字列が分かち書きされてしまっていることが原因です。
分かち書きの回避方法
ElasticSearchは全文検索エンジンなので、文字列がデフォルトで分かち書きされるようになっているようです。今回は全文検索がしたいわけではないので、分かち書きを無効にします。
curl -XPUT localhost:9200/_template/template_1 -d '
{
"template" : "*",
"mappings" : {
"_default_" : {
"properties" : {
"path" : { "type":"string", "index":"not_analyzed" }
}
}
}
}
'
これで分かち書きが無効になります。
なお、反映されるのは翌日にインデックスされた分からなので、翌日まで待つ必要があります。待つのが面倒で、当日のインデックスが消えてしまっても良い場合は、
/var/lib/elasticsearch/elasticsearch/nodes/0/indices
にある、日付っぽい名前がついたディレクトリを消してしまえばすぐに反映されます。
参考URL
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-templates.html
http://a3no.hatenablog.com/entry/2013/09/11/232223