最近 Amazon Elasticsearch Service の記事をよく書いてる気がするw
開発用のログ基盤ではあるけど,実際に導入は完了していて,既に運用している.今回はインデックスを Curator でハウスキーピングできるようにした話を書いておく.基本的には Elasticsearch と同じなんだけど,一部 Amazon Elasticsearch Service 特有の課題があった.
Curator Version
まず Curator にはメジャーバージョンが2個あって,Curator 3 と Curator 4 で大きく実装も変わっている.Elasticsearch と Curator の対応表は GitHub に載っていて,以下の通り.
Version | ES 1.x | ES 2.x | ES 5.x |
---|---|---|---|
3 | yes | yes | no |
4 | no | yes | yes |
Amazon Elasticsearch Service でサポートされている Elasticsearch のバージョンは 1.5 と 2.3 だから,Curator 3 なら両方のバージョンに対応していて,Elasticsearch 2.3 なら Curator 4 も使えそうに見えるが,実は違う.Curator 4 では /_cluster/state/metadata
から情報を収集しているが,Amazon Elasticsearch Service はこの /_cluster/state/metadata
に対するリクエストを許可していない.
よって,現時点では Amazon Elasticsearch Service を使う場合は Curator 3 一択となる.
$ curl xxx.ap-northeast-1.es.amazonaws.com/_cluster/state/metadata {"Message":"Your request: '/_cluster/state/metadata' is not allowed."}%
実際に「Curator 4 じゃ動かないよ!」的な Issue が多く出ているけど,基本的には Amazon Elasticsearch Service の仕様だから Curator として正式にサポートしない方針のように理解した.
pip で Curator 3 に固定する
現在の最新は 3.5.1!
$ pip install elasticsearch-curator==3.5.1
ポートを指定する
Curator はデフォルトだと 9200 ポートに接続する.Amazon Elasticsearch Service の場合は 80 ポートなので --port 80
と忘れずに指定する.
/usr/bin/curator --host xxx.ap-northeast-1.es.amazonaws.com --port 80 delete indices --prefix yyy --older-than 90 --time-unit days --timestring %Y.%m.%d
スケジューリング
コマンドをラップしたシェルを用意して Jenkins から日次で実行している.Amazon Elasticsearch Service は日次でスナップショットを取るため,余裕を持ってその後にスケジューリングしている.
関連記事
close
や bloom
など運用 Tips を参考にさせてもらった.