Grafana 插件类型和使用介绍-生命周期四

257 阅读4分钟

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

插件的安装和卸载

要安装或卸载插件的说明,请参阅我们的插件管理文档Plugin administration

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

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

加载插件

插件在Grafana启动时加载,或者在运行时安装/卸载时加载。 了解Grafana加载插件时涉及的不同阶段可以帮助您更好地理解插件的使用和解决任何意外行为。例如,为什么某个插件在Grafana插件目录中或Grafana内部没有标记为已安装,尽管您已经安装了它。

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

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

第1阶段。

插件发现 Grafana开始通过扫描文件系统中的每个plugin.json来发现已安装的插件。

第2阶段

插件加载 在发现阶段中发现的插件将被检查以确保它们是有效的。一些自动化检查包括:

  • 插件必须具有有效的签名。有效的插件被称为已验证的插件。
  • Angular检测:由于Angular已被弃用,如果禁用了Angular支持并且检测到插件中存在Angular,则我们会记录错误并禁止加载该插件。

第三阶段

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

第四阶段

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

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

第五阶段

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

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

第六阶段

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

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

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

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

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

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

故障排除

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