ホーム » 技術 » CuratorでElasticsearchをメンテする

CuratorでElasticsearchをメンテする

以前の記事で、トラフィックキャプチャ・ソフトウェアのMolochを紹介した。導入から1か月半が過ぎてまずまず問題なく動いていたのだが、あるパーティションが90%を超えたぞと警告が出たので調べてみたら、Elasticsearchのデータディレクトリが肥大化して溢れていた。よく考えてみたら何の手立ても打っていないので、データが溜まれば溢れるに決まっている。そこでどうやって古いデータを消せばいいのか、慌てて調べた。その結果あんまりきれいにまとまったページがないようなので、個人的なメモを兼ねてブログ化しておく。

946

メンテナンスツールCurator

Elasticsearchが溜め込んだデータのメンテナンスには、Curatorというツールが役に立つ。

CentOSでは、パッケージはPythonのPIPになっているので、適切な手段でPIPをインストールしておき、こんな感じでcuratorをインストールする。

pip install elasticsearch-curator

次にconfigファイルを書く。デフォルトは~/.curator/curator.ymlなので、素直にその名前で用意するのがよい。

mkdir ~/.curator
vi ~/.curator/curator.yml

本家サンプルに従って適当に書いておく。こんな感じ。

---
client:
  hosts:
    - 127.0.0.1
  port: 9200
  url_prefix:
  use_ssl: False
  certificate:
  client_cert:
  client_key:
  ssl_no_validate: False
  http_auth:
  timeout: 30
  master_only: False

logging:
  loglevel: INFO
  logfile:
  logformat: default
  blacklist: ['elasticsearch', 'urllib3']

もしElasticsearchにパスワード認証をかけている場合、http_auth:をこんな風にする。

  http_auth: "USER_NAME:PASSWORD_STRING"

その他、書き方についてはリファレンスマニュアルのこちらのページを参照してほしい。設定が成功していれば、次のコマンドで確認できる。

[root@xorn ~]# curator_cli show_indices
2020-06-26 11:36:03,910 INFO      Instantiating client object
2020-06-26 11:36:03,911 INFO      Testing client connectivity
2020-06-26 11:36:03,922 INFO      Successfully created Elasticsearch client object with provided settings
dstats_v4
fields_v3
files_v6
history_v1-20w18
history_v1-20w19
history_v1-20w20
history_v1-20w21
history_v1-20w22
history_v1-20w23
history_v1-20w25
hunts_v2
lookups_v1
queries_v3
sequence_v3
sessions2-200528
sessions2-200529
sessions2-200530
:
:
:

失敗した場合、何かがおかしいのでconfigファイルを見直す。

フィルタの書き方とデータの削除

Curatorにはいろいろな機能があるが、ここでは一定の期間を過ぎたデータを削除する手順を示すだけに留める。本家マニュアルではさまざまな利用例をサンプルで示してくれているので、自分の環境に合わせて書き直すだけで簡単に実行できる。

Molochの場合、上述のようにデータは「sessions2-200528」のような名前で格納されている。prefixとなる「sessions2-」に、シリアル番号が続ているような構造だ。残念ながらlogstashのようにファイル名と日付の構造ではない。そこでcreation_dateのサンプルを流用して、こんなaction fileを用意する。

---
actions:
  1:
    action: delete_indices
    description: "Delete indices"
    options:
      timeout_override: 30
      continue_if_exception: False
    filters:
    - filtertype: pattern
      kind: prefix
      value: sessions2-
    - filtertype: age
      source: creation_date
      direction: older
      unit: days
      unit_count: 30

末尾のunit_countを変更すれば、何日分を残すかを調節できる。ここでは作成日が30日より古いファイルを削除するように指定している。

これをコマンドラインから実行する。

curator delete.yml

データ量にもよるが、割にさっくりと完了する。後は忘れないように、cronにいれておけばよいだろう。