插件生命周期
本文档描述了插件的各个阶段,例如安装和加载。我们将描述插件生命周期的差异,具体取决于其类型以及它是否具有 后端。
安装和卸载插件
有关安装或卸载插件的说明,请参阅我们位于 插件管理 中的文档。
安装后,插件将被提取到文件系统上的 插件目录 中。同样,卸载插件会删除该目录中的文件。
使用 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 服务器日志 以查找与加载插件相关的任何意外错误或详细信息。此外,您可以通过更改 日志级别为调试 来启用更多详细信息。