解决迁移失败编辑

迁移 Kibana 主要涉及迁移已保存对象文档以使其与新版本兼容。

已保存对象迁移失败编辑

如果 Kibana 在迁移已保存对象索引时意外终止,Kibana 会在进程重新启动时自动尝试再次执行迁移。请勿删除任何已保存对象索引来修复失败的迁移。与以前的版本不同,Kibana 7.12.0 及更高版本不需要删除索引来释放失败的迁移锁。

如果升级迁移反复失败,请参阅准备迁移。当您解决了迁移失败的根本原因后,Kibana 会自动重试迁移。如果您无法解决迁移失败问题,请联系支持人员。

Fleet 测试版的已知问题编辑

如果您看到`timeout_exception` 或 receive_timeout_transport_exception 错误,则可能是因为您在 7.12.0 版本中尝试使用 Fleet 测试版时遇到了已知问题。升级迁移失败是因为 .kibana 索引中有大量文档,这会导致 Kibana 记录如下错误:

Error: Unable to complete saved object migrations for the [.kibana] index. Please check the health of your Elasticsearch cluster and try again. Error: [receive_timeout_transport_exception]: [instance-0000000002][10.32.1.112:19541][cluster:monitor/task/get] request_id [2648] timed out after [59940ms]

Error: Unable to complete saved object migrations for the [.kibana] index. Please check the health of your Elasticsearch cluster and try again. Error: [timeout_exception]: Timed out waiting for completion of [org.elasticsearch.index.reindex.BulkByScrollTask@6a74c54]

有关如何缓解已知问题的说明,请参阅GitHub 问题

损坏的已保存对象编辑

为了查找和解决由损坏的文档引起的问题,我们强烈建议您在开发集群中测试 Kibana 升级,尤其是在您的环境中存在创建已保存对象的自定义集成时。

通过手动编辑或集成损坏的已保存对象会导致迁移失败,并显示日志消息,例如 无法迁移损坏的已保存对象文档...。为了成功进行升级迁移,您必须修复或删除损坏的文档。

例如,您收到以下错误消息

Unable to migrate the corrupt saved object document with _id: 'marketing_space:dashboard:e3c5fc71-ac71-4805-bcab-2bcc9cc93275'. To allow migrations to proceed, please delete this document from the [.kibana_7.12.0_001] index.

要删除导致迁移失败的文档,请执行以下步骤

  1. 创建如下角色

    PUT _security/role/grant_kibana_system_indices
    {
      "indices": [
        {
          "names": [
            ".kibana*"
          ],
          "privileges": [
            "all"
          ],
          "allow_restricted_indices": true
        }
      ]
    }
  2. 使用上述角色和 superuser 内置角色创建用户

    POST /_security/user/temporarykibanasuperuser
    {
      "password" : "l0ng-r4nd0m-p@ssw0rd",
      "roles" : [ "superuser", "grant_kibana_system_indices" ]
    }
  3. 删除迁移系统放置在先前索引上的写阻塞

    PUT .kibana_7.12.1_001/_settings
    {
      "index": {
        "blocks.write": false
      }
    }
  4. 删除损坏的文档

    DELETE .kibana_7.12.0_001/_doc/marketing_space:dashboard:e3c5fc71-ac71-4805-bcab-2bcc9cc93275
  5. 重新启动 Kibana。

    marketing_space 空间中 ID 为 e3c5fc71-ac71-4805-bcab-2bcc9cc93275 的仪表板不再可用

您可以将 Kibana 配置为自动丢弃所有损坏的对象,并转换迁移期间发生的错误。设置配置选项 migrations.discardCorruptObjects 时,Kibana 将删除冲突的对象并继续迁移。例如,要升级到 8.4.0,您可以在 kibana.yml 中定义以下设置

migrations.discardCorruptObjects: "8.4.0"

警告:启用上述标志将导致系统丢弃所有损坏的对象,以及那些导致转换错误的对象。因此,强烈建议您仔细查看日志中冲突对象的列表。

未知已保存对象的文档编辑

如果已保存对象属于未知的已保存对象类型,则迁移将失败。未知的已保存对象通常是由于对 Elasticsearch 索引执行了手动修改(在 8.x 中不再允许)或禁用了先前创建了已保存对象的插件而导致的。

我们建议使用升级助手来发现和解决任何未知的已保存对象类型。包含未知已保存对象类型的 Kibana 7.17.0 部署还将记录以下警告消息

CHECK_UNKNOWN_DOCUMENTS Upgrades will fail for 8.0+ because documents were found for unknown saved object types. To ensure that future upgrades will succeed, either re-enable plugins or delete these documents from the ".kibana_7.17.0_001" index after the current upgrade completes.

如果您未能解决此问题,则升级到 8.0+ 将失败,并显示如下消息

Unable to complete saved object migrations for the [.kibana] index: Migration failed because some documents were found which use unknown saved object types:
- "firstDocId" (type "someType")
- "secondtDocId" (type "someType")
- "thirdDocId" (type "someOtherType")

To proceed with the migration you can configure Kibana to discard unknown saved objects for this migration.

要继续迁移,请重新启用先前创建了这些已保存对象的任何插件。或者,仔细查看 Kibana 日志条目中未知已保存对象的列表。如果不再使用相应的禁用插件及其关联的已保存对象,则可以通过将配置选项 migrations.discardUnknownObjects 设置为您要升级到的版本来删除它们。例如,要升级到 8.4.0,您可以在 kibana.yml 中定义以下设置

migrations.discardUnknownObjects: "8.4.0"

不兼容的设置或映射编辑

已知指定 settings.refresh_intervalmappings 的匹配索引模板会干扰 Kibana 升级。当手动定义索引模板时,可能会发生这种情况。

为确保索引模板不会应用于新的 .kibana* 索引,请缩小任何用户定义的索引模板的数据视图。

不兼容的 xpack.tasks.index 配置设置编辑

在 Kibana 7.5.0 及更早版本中,当任务管理器索引通过配置设置 xpack.tasks.index: ".tasks" 设置为 .tasks 时,升级迁移会失败。在 Kibana 7.5.1 及更高版本中,不兼容的配置设置会阻止升级迁移启动。

重复的超时请求最终失败编辑

迁移陷入重试循环,等待永远无法达到的索引黄色状态。在 CLONE_TEMP_TO_TARGET 或 CREATE_REINDEX_TEMP 步骤中,您可能会看到类似于以下内容的日志条目

"Action failed with [index_not_yellow_timeout] Timeout waiting for the status of the [.kibana_8.1.0_001] index to become "yellow". Retrying attempt 1 in 2 seconds."

该过程正在等待黄色索引状态。有两个已知原因

在重试迁移之前,请检查 _cluster/allocation/explain?index=${targetIndex} API 的输出,以确定索引为何不是黄色的

GET _cluster/allocation/explain
{
  "index": ".kibana_8.1.0_001",
  "shard": 0,
  "primary": true,
}

如果集群超过了磁盘使用量的低水位线,则输出应包含类似于以下内容的消息

"The node is above the low watermark cluster setting [cluster.routing.allocation.disk.watermark.low=85%], using more disk space than the maximum allowed [85.0%], actual free: [11.692661332965082%]"

有关如何解决常见集群问题,请参阅 Elasticsearch 指南。

如果路由分配是问题所在,则 _cluster/allocation/explain API 将返回类似于以下内容的条目

"allocate_explanation" : "cannot allocate because allocation is not permitted to any of the nodes"

路由分配已禁用或受限编辑

升级迁移失败,因为路由分配已禁用或受限(cluster.routing.allocation.enable: none/primaries/new_primaries),这会导致 Kibana 记录如下错误:

Unable to complete saved object migrations for the [.kibana] index: [incompatible_cluster_routing_allocation] The elasticsearch cluster has cluster routing allocation incorrectly set for migrations to continue. To proceed, please remove the cluster routing allocation settings with PUT /_cluster/settings {"transient": {"cluster.routing.allocation.enable": null}, "persistent": {"cluster.routing.allocation.enable": null}}

要解决此问题,请删除瞬态和持久路由分配设置

PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": null
  },
  "persistent": {
    "cluster.routing.allocation.enable": null
  }
}

超过 Elasticsearch 集群分片限制编辑

升级时,Kibana 会创建需要少量新分片的新索引。如果打开的 Elasticsearch 分片数量接近或超过 Elasticsearch cluster.max_shards_per_node 设置,则 Kibana 无法完成升级。通过删除索引以清理资源或增加 cluster.max_shards_per_node 设置,确保 Kibana 能够至少再添加 10 个分片。

有关更多信息,请参阅有关每个节点的总分片数的文档。