跳转到主要内容

插件的生命周期

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

安装和卸载插件

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

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

注意

使用 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开始使用通过RPC的HashiCorp的Go插件系统作为单独的进程运行后端二进制文件。支持的插件协议和版本在Grafana(客户端)和插件(服务器)之间协商,以便Grafana了解插件的功能。

只要后端插件在运行,Grafana就会确保在插件崩溃或终止的情况下重启后端插件。当Grafana关闭时,后端进程将被终止。

阶段 6. 客户端加载

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

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

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

  • 数据源插件 - 数据源插件可以以多种方式加载。例如,如果用户在下拉菜单中选择数据源,或者在包含插件数据源的仪表板中加载,它可以在探索页面上加载。

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

注意

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

故障排除

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