已保存对象 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 文档

  • 当使用 create 或 bulk create API 时,您可能会遇到冲突错误,这些错误无法使用 overwrite: true 选项覆盖。如果已有一个具有此 ID 的已保存对象位于不同的空间中,或者如果同一空间中存在此 ID 的旧 URL 别名,则可能会发生这种情况。
  • 当使用 import 或 copy to space API 时,对象可能会按照上述说明使用不同的 ID 创建。
  • 当使用 delete API 时,如果已保存对象存在于多个空间中,则只能通过使用 force 选项将其删除。