web-dev-qa-db-ja.com

Amazon elasticsearchで古いインデックスを削除する

ログにはAWS Elasticsearchを使用しています。ログは、Logstashを介して継続的にストリーミングされます。古いインデックスを定期的に削除する最良の方法は何ですか?

私が検索し、推奨されるさまざまなアプローチは次のとおりです。

  1. ラムダを使用して古いインデックスを削除する- https://medium.com/@egonbraun/periodically-cleaning-elasticsearch-indexes-using-aws-lambda-f8df0ebf4d9f

  2. スケジュールされたDockerコンテナーを使用- http://www.tothenew.com/blog/running-curator-in-docker-container-to-remove-old-elasticsearch-indexes/

これらのアプローチは、「15日以上経過したインデックスを削除する」などの基本的な要件にとってはやり過ぎのようです。

それを達成するための最良の方法は何ですか? AWSは調整可能な設定を提供していますか?

10

Elasticsearch 6.6は、Index Lifecycle Managerここを参照 と呼ばれる新しいテクノロジーをもたらします。各インデックスにはライフサイクルポリシーが割り当てられており、削除されるまでインデックスが特定のステージをどのように遷移するかを制御します。

たとえば、一連のATMからElasticsearchに指標データをインデックス化する場合、次のようなポリシーを定義できます。

  1. インデックスが50GBに達したら、新しいインデックスにロールオーバーします。
  2. 古いインデックスをウォームステージに移動し、読み取り専用のマークを付けて、単一のシャードに縮小します。
  3. 7日後、インデックスをコールドステージに移動し、より安価なハードウェアに移動します。
  4. 必要な30日間の保持期間に達したら、インデックスを削除します。

技術はまだベータ段階ですが、おそらくこれからの道のりです。

1
RodrigoM

キュレーターの実行はかなり軽くて簡単です。

ここには、Dockerfile、config、action-fileがあります。

https://github.com/zakkg3/curator

また、必要に応じて、キュレーターがお手伝いします(特に):

  • エイリアスのインデックス(または両方)を追加または削除します
  • シャードルーティング割り当ての変更
  • スナップショットを削除
  • 閉じたインデックスを開く
  • forceMergeインデックス
  • リモートクラスターからのインデックスを含む、インデックスの再インデックス
  • インデックスのシャードあたりのレプリカ数を変更する
  • ロールオーバーインデックス
  • インデックスのスナップショット(バックアップ)を取る
  • スナップショットを復元する

https://www.elastic.co/guide/en/elasticsearch/client/curator/current/index.html

以下は、15日以上経過したインデックスを削除するための典型的なアクションファイルです。

     actions:
      1:
        action: delete_indices
        description: >-
          Delete indices older than 15 days (based on index name), for logstash-
          prefixed indices. Ignore the error if the filter does not result in an
          actionable list of indices (ignore_empty_list) and exit cleanly.
        options:
          ignore_empty_list: True
          disable_action: True
        filters:
        - filtertype: pattern
          kind: prefix
          value: logstash-
        - filtertype: age
          source: name
          direction: older
          timestring: '%Y.%m.%d'
          unit: days
          unit_count: 15
1
NicoKowe