當您的Kibana叢集因異常狀況被重設後,.kibana_{num}({num}為變數,例如.kibana_1、.kibana_2等)索引也會被重設,因此您需要恢複對應索引來恢複相關資料。本文以.kibana_1索引為例,介紹如何通過快照和reindex方式快速恢複.kibana_{num}索引。
背景資訊
.kibana_{num}索引用來儲存Kibana大盤、Kibana Index Patterns等Kibana配置資訊,而Kibana預設通過別名.kibana讀取資料,當系統中存在多個.kibana_{num}索引時,實際上只有一個會使用.kibana別名。
在複雜的業務情境下,例如,.kibana_1索引結構發生損壞或Kibana訪問異常,需要刪除.kibana_1索引重設Kibana叢集,或因定時任務配置異常導致.kibana_1索引被刪除,叢集重啟後Kibana相關資料被重設,.kibana_task_manager_1會自動產生一個綁定.kibana別名的.kibana_1索引,之前在Kibana上配置的Kibana Index Patterns、Dashboards和使用者角色等資訊均會被重設。
- 通過快照的方式直接恢複。
- 將快照資料恢複到備份索引,通過reindex方式將備份索引資料寫入到.kibana_1中。
- 手動重建Kibana Index Patterns或使用者角色。
前提條件
- 叢集已開啟自動快照備份或在快照中手動備份過系統索引,且快照中儲存的.kibana_1索引結構正常。
- 確保叢集中存在.kibana別名,並應用到.kibana_1索引。如果不存在.kibana_1索引,建議重啟Kibana服務,初始化產生.kibana_1索引。
操作步驟
通過快照方式恢複
- 登入目標Elasticsearch執行個體的Kibana控制台,根據頁面提示進入Kibana首頁。登入Kibana控制台的具體操作,請參見登入Kibana控制台。說明 本文以Elasticsearch 7.10.0版本為例,其他版本操作可能略有差別,請以實際介面為準。
- 單擊右上方的Dev tools。
- 在Console頁簽中,執行以下命令,擷取倉庫中的快照資訊。
GET _cat/snapshots/aliyun_auto_snapshot?v
aliyun_auto_snapshot:快照儲存的倉庫名稱。如果您是通過Elasticsearch的自動快照備份功能定期對叢集資料進行快照備份的,則快照儲存的倉庫名稱為固定的aliyun_auto_snapshot。如果您使用的是手動備份,需要將aliyun_auto_snapshot替換為您的業務倉庫名稱。
執行成功後,系統會返回倉庫中所有快照的詳細資料,例如快照id、status等。說明 請記錄Kibana異常前最新快照的id,以備後用。 - 快照恢複前,擷取備份的快照資訊,查看叢集中是否存在.kibana_1相關的索引。
GET _snapshot/aliyun_auto_snapshot/<yourSnapshotId>
<yourSnapshotId>:Kibana異常前最新快照的id,填寫在步驟3中擷取的id。例如es-cn-m7r23wodb006n****_20220303020235。
執行成功後,預期結果如下。只有返回結果中存在.kibana_1相關的索引,您才可以繼續執行下文步驟恢複快照。 - 將.kibana_1索引的狀態設定為close。重要 如果將.kibana_1索引的狀態設定為close之後,重啟Kibana導致無法登入,需要通過curl命令恢複.kibana_1索引,具體操作請參見常見問題。
POST /.kibana_1/_close
執行成功後,預期結果如下。{ "acknowledged" : true, "shards_acknowledged" : true, "indices" : { ".kibana_1" : { "closed" : true } } }
- 執行快照恢複命令,恢複.kibana_1索引。
POST _snapshot/aliyun_auto_snapshot/<yourSnapshotId>/_restore { "indices": ".kibana_1", "rename_pattern": ".kibana_1", "rename_replacement": ".kibana_1" }
參數 說明 <yourSnapshotId> 自動備份的快照id,填寫在步驟3中擷取的id。 indices 需要恢複的索引名稱。 rename_pattern 可選,正則匹配需要恢複的索引名稱。 rename_replacement 可選,為匹配上的索引按規則重新命名。 執行成功後,預期返回"accepted" : true
。重要 如果您使用的是非7.10版本的執行個體,在執行快照恢複命令恢複.kibana_1索引時,遇到類似index_closed_exception index=".kibana_1"
的報錯,可參見常見問題進行處理。 - 查看快照恢複結果。執行以下步驟,查看Kibana相關的Index Patterns是否恢複。如果恢複,說明快照恢複成功。
- 在Kibana控制台的左上方,單擊。
- 在展開的左側導覽列中,選擇 。
- 在Kibana地區,單擊Index Patterns。
- 在Index patterns頁面,單擊以kibana_開頭的索引模式,查看資料是否已恢複。
通過reindex方式恢複
- 在快照恢複前,擷取備份的快照資訊,並查看叢集中是否存在.kibana_1相關的索引。
- 執行快照恢複命令,將快照中的.kibana_1索引恢複到備份索引中(本文樣本為kibana123)。
POST _snapshot/aliyun_auto_snapshot/<yourSnapshotId>/_restore { "indices": ".kibana_1", "rename_pattern": ".kibana_1", "rename_replacement": "kibana123" }
參數 說明 <yourSnapshotId> 自動備份的快照id,填寫在步驟1中擷取的id。 indices 需要恢複的索引名稱。 rename_pattern 可選,正則匹配需要恢複的索引名稱。 rename_replacement 備份索引名稱。 執行成功後,預期返回
"accepted" : true
。 - 執行reindex命令,將備份索引資料寫入到當前.kibana_1索引中。
POST _reindex { "source": { "index": "kibana123" }, "dest": { "index": ".kibana_1" } }
執行成功後,預期結果如下。{ "took" : 731, "timed_out" : false, "total" : 33, "updated" : 33, "created" : 0, "deleted" : 0, "batches" : 1, "version_conflicts" : 0, "noops" : 0, "retries" : { "bulk" : 0, "search" : 0 }, "throttled_millis" : 0, "requests_per_second" : -1.0, "throttled_until_millis" : 0, "failures" : [ ] }
- 刪除備份索引(本文樣本為kibana123)。
DELETE kibana123
執行成功後,預期返回
"accepted" : true
。 - 查看快照恢複結果。查看Kibana相關的Index Patterns是否恢複。如果恢複,說明快照恢複成功。具體操作,請參見《通過快照方式恢複》章節的步驟7。
常見問題
Q:通過快照恢複.kibana索引,報錯.kibana和.kibana_1別名衝突,如何處理?
A:刪除.kibana_1索引後,Elasticsearch無法通過別名讀寫資料,因此會自動建立.kibana索引。而快照中正常的.kibana_1索引會使用.kibana作為別名,所以在恢複的時候會報錯別名衝突,建議先刪除.kibana索引再進行恢複。
- Q:在非7.10版本的執行個體中,執行快照恢複命令恢複.kibana_1索引時,遇到如下index_closed_exception報錯,如何處理?A:出現以上報錯的原因是由於.kibana_1索引的狀態為close,導致在Kibana控制台中執行任何命令時都會報錯。建議您通過ECS串連Elasticsearch,並通過curl命令完成對應操作,詳細資料請參見通過curl命令訪問與管理Elasticsearch。例如,通過快照恢複.kibana_1索引的curl命令如下。
curl -u <user>:<password> -XPOST "http://<host>:<port>/_snapshot/aliyun_auto_snapshot/<yourSnapshotId>/_restore" -H 'Content-Type: application/json' -d'{"indices": ".kibana_1","rename_pattern": ".kibana_1","rename_replacement": ".kibana_1"}'