插件的生命周期
本文档描述了插件的各个阶段,例如安装和加载。我们将根据插件的类型以及是否具有后端来描述插件生命周期的差异。
安装和卸载插件
有关安装或卸载插件的说明,请参阅我们的文档:插件管理。
安装后,插件会被解压到文件系统上的*插件目录*中。类似地,卸载插件会从同一目录中删除文件。
使用 Grafana CLI 安装或卸载插件需要重启 Grafana 才能使更改生效。为避免重启 Grafana,您可以在运行时直接从 Grafana 插件目录中安装插件。
加载插件
插件在 Grafana 启动时加载,或者在运行时安装/卸载插件时加载。
了解 Grafana 加载插件的不同阶段可能有助于您更好地理解插件的使用并排除任何意外行为。例如,为什么某个插件即使您已经安装了,但在插件目录中或在 Grafana 内部使用时却没有标记为已安装。
插件的生命周期是在内存中跟踪的,并且不持久存储在 Grafana 的数据库中。这意味着下述阶段在服务器每次重启时都会发生。
阶段 1. 插件发现
Grafana 通过扫描文件系统目录中的每个 plugin.json
文件来开始发现哪些插件已安装。
阶段 2. 插件加载
在发现阶段发现的所有插件都会被检查以确保它们有效。一些自动化检查包括:
- 插件必须具有有效的签名。有效的插件被称为*已验证插件*。
- Angular 检测:鉴于Angular 已弃用,如果 Angular 支持被禁用并且在插件中检测到 Angular,则我们会记录一个错误并且不允许加载该插件。
阶段 3. 后端插件初始化
对于任何具有后端的已验证插件,Grafana 配置后端客户端使用 HashiCorp 的 Go 插件系统通过 RPC 进行通信。
阶段 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 请求延迟加载必需的插件代码。每个插件只加载一次,但其对象可以多次初始化。
-
数据源插件 - 数据源插件可以通过不止一种方式加载。例如,如果用户在下拉列表中选择数据源,或者加载包含插件数据源的仪表盘,它可以在探索页面中加载。
-
应用插件 - 应用有两种不同的加载模式:*延迟加载*和*预加载*。延迟加载的应用插件仅在用户直接访问应用菜单项时加载。预加载的应用插件会随 Grafana 应用一起加载,并且可以在页面加载后立即执行代码。
每个插件只加载一次,但其对象可以多次初始化。例如,一个包含 10 个不同面板插件的仪表盘会加载 10 个插件,每个插件都有一个实例。一个包含 10 个相同插件面板的仪表盘会加载该插件一次,并有 10 个实例。
故障排除
您可以查看Grafana 服务器日志以获取与加载插件相关的任何意外错误或详细信息。此外,您可以通过将日志级别更改为 debug 来启用更多详细信息。