跳到主要内容

插件的生命周期

本文档描述了插件的各个阶段,例如安装和加载。我们将描述插件生命周期根据其类型以及是否具有 后端 而存在的差异。

安装和卸载插件

有关安装或卸载插件的说明,请参阅我们的文档:插件管理

安装后,插件会被提取到文件系统上的 *插件目录* 中。同样,卸载插件会从同一目录中删除文件。

注意

使用 Grafana CLI 安装或卸载插件需要您重启 Grafana 才能使更改生效。为了避免重启 Grafana,您可以在运行时从 Grafana 插件目录 中安装插件。

加载插件

插件在 Grafana 启动时或在运行时安装/卸载插件时加载。

了解 Grafana 加载插件时涉及的不同阶段可能有助于您更好地理解插件的使用和故障排除任何意外行为。例如,即使您已安装某个插件,为什么它在插件目录中或在 Grafana 中使用时未被标记为已安装。

对于 后端 插件,还有一个额外的初始化过程(请参阅 阶段 3)。

注意

插件的生命周期在内存中跟踪,并且不会持久保存在 Grafana 的数据库中。这意味着以下描述的阶段在每次服务器重启时都会发生。

阶段 1. 插件发现

Grafana 开始通过扫描文件系统上的目录来发现已安装的插件,以查找每个 plugin.json

阶段 2. 插件加载

在发现阶段发现的所有插件都经过检查以确保它们有效。一些自动检查包括

  • 插件必须具有有效的 签名。有效的插件被称为 *已验证插件*。
  • Angular 检测:鉴于 Angular 已被弃用,如果 Angular 支持被禁用并且在插件中检测到 Angular,那么我们会记录一个错误并且不允许加载该插件。

阶段 3. 后端插件初始化

对于任何具有后端的已验证插件,Grafana 配置后端客户端以通过 RPC 使用 HashiCorp 的 Go 插件系统。

阶段 4. 注册

所有已验证的插件都在内存注册表中注册。从现在开始,插件在 Grafana 中可用,因此被称为 *已注册插件*。

已注册的插件在目录中显示为已安装,并出现在仪表板中选择面板或数据源的视图中。

阶段 5. 启动后端插件

对于具有后端的已注册插件,Grafana 开始使用 HashiCorp 的 Go 插件系统通过 RPC 将后端二进制文件作为单独的进程运行。Grafana(客户端)和插件(服务器)之间协商支持的插件协议和版本,以便 Grafana 了解插件的功能。

Grafana 后端插件有其自己独立的生命周期。只要后端插件正在运行,Grafana 就会确保在后端插件崩溃或终止的情况下重新启动它。当 Grafana 关闭时,后端进程也会终止。

阶段 6. 客户端加载

在 Grafana 启动并且 HTTP API 运行后,Grafana 用户会收到服务器端渲染的索引页面,其中包含所谓的引导数据。此数据包括可用插件列表和指向 module.js 文件的 URI,Grafana 使用该文件来实例化插件。

当用户与需要插件的 UI 交互时,Grafana 将延迟加载插件的 module.js 文件

  • 面板插件 - 当用户打开带有面板的仪表板(或与任何需要插件的 UI 交互)时,Grafana 通过 fetch 请求延迟加载必要的插件代码。每个插件仅加载一次,但其对象会被多次初始化。

  • 数据源插件 - 数据源插件可以通过多种方式加载。例如,如果用户在下拉列表中选择数据源,或者他们加载包含插件数据源的仪表板,则可以在 Explore 页面中加载它。

  • 应用插件 - 应用有两种不同的加载模式:延迟加载预加载。延迟加载应用插件仅在用户直接访问“应用”菜单项时加载。预加载应用插件与 Grafana 应用一起加载,并且可以在页面加载后立即执行代码。

注意

每个插件仅加载一次,但其对象会被多次初始化。例如,具有 10 个不同面板插件的仪表板将加载 10 个插件,每个插件都有一个实例。具有 10 个相同插件面板的仪表板将加载该插件一次并具有 10 个实例。

故障排除

您可以查看 Grafana 服务器日志 以查找与加载插件相关的任何意外错误或详细信息。此外,您可以通过将 日志级别更改为 debug 来启用更多详细信息。