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 是空的,所以感覺好像沒有動作。

而後續的 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

You Might Also Like

Leave a Reply

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料