当您的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"}'