概要
OpenSearch 上のインデックスを一定期間経過したら自動で削除する手順についてまとめています。
背景
アプリケーションから出力されたログを OpenSearch に転送してログの検索を行えるようにしているのですが、ある日ストレージの空き容量が不足してログが転送できない状態になりました。
ドキュメントを削除して一時的に解消できたのですが、しばらくして再発したので結局ストレージ容量を拡張しました。今は再発していないですがいずれまたストレージが不足して再発する可能性があるので、一定期間経過したらログを OpenSearch 上から削除する仕組みを作ることにしました。
調べたところ ISM (Index State Management) という機能を使えば実現可能であると分かったものの、単一インデックスでログを管理していたためそのままでは使用できませんでした。
そこでインデックスを日付ベースで作成するように修正して ISM ポリシーを適用したところ実現できたので、今回はその手順を書き留めたいと思います。
環境
OpenSearch 2.19(OpenSearchアプリケーション)
手順
今回は test-index
という名前でインデックスを作成する場合を例に挙げて説明を進めます。
インデックスを日付ベースで作成する
Fluent Bit の設定ファイルの修正
日付ベースでインデックスが作成されるようにするため、OpenSearch へのログ転送の設定を記述している Fluent Bit の設定ファイル(.conf)のうちインデックス名の設定部分を以下のように修正します:
Index test-index // 好きなインデックス名
Logstash_Format On
Logstash_Prefix test-index
Logstash_Dateformat %Y.%m.%d
なお、設定ファイルを修正して terraform apply
しても ECS タスクが更新されない場合があります。その場合設定ファイルの変更が反映されないため、AWS コンソール上で ECS タスクを実行しているサービスを更新してください。
インデックスパターンの修正
上記の変更が反映されると test-index-2025.08.05
のような名前でインデックスが作成されるようになるので、OpenSearch にて以下のようにインデックスパターンを作成してください:
test-index*
これにより Discover 上で全てのインデックスのドキュメントを確認できるようになります。
ISM ポリシーの作成と適用
ISM ポリシー作成
ここでは90日経過したらインデックスを自動で削除するポリシーを例に挙げたいと思います。
OpenSearch の Developer tools 上で以下のクエリを実行して ISM ポリシーを作成してください:
PUT _plugins/_ism/policies/delete_after_90_days
{
"policy": {
"description": "90日経過したインデックスを削除するポリシー",
"default_state": "hot",
"states": [
{
"name": "hot",
"actions": [],
"transitions": [
{
"state_name": "delete",
"conditions": {
"min_index_age": "90d"
}
}
]
},
{
"name": "delete",
"actions": [
{
"delete": {}
}
],
"transitions": []
}
]
}
}
Developer tools はページ下部のメニュー内にあります。
ISM ポリシー適用
以下のクエリを実行し、新たに作成されるインデックスに対して ISM ポリシーを適用します:
PUT _index_template/<好きなテンプレート名(例:test_index_template)>
{
"index_patterns": [
"test-index*"
],
"template": {
"settings": {
"plugins.index_state_management.policy_id": "delete_after_90_days"
}
}
}
上記クエリを実行すると新規のインデックスに対して ISM ポリシーが適用されるようになりますが、既存のインデックスには適用されません。そのため以下のクエリを実行して既存のインデックスに対しても ISM ポリシーを適用させます:
POST _plugins/_ism/add/test-index*
{
"policy_id": "delete_after_90_days"
}
ISM ポリシーがインデックスに適用されているかどうかは以下のクエリで確認できます:
GET _plugins/_ism/explain/test-index*
作成した ISM ポリシーの内容は以下のクエリで確認できます:
GET _plugins/_ism/policies
これで90日経過したインデックスが自動で削除されるようになります。
参考