解决迁移失败
编辑解决迁移失败编辑
迁移 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.
要删除导致迁移失败的文档,请执行以下步骤
-
创建如下角色
PUT _security/role/grant_kibana_system_indices { "indices": [ { "names": [ ".kibana*" ], "privileges": [ "all" ], "allow_restricted_indices": true } ] }
-
使用上述角色和
superuser
内置角色创建用户POST /_security/user/temporarykibanasuperuser { "password" : "l0ng-r4nd0m-p@ssw0rd", "roles" : [ "superuser", "grant_kibana_system_indices" ] }
-
删除迁移系统放置在先前索引上的写阻塞
PUT .kibana_7.12.1_001/_settings { "index": { "blocks.write": false } }
-
删除损坏的文档
DELETE .kibana_7.12.0_001/_doc/marketing_space:dashboard:e3c5fc71-ac71-4805-bcab-2bcc9cc93275
-
重新启动 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_interval
或 mappings
的匹配索引模板会干扰 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 个分片。
有关更多信息,请参阅有关每个节点的总分片数的文档。