跳至主要内容

插件生命周期

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

安装和卸载插件

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

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

注意

使用 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 用户将收到包含所谓引导数据的服务器端渲染索引页面。此数据包括可用插件的列表以及 Grafana 用于实例化插件的 module.js 文件的 URI。

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

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

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

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

注意

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

故障排除

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