全部產品
Search
文件中心

Elasticsearch:恢複.kibana_1索引

更新時間:Jun 30, 2024

當您的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和使用者角色等資訊均會被重設。

您可以通過以下方式恢複.kibana_1索引:
  • 通過快照的方式直接恢複。
  • 將快照資料恢複到備份索引,通過reindex方式將備份索引資料寫入到.kibana_1中。
  • 手動重建Kibana Index Patterns或使用者角色。

前提條件

  • 叢集已開啟自動快照備份或在快照中手動備份過系統索引,且快照中儲存的.kibana_1索引結構正常。
  • 確保叢集中存在.kibana別名,並應用到.kibana_1索引。如果不存在.kibana_1索引,建議重啟Kibana服務,初始化產生.kibana_1索引。

操作步驟

通過快照方式恢複

  1. 登入目標Elasticsearch執行個體的Kibana控制台,根據頁面提示進入Kibana首頁。
    登入Kibana控制台的具體操作,請參見登入Kibana控制台
    說明 本文以Elasticsearch 7.10.0版本為例,其他版本操作可能略有差別,請以實際介面為準。
  2. 單擊右上方的Dev tools
  3. Console頁簽中,執行以下命令,擷取倉庫中的快照資訊。
    GET _cat/snapshots/aliyun_auto_snapshot?v

    aliyun_auto_snapshot:快照儲存的倉庫名稱。如果您是通過Elasticsearch的自動快照備份功能定期對叢集資料進行快照備份的,則快照儲存的倉庫名稱為固定的aliyun_auto_snapshot。如果您使用的是手動備份,需要將aliyun_auto_snapshot替換為您的業務倉庫名稱。

    執行成功後,系統會返回倉庫中所有快照的詳細資料,例如快照idstatus等。
    說明 請記錄Kibana異常前最新快照的id,以備後用。
    查看倉庫中的快照資訊
  4. 快照恢複前,擷取備份的快照資訊,查看叢集中是否存在.kibana_1相關的索引。
    GET _snapshot/aliyun_auto_snapshot/<yourSnapshotId>

    <yourSnapshotId>:Kibana異常前最新快照的id,填寫在步驟3中擷取的id。例如es-cn-m7r23wodb006n****_20220303020235

    執行成功後,預期結果如下。只有返回結果中存在.kibana_1相關的索引,您才可以繼續執行下文步驟恢複快照。查看是否存在.kibana_1索引
  5. .kibana_1索引的狀態設定為close。
    重要 如果將.kibana_1索引的狀態設定為close之後,重啟Kibana導致無法登入,需要通過curl命令恢複.kibana_1索引,具體操作請參見常見問題
    POST /.kibana_1/_close
    執行成功後,預期結果如下。
    {
      "acknowledged" : true,
      "shards_acknowledged" : true,
      "indices" : {
        ".kibana_1" : {
          "closed" : true
        }
      }
    }
  6. 執行快照恢複命令,恢複.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"的報錯,可參見常見問題進行處理。
  7. 查看快照恢複結果。
    執行以下步驟,查看Kibana相關的Index Patterns是否恢複。如果恢複,說明快照恢複成功。
    1. 在Kibana控制台的左上方,單擊開啟左側導覽列
    2. 在展開的左側導覽列中,選擇Management > Stack Management
    3. Kibana地區,單擊Index Patterns
    4. Index patterns頁面,單擊以kibana_開頭的索引模式,查看資料是否已恢複。
      查看恢複結果

通過reindex方式恢複

  1. 在快照恢複前,擷取備份的快照資訊,並查看叢集中是否存在.kibana_1相關的索引。
    具體操作,請參見《通過快照方式恢複》章節中的步驟1~步驟4
    說明 只有叢集中存在.kibana_1相關的索引,您才可以繼續執行下文步驟恢複快照。
  2. 執行快照恢複命令,將快照中的.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

  3. 執行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" : [ ]
    }
  4. 刪除備份索引(本文樣本為kibana123)。
    DELETE kibana123

    執行成功後,預期返回"accepted" : true

  5. 查看快照恢複結果。
    查看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"}'