INDEX | RDBのDatabaseに相当。この単位でSHADE数が決まるので、更新頻度が違うものはINDEXを分ける |
シャード | インデックスを何分割するか?作成時のみしか指定できず |
TYPE | INDEXに格納されるドキュメントの型。テーブルみたいなもの |
DOCUMENT | RDBの1レコード |
FIELD | 列定義 |
CLUSTER | NODEの集合 |
NODE | ESの1プロセス。最小構成単位である |
シャードの数はノードの数に合わせておくと良いらしい。ノードが少ないのにシャードを増やしても早くならない。
RDB | Elasticsearch |
Databases | Indices |
Tables | Types |
Rows | Documents |
Fields | Columns |
シャードはノード数と同じにしておくと良いのだが、将来的にノードを増やすことで負荷分散することを考えているのであればノード数以上にシャードを設定しておくのもあり。
https://qbox.io/blog/optimizing-elasticsearch-how-many-shards-per-index
一つのINDEXでシャードの数が決まるので、スケールさせる前提であればINDEXを分ける。また親子関係がある場合は一つのINDEXにする必要がある。INDEX名を適当に決めるとINDEX TEMPLATEが適用できなくなってしまうので、きちんと命名規約を決めておくこと!
VPCFlowLogやCloudTrailをElasticSearchServiceに流しているが、これは裏でLambdaを自動で作成してくれているだけである。そのLambdaをカスタマイズすれば任意の場所へ送信可能。
dstat投入
http://qiita.com/yumatz/items/debbc6d6063c85531fd1
実験用途で2GBのマシンに入れたが、結構な割合でOomKillerを発動させたり、落ちてたりする。
JVM | 1GB以上推奨。最小と最大を同じにしておく。 |
File Descriptors | 65535 |
mmap | rpmであれば変更済みとなる |
swap | disable swap(swapoff -a) |
スキーマレスとはいえ、集計や検索などを考えると事前にMappingの定義は必須である。 単なる型以外にも、入れ子になっているもの(Nested Type)やRDBの親子関係に近いParent-Childなどのデータ構造のバリエーションがある。同じインデックスの同じフィールド名は同じ定義にしなければいけないので、一つのインデックスに複数のタイプが存在する場合でデータ型も違うなら、名前を分けるように(titleではなくblog_title,post_title)
mapping定義の参照 | curl -XGET http://localhost:9200/INDEX/TYPE/_mapping |
インストール後以下のURLで参照可能。
http://133.18.30.106:9200/_plugin/head/
curl -XGET 'http://localhost:9200/_nodes?plugin=true&pretty'
yumの場合はコマンドは以下の場所にある
/usr/share/elasticsearch/bin
plugin install プラグイン名 # kuromojiインストール /usr/share/elasticsearch/bin/plugin install analysis-kuromoji # watcherのためのライセンスプラグイン /usr/share/elasticsearch/bin/plugin install elasticsearch/license/latest # watcher /usr/share/elasticsearch/bin/plugin install elasticsearch/watcher/latest # bigdisk /usr/share/elasticsearch/bin/plugin install lukas-vlcek/bigdesk
Sheild | 認証 | |
Watcher | 通知 | 有料なのに設定画面がないのが痛い |
Beats | ||
Kuromoji | ||
Ec2 Discovery | ||
Kibana | ||
Sense | ||
PacketBeat | ||
TopBeat |
Sinificant Term Aggrigation
Graphの利点
関連性を見て分析 。
404のエラーからさらにドリルダウンして、各ブラウザを表示させることができる。
トライアルは30日 データが入っていればすぐ利用可能。
無料ならelastalert(Yelp開発)。有料ならWatcher(サブスクリプション契約必要)
https://github.com/Yelp/elastalert
パフォーマンスチューニングの注意点
http://qiita.com/rjkuro/items/e79eec7ffb0511b7c678
/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-elasticsearch
デフォルトはローカルからのみ接続可能なので、以下の変更を入れる。
network.host: 0.0.0.0
解凍して、host変えて、起動して5601ポートでアクセス。
エージェント型だが、マシンの情報を定期的に送ってくれる上にダッシュボードのテンプレートも併せて提供されている。
reload_connections false
限界ぎりぎりまでメモリを使う。何もしてなくても自然に落ちるという・・
Apr 27 02:19:53 v9215 elasticsearch: # There is insufficient memory for the Java Runtime Environment to continue. Apr 28 09:11:22 v9215 elasticsearch: # There is insufficient memory for the Java Runtime Environment to continue. Apr 28 13:01:44 v9215 elasticsearch: # There is insufficient memory for the Java Runtime Environment to continue.
3.5Gあるので通常のサーバー用途と共存させてもなんとか耐えられる。 5/12 3:55AMを境にpacket&top beatsが勝手に停止していた。
5/24 4:05AMを境にElasticSearchが落ちていた。その近辺でoom-killerが発動していた。
そしてkibana has broken completely! plugin:elasticsearch Elasticsearch is still initializing the kibana index.
全部のインデックスを消去して、わけわからんけど復旧。
視覚化ツールの標準。認証機能が単体ではまだ実装されておらず、SearchGuardなどのプラグイン頼み
kibana単体にもプラグインインストール可能。RPMインストールの場合は以下の場所からインストール可能。下記例はtimelionをインストールする。
/opt/kibana/bin/kibana plugin -i kibana/timelion
条件検索 | フィールド名: 検索したい値 |
typeで絞る | _type: process | beatsの場合 |
単一の値の平均値を出す。metrics
kibanaとは別アプローチで流れるSQLのように関数でグラフを作成できるツール。まだ出たばっかりだが、プログラマー的にはこちらの方が再利用しやすいのではないかな?
無料のアラート検知&通知ツール。コマンドラインで実行する。
http://ameblo.jp/fcv-system/entry-11950051736.html
https://medium.com/hello-elasticsearch/elasticsearch-api-83760ce1424b#.igvw3frk5
_type: road_times AND road_id: 1 _type: marcket_records AND marcket_id: 1