Elasticsearch 筆記 2 – 更新 ILM Policy 與 Elastic Cloud ILM apm-rollover-30-days 的 Delete Phase 似乎沒有真正刪除 Index 之討論
目標
其實原本的目標很簡單,就是單純希望 Elasticsearch 上的 Index 可以做 rotation,然後定期刪除過舊的 Index
之前在 Elastic Cloud 上使用現成的 APM 的 ILM Policy 操作介面,如下圖,找 Kibana 的 Stack Management 即可。
更詳細相關的知識與操作畫面可以參考 喬叔教 Elastic – 11 – 管理 Index 的 Best Practices (3/7) – Index Lifecycle Management (ILM)
當一組 APM Deployment 開好後,會有一些預設的 Life Cycle 策略,其中有個 apm-rollover-30-days 的策略預設已經跟 APM 相關的 Index 綁定好了,看起來照著上面那篇文章類似的步驟,把一些設定打開,特別是 Delete Phase 的部分開啟後,『感覺』上應該條件到了就會『刪除』 Index 了。
遇到問題,似乎 Index 沒有真的自動刪除
在 Elastic Cloud 操作介面上設定完成,並開啟 Delete Phase 的部分,但久了之後,發現輪替的 Index 都堆積在 Delete Phase, Phase 是 delete 沒錯,但並未刪除,仍然佔用磁碟。
查了一下,依目前的理解: 可能預設的這組 Policy 其中的 Delete Phase ,其 Action 為空,因此雖然整個 ILM 順利的完成 Delete Phase ,但正因為 Action 是空的,所以感覺好像沒有動作。
- 可以參考這篇 ILM not deleting indicies
而後續的 Index 仍持續地輪替、持續地進入 Delete Phase,就這樣,所有舊的 index 就會一直堆積在 Delete Phase 。
解決方法
現在 Elastic Cloud 有沒有調整我不確定,之前的話,就是自己去打 Elasticsearch API ,自己設定 Delete Phase 的 Action。
此外,由於新的 Policy 會覆蓋舊的,所以應該要先查詢原本的 Policy 後,依需求調整(例如把 Delete Phase 的 action 加內容,其餘原封不動),調整完再 UPDATE 回去。
查詢目前 Policy
可以先查 GET /_ilm/policy/apm-rollover-30-days,範例如下:
GET /_ilm/policy/apm-rollover-30-days { "apm-rollover-30-days": { "policy": { "phases": { "hot": { "actions": { "rollover": { "max_age": "2d", "max_size": "3gb" }, "set_priority": { "priority": 100 } }, "min_age": "0ms" }, "delete": { "actions": {}, "min_age": "1d" } } }, "modified_date": "2020-01-01T00:00:00.000Z", "version": 123 } }
更新 Policy
把 “apm-rollover-30-days” 的 value 拉出來,修改 delete 下的 actions ,然後用 PUT 更新回去,如下範例:
PUT /_ilm/policy/apm-rollover-30-days { "policy": { "phases": { "hot": { "actions": { "rollover": { "max_age": "2d", "max_size": "3gb" }, "set_priority": { "priority": 100 } }, "min_age": "0ms" }, "delete": { "actions": { "delete": { "delete_searchable_snapshot": true } }, "min_age": "1d" } } } }
其他
如果你不是使用 Elastic Cloud,也許你是自架 Elasticsearch 的話,那麼你可能沒有現成 ILM ,你可能需要參考以下資料來自行新增/維護你的 ILM Policy 。
1. (2/7) – 三溫暖架構 – Hot Warm Cold Architecture
2. (3/7) – Index Lifecycle Management (ILM)
- 這兩篇是 ILM 相關知識,用來了解 ILM 並擬定你自己需要的規則
3. Create or update lifecycle policy API
- 這個是手冊與文件,用來參考具體的新增/更新 ILM API 怎麼 call
Leave a Reply