跳转到主要内容

后端插件

The Grafana plugin system for backend development allows you to integrate Grafana with virtually anything and offer custom visualizations. The system is based on HashiCorp's Go Plugin System over RPC. Our implementation of the Grafana server launches each backend plugin as a subprocess and communicates with it over gRPC.

This document explains the system's background, use cases, benefits, and key features.

背景

Grafana 在 3.0 版本中添加了对 前端插件 的支持,以便 Grafana 社区可以创建自定义仪表盘和数据源。这非常成功,并使 Grafana 对我们的用户社区更有用。

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

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

实现后端插件的使用案例

以下示例提供了一些后端插件的常见用例。

  • 支持数据源对Grafana警报、记录查询以及查询和资源缓存的配置。
  • 连接到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插件SDK for Go来实现后端插件,那么Go应用程序的Prometheus仪表库是内置的。此SDK为您提供开箱即用的Go运行时指标和进程指标。要向仪表化后端插件添加自定义指标,请参阅在插件中实现指标

流式传输

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

数据通信模型

Grafana使用一种通信模型,您可以选择实例管理以简化开发过程。如果这样做,那么所有必要的信息(配置)都包含在每个发送到后端插件的请求中,允许插件满足请求并返回响应。该模型简化了插件作者无需跟踪或请求额外状态即可满足请求的情况。

缓存和连接池

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

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

有关支持连接池的插件示例,请参阅HTTP后端插件示例,该示例展示了每个插件实例创建一个在整个实例生命周期中重复使用的HTTP客户端,从而重用HTTP连接。