当您的Kibana集群因异常状况被重置后,.kibana_{num}{num}为变量,例如.kibana_1、.kibana_2等)索引也会被重置,因此您需要恢复对应索引来恢复相关数据。本文以.kibana_1索引为例,介绍如何通过快照快速恢复.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索引:
  • 手动重建Kibana Index Patterns或用户角色。
  • 将快照数据恢复到备份索引,通过reindex方式将备份索引数据写入到.kibana_1中。
  • 通过快照的方式直接恢复。
    说明 本文主要介绍使用快照的方式直接恢复备份索引,此方式相比较于其他两种方案恢复比较快速。

前提条件

  • 集群已开启自动快照备份或在快照中手动备份过系统索引,且快照中保存的.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。
    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_开头的索引模式,查看数据是否已恢复。
      查看恢复结果

常见问题

  • 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"}'