已保存对象 ID编辑

过去,许多已保存对象类型可以在不同的 空间 中具有相同的 ID。例如,如果您将仪表板“123”从一个空间复制到另一个空间,则第二个仪表板也将具有 ID“123”。虽然已保存对象 ID 不是用户直接交互的内容,但 Kibana 的许多方面都依赖于它,尤其是 URL。如果您有一个指向已保存仪表板的“深层链接”URL,则该 URL 包含已保存对象的 ID。

从 8.0 版本开始,Kibana 要求大多数已保存对象都具有全局唯一的 ID。这是我们为了支持将已保存对象共享到多个空间而需要做出的改变。大多数已保存对象不能共享到多个空间,但我们需要首先开始强制执行全局唯一的对象 ID。

我们已经进行了一些增强以最大程度地减少影响,本文档描述了您需要了解的有关这些更改的信息以及它将如何影响您。

升级到 8.x 的影响编辑

每次升级 Kibana 时,已保存对象都会迁移到新格式。当您第一次从 7.x 升级到 8.x 时,此迁移过程将开始强制执行全局唯一的已保存对象 ID。

实际上,自定义空间中存在的任何旧的已保存对象都将将其 ID 更改为新的 UUID,而默认空间中的已保存对象将保持不变。这就是我们如何确保每个已保存对象的 ID 都是唯一的。例如:如果您在默认空间中有仪表板“123”,在另一个空间中有仪表板“123”,则升级后,您将在默认空间中有仪表板“123”,在另一个空间中有仪表板“456”。

使用 8.x 的影响编辑

升级后,或者如果您使用 8.x 设置新的 Kibana 实例,则还有一些行为会有所不同。

使用旧 URL 访问已保存对象编辑

当您升级 Kibana 并且已保存对象的 ID 发生更改时,用于访问这些已保存对象的“深层链接”URL 也将更改。为了减少影响,每个现有 URL 都使用特殊的 旧版 URL 别名 进行保留。这意味着,如果您对已更改的已保存对象 ID 使用书签,则您将被重定向到该已保存对象的新 URL。

导入和复制已保存对象编辑

当您将已保存对象复制到另一个空间时,Kibana 会有效地将其导出并导入到该空间。这样,复制已保存对象的行为始终类似于导入。在本文档中,当我们说“导入”时,它适用于这两种功能。

过去,无论您是导入还是复制已保存对象,Kibana 都将在该空间中创建最多一个已保存对象的副本。如果您多次导入已保存对象,Kibana 将覆盖现有对象,因为它使用相同的 ID。由于已保存对象的 ID 现在是全局唯一的,因此 Kibana 通过跟踪每个已保存对象的来源来维护此功能。当您在 8.x 中导入对象时,Kibana 使用已保存对象的 ID来源来确定其目标位置。

如果您使用“检查现有对象”选项导入已保存对象(无论它是从 7.x 还是 8.x 导出),Kibana 将执行以下步骤

  1. 如果 Kibana 在目标空间中找到具有完全相同 ID 的匹配已保存对象,则该对象将成为导入目标位置 - 您可以覆盖该目标位置或跳过它。
  2. 否则,如果 Kibana 找到具有不同 ID 但具有相同来源的匹配已保存对象,则该对象将成为导入目标位置 - 同样,您可以覆盖该目标位置或跳过它。
  3. 否则,如果在不同空间中存在具有完全相同 ID 的已保存对象,则 Kibana 将为导入目标位置生成一个随机 ID,并保留已保存对象的来源。
  4. 否则,Kibana 将使用给定的 ID 创建已保存对象。

例如,您在 export.ndjson 文件中有一个已保存对象,并且您设置了一个全新的 Kibana 实例。您尝试使用“检查现有对象”和“自动覆盖冲突”选项导入已保存对象。第一次导入已保存对象时,Kibana 将创建一个具有相同 ID 的新对象(上面的步骤 4)。如果再次导入,Kibana 将找到该对象并覆盖它(上面的步骤 1)。如果您然后创建一个不同的空间并将其导入那里,Kibana 将创建一个具有随机 ID 的新对象(上面的步骤 3)。最后,如果您再次将其导入第二个空间,Kibana 将找到具有匹配来源的第二个对象并覆盖它(上面的步骤 2)。

当您导入已保存对象并且使用不同的 ID 创建它时,如果 1. 它包含指向其他已保存对象的弱链接(例如,具有指向另一个仪表板的 Markdown URL 的仪表板)并且 2. 对象的 ID 已更改(上面的步骤 3),则这些弱链接将被破坏。有关更多信息,请参阅变更日志中的已知问题

使用已保存对象 API编辑

如果您直接使用已保存对象 API,则应注意以下更改

某些已保存对象 API 在 8.7.0 中已弃用。有关更多信息,请参阅API 文档

  • 使用创建批量创建 API 时,您可能会遇到冲突错误,这些错误无法使用 overwrite: true 选项覆盖。如果在不同空间中已经存在具有此 ID 的已保存对象,或者在同一空间中存在此 ID 的旧版 URL 别名,则可能会发生这种情况。
  • 使用导入复制到空间 API 时,可以使用如上所述的不同 ID 创建对象。
  • 使用删除 API 时,如果已保存对象存在于多个空间中,则只能使用force 选项删除它。