加载中

插件、包与平台

从最终用户的角度来看,Kibana 是一个与 Elasticsearch 交互的工具,提供了一种简便的方法来可视化和分析数据。

从开发者的角度来看,Kibana 是一个提供了一系列工具的平台,不仅可以构建您今天在 Kibana 中看到的 UI,还可以构建各种各样的应用程序,用于探索、可视化和处理 Elasticsearch 中的数据。该平台使开发者能够构建应用程序,或将额外的功能注入到现有的应用程序中。您是否知道您在 Kibana UI 中看到的大部分内容都是构建在插件内部的?如果您从 Kibana 中删除了所有插件,您将只剩下一个空的导航菜单和一套开发工具。Kibana 平台就像一张空白画布,正等待着开发者前来创造!

Kibana personas

从最高层级来看,Kibana 由插件 (plugins)核心 (core)Kibana 包 (Kibana packages) 组成。

Kibana 1000 ft arch

插件提供了 Kibana 中绝大部分的功能。所有的应用程序和 UI 都在这里定义。

核心提供了运行时和最基础的服务。

@kbn 包提供了可以在 Kibana 中任何地方导入的、无状态的可重用功能。

插件是为扩展和定制 Kibana 而编写的代码。插件不一定要成为 Kibana 仓库的一部分,尽管 Kibana 仓库确实包含许多插件!插件通过使用平台服务提供的扩展点来添加定制功能。有时人们会混淆“插件”和“应用程序”这两个术语。虽然插件和应用程序之间通常存在 1:1 的关系,但并非总是如此。一个插件可以注册许多应用程序,也可以一个都不注册。

应用程序是 Kibana UI 中的顶层页面。Discover(发现)、Dashboard(仪表板)、Dev Tools(开发工具)、Maps(地图)等都是应用程序的示例

applications in kibana

一个插件可以通过将应用程序添加到核心的应用程序注册表中来注册该应用程序。

插件的公共 API 由从插件的启动 (start) 或设置 (setup) 生命周期方法导出的所有内容,以及存在于三个“作用域”文件夹中的顶层 index.ts 文件中导出的内容组成

  • common/index.ts
  • public/index.ts
  • server/index.ts

任何从这些文件或生命周期方法中导出内容的插件都在暴露公共服务。我们有时称这些为“插件服务”或“共享服务”。

核心和插件在其生命周期的不同部分暴露不同的功能。我们通过服务定义上特定命名的方法来描述核心服务和插件的生命周期。

Kibana 有三个生命周期:setup(设置)、start(启动)和 stop(停止)。每个插件的 setup 函数在 Kibana 于服务器上进行设置时或在浏览器中加载时按顺序调用。start 函数在所有插件的 setup 完成后按顺序调用。stop 函数在 Kibana 优雅地关闭服务器时或浏览器标签页/窗口关闭时按顺序调用。

下表解释了每个生命周期如何与 Kibana 的状态相关联。

生命周期 用途 server browser
setup 执行“注册”工作以设置运行时环境 配置 REST API 端点,注册已保存对象类型等。 配置 SPA 中的应用程序路由,在扩展点中注册自定义 UI 元素等。
start 引导运行时逻辑 响应传入的请求,请求 Elasticsearch 服务器等。 开始轮询 Kibana 服务器,根据用户交互更新 DOM 树等。
停止 清理运行时 在服务器关闭前处置活动句柄。 当用户离开 Kibana 时将会话数据存储在 LocalStorage 中等。

不同的服务接口可以并且会被传递给 setup、start 和 stop,因为某些功能在正在运行的插件上下文中才有意义,而其他类型的功能可能有限制,或者仅在正在停止的插件上下文中才有意义。

扩展点是由核心或插件的插件 API 提供的函数,其他插件可以使用它来定制 Kibana 体验。扩展点的示例如下

  • core.application.register (上面提到的扩展点)
  • core.notifications.toasts.addSuccess
  • core.overlays.showModal
  • embeddables.registerEmbeddableFactory
  • uiActions.registerAction
  • core.savedObjects.registerType

通过遵循 Hello World 教程学习如何构建您自己的插件。

© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.