-Elasticsearchを独立させた。Solrと同じくLuceneベース

*構成 [#k746709d]

|INDEX|RDBのDatabaseに相当。この単位でSHADE数が決まるので、更新頻度が違うものはINDEXを分ける|
|シャード|インデックスを何分割するか?作成時のみしか指定できず|
|DOCUMENT|RDBの1レコード|
|FIELD|列定義|
|CLUSTER|NODEの集合|
|NODE|ESの1プロセス|

-更新は苦手なのでINDEX単位で日付を付与して、古くなったものはINDEX毎すてていく

|RDB|Elasticsearch|
|Databases|Indices|
|Tables|Types|
|Rows|Documents|
|Fields|Columns|

*AWS Elasticserach Service [#i8eac1c7]

-基本的なプラグインはインストール済みだが、カスタムプラグインはインストールできない。
-バージョンが古い(2.1が出ている時期に1.5)

*Elastic Cloud(旧Found) [#xadb022d]

-バージョン選択可能
-基本プラグイン導入済み
-リージョンも選択可能
-高い!

*運用 [#r3ccb3b1]

**本番環境向け推奨マシンスペック [#m8867028]

実験用途で2GBのマシンに入れたが、結構な割合でOomKillerを発動させたり、落ちてたりする。

-メモリは64gbが理想だが、32−16GBでも大丈夫。8GB以下はインスタンスをたくさん用意しなければならぬ羽目に陥るので結局損。64GB以上でも問題があるので推奨範囲にとどめておくこと。
-CPUのスペックはマルチコアであれば特にハイスペックは要求しない。もしコアあたりの性能アップかコアを増やすかの選択に迫られた時はコアを増やす方向がベターである。
-ディスクはSSDベースにしておけばベター。NASはダメ!
-ネットワークはデータセンター内部にとどめておき、仮に早い専用線があったとしても地理的に離れた場所に配置しない。
-HEAPは初期設定では実運用には適さない。マシンの実メモリの半分程度を最大としつつ、32GBは超えないように設定する。


**設定 [#d6110a6b]

|JVM|1GB以上推奨。最小と最大を同じにしておく。|
|File Descriptors|65535|
|mmap|rpmであれば変更済みとなる|
|swap|disable swap(swapoff -a)|

**投入までの流れ [#f9fd33ac]

+INDEX作成(curl -XPUT "${ES_URL}/${INDEX_NAME}")
+検索で使う型を定義するmappingをJSONで指定(curl -XPUT "${ES_URL}/${INDEX_NAME}/_mapping/default" -d @${MAPPING_FILE})

**Mappingの定義 [#m674eb8a]

スキーマレスとはいえ、集計や検索などを考えると事前にMappingの定義は必須である。
単なる型以外にも、入れ子になっているもの(Nested Type)やRDBの親子関係に近いParent-Childなどのデータ構造のバリエーションがある。同じインデックスの同じフィールド名は同じ定義にしなければいけないので、一つのインデックスに複数のタイプが存在する場合でデータ型も違うなら、名前を分けるように(titleではなくblog_title,post_title)

|mapping定義の参照|curl -XGET http://localhost:9200/INDEX/TYPE/_mapping|

**クラスターの可視化 [#u022dd5d]

-elasticsearch-head

インストール後以下のURLで参照可能。

http://133.18.30.106:9200/_plugin/head/

*プラグインインストール [#l778eff3]

-インストール済みプラグイン確認
 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

**有償プラグイン [#qe169624]

-サブスクリプション加入が必要である。30日間無料でトライアル可能。

|Sheild|認証|
|Watcher|通知|


*アラート [#d37153b6]

無料ならelastalert(Yelp開発)。有料ならWatcher(サブスクリプション契約必要)

https://github.com/Yelp/elastalert



*情報 [#s19a4767]

パフォーマンスチューニングの注意点

http://qiita.com/rjkuro/items/e79eec7ffb0511b7c678


**td-agentとの連携 [#t82cc0fa]

-fluent-plugin-elasticsearchのインストール。1.0系だとfluent-gemのパスが違うので注意。

 /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-elasticsearch

*Elasticsearch 2.2 [#ta64c66a]

デフォルトはローカルからのみ接続可能なので、以下の変更を入れる。

-/etc/elasticsearch/elasticsearch.yml
 
 network.host: 0.0.0.0


*Kibana4.4 [#p135a5c4]

解凍して、host変えて、起動して5601ポートでアクセス。

*Beats [#xc90fcfb]

エージェント型だが、マシンの情報を定期的に送ってくれる上にダッシュボードのテンプレートも併せて提供されている。

*トラブルシューティング [#f554ab0e]

**fluentd + ElasticSearchServiceで時折「Cannot get new connection from pool」 [#a70427e7]

-以下のパラメータを入れることにより再接続をするようになる。
 reload_connections false

*運用履歴 [#j608360a]

**Kagoya 2G [#sfc328b3]

限界ぎりぎりまでメモリを使う。何もしてなくても自然に落ちるという・・

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.

**Azure A2 [#d115f779]

3.5Gあるので通常のサーバー用途と共存させてもなんとか耐えられる。
5/12 3:55AMを境にpacket&top beatsが勝手に停止していた。


*Kibana [#o03e36a7]

**検索 [#icd56f32]

|条件検索|フィールド名: 検索したい値|
|typeで絞る|_type: process|beatsの場合|

**Visualize [#u4f7e1de]

単一の値の平均値を出す。metrics

***時系列での特定の値の変化を出す。 [#rd2ce11c]

+Line Chartを選択
+X-axisにDate Histgramを選択して、@Timestampを選択
+Y-axisに任意のフィールドを出す。countはフィールド選べないので注意


#counter


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS