跳至主要内容

后端插件

本页内容

后端开发插件系统允许您将 Grafana 与几乎是任何事物进行集成,并提供自定义可视化。本系统基于 HashiCorp 的 Go 插件系统 over RPC。我们实现的 Grafana 服务器将每个后端插件作为子进程启动,并通过 gRPC 与其进行通信。

背景

Grafana 在 3.0 版本中增加了对 前端插件 的支持,以便 Grafana 社区能够创建自定义面板和数据源。这取得了巨大的成功,并使 Grafana 对我们的用户社区更加有用。

然而,这些插件的一个局限性是它们在客户端,即在浏览器上运行。因此,它们无法支持需要服务器端功能的用例。

自 Grafana v7.0 版本以来,我们已经支持了服务器端插件,从而消除了这种限制。我们使用术语 后端插件 来表示插件具有后端组件。一个后端插件通常还需要前端组件。例如,一些后端数据源插件需要在前端实现查询编辑组件。

实施后端插件的用例

以下是一些常见后端插件用例的示例

  • 支持数据源对 Grafana Alerting录制查询查询和资源缓存 的支持。
  • 连接到 SQL 数据库服务器和其他通常无法从浏览器连接的非 HTTP 服务。
  • 在用户之间保持状态,例如,通过实现数据源的自定义缓存。
  • 使用 Grafana 不支持的自定义验证方法和/或授权检查。
  • 使用自定义数据源请求代理(更多信息请参阅资源)。

插件开发的优势

Grafana的方法对开发者有益

  • 稳定性:插件无法使您的Grafana进程崩溃:插件中的panic不会使服务器panic。
  • 开发便捷性:Grafana提供官方支持的Go SDK和工具,以便于创建插件。
  • 安全性:插件只能访问它们所提供的接口和参数,而不是整个进程的内存空间。

后端插件系统的功能

Grafana的后端插件系统公开一些关键功能,或构建块,您的后端插件可以实施这些功能

  • 查询数据
  • 资源
  • 健康检查
  • 收集指标
  • 流式传输

查询数据

查询数据功能允许后端插件处理从仪表板、探索Grafana警告提交的数据源查询。响应包含数据帧,用于可视化指标、日志和跟踪。

备注

后端数据源插件需要实现查询数据功能。

资源

资源功能允许后端插件处理发送到Grafana HTTP API的自定义HTTP请求,并使用自定义HTTP响应进行响应。在这里,请求和响应格式可以不同。例如,您可以使用JSON、纯文本、HTML或静态资源(如图片和文件)等。

与查询数据功能相比,其中响应包含数据帧,资源功能为插件开发者提供了更多的灵活性,以扩展和为Grafana提供新的和有趣的应用程序。

实现资源的用例:

  • 实现自定义数据源代理,以提供Grafana内置数据代理不支持的身份验证、授权或其他要求。
  • 返回适合在数据源查询编辑器中使用的数据或信息,以提供自动完成功能。
  • 返回静态资源,如图片或文件。
  • 向设备(如微控制器或物联网设备)发送命令。
  • 从设备(如微控制器或物联网设备)请求信息。
  • 使用自定义资源、方法和操作扩展Grafana的HTTP API。
  • 使用分块传输编码以分块返回大数据响应,或启用某些流式传输功能。

健康检查

健康检查功能允许后端插件返回插件的状态。对于数据源后端插件,当用户编辑数据源并选择 UI 中的保存并测试时,将自动调用健康检查。

插件的健康检查端点暴露在 Grafana HTTP API 中,允许外部系统持续轮询插件的健康状态,以确保其运行并按预期工作。

收集指标

后端插件可以使用文本格式的 Prometheus 暴露格式收集和返回运行时、进程和自定义指标。如果您正在使用Grafana Go 插件 SDK来实现您自己的后端插件,那么内置的Prometheus Go 应用程序仪表库。此 SDK 支持开箱即可使用 Go 运行时指标和处理指标。要为您的插件添加自定义指标以便进行仪表化,请参阅在插件中实现指标

流式传输

流式传输功能允许后端插件处理流式传输的数据源查询。有关更多信息,请参阅流数据源插件的示例。

数据通信模型

Grafana 使用的通信模型允许您选择加入实例管理以简化开发过程。如果您这样做,那么所有必要的信息(配置)都包含在每个后端插件的请求中,从而允许插件完成请求并返回响应。这种模型简化了对插件作者不跟踪或请求额外状态来完成请求的情况。

缓存和连接池

Grafana 在后端插件 SDK 中提供了实例管理,以便容易地处理多个配置的 Grafana 数据源或应用程序,统称为实例。这允许插件在实例之间清晰分开地保持状态。SDK 确保通过在内存中缓存这些实例来优化插件资源,直到 Grafana 中的配置更改。请参阅HTTP 后端插件示例或带有后端的应用程序示例,这些示例展示了如何为数据源和应用程序插件使用实例管理。

提到的实例状态对于保持对下游服务器(如 HTTP、gRPC、TCP、UDP 等)的客户连接非常有用,从而允许使用连接池优化对下游服务器的使用和连接重用。通过使用连接池,插件避免使用机器的所有可用 TCP 连接。

有关支持连接池的插件示例,请参阅HTTP 后端插件示例,该示例展示了每个插件实例创建一个将在整个实例生存期内被复用的 HTTP 客户端,因此可以复用 HTTP 连接。