LoginSignup
22
21

More than 5 years have passed since last update.

Elasticsearchが重くなった時は、bloom filterを無効化すると良い

Last updated at Posted at 2015-03-03
※少しストックされているので更新
1.3.5以降のバージョンでは、bloom filterはデフォルト無効化されているのでこの内容は、それ以前のバージョンでElasticsearchを運用されている方向けです。

Elasticsearchをログ格納用に運用していて、突然動作が重くなりレスポンスが返ってこなくなった時の対応メモ。
もちろん、これだけでは改善しない事もあるので、インデックスのdeleteやcloseも必要だけど、自分の運用している環境ではかなり効果があった。

どうやら、デフォルトでbloom filterというリソースがインデックス単位で割り当てられているようで、fluentdから日単位でインデックス作ったりするとインデックスの数だけこのbloom filterが有効になっているのでメモリを逼迫しているらしい。

【解説は下記】
http://www.elasticsearch.org/guide/en/elasticsearch/reference/0.90/index-modules-codec.html

ということで、elasticsearch-curatorを使い、このbloom filterも無効化しておくメモ。

手順

elasticsearch-curatorについては、下記に書いたので参考までに。
http://qiita.com/nagais/items/5580f77a8af6dd5e1856

テストを月単位のインデックスで実施したが、下記のオプションで単位は変えられる。

#1ヶ月前までのbloom filterを保持し、他は無効化する
$ curator bloom --prefix syslog- --older-than 1 --time-unit months

elasticsearch_headで確認すると、
下記のようにbloomがfalseになっている事で確認出来る。

スクリーンショット 2015-03-02 11.37.14.png

オプション

オプション名 意味
--timestring Pythonのstrftime形式でフォーマットを指定する
サンプル --timestring %Y.w%W
--prefix インデックスのプレフィックスを指定
サンプル --prefix aaa-
--time-unit タイムスパンを下記のいずれかで指定
[hours,days,weeks,months]
--older-than 対象とする数を指定する
1と指定するとデフォルトはdaysなので1日分は保持し、2日以前のものを対象とする
time-unitと組み合わせで判断される
--exclude-pattern 特定のインデックスを処理対象から外したい場合に指定

おまけ

fluentdで週単位のインデックスを運用していて少しはまったのでメモ

下記のような感じでfluentd経由でインデックスを作っていると、[time-unit weeks]では処理対象にならずに、[--timestring]を使って整形してあげないとインデックスを削除出来ない。。

週単位インデックス名:aaa-2015.w01
td-agent.conf
logstash_dateformat %Y.w%V

curatorで削除する場合は、下記のように[--timestring %Y.w%W]で形式を指定すると対象になる。

$ curator bloom --prefix aaa- --older-than 1 --time-unit weeks --timestring %Y.w%W

正確には測ってないけど、過去分のbloom filter無効化したらだいぶメモリが空いた。
これも、cronのタスクに組み込み夜間実行する。

22
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
21