插件 〉simple grpc datasource


开发者

Ron van der Wijngaard

注册以接收产品新闻和更新(不定期)



数据源
社区

simple grpc datasource

  • 概述
  • 安装
  • 变更日志
  • 相关内容

Grafana Simple gRPC 数据源插件

GitHub release (latest by date) Marketplace Downloads

这个插件是什么?

这个后端 Grafana 数据源插件提供了用户友好的 Grafana 体验,只需少量简单通用的参数即可配置。它附带了一个专用的 API 规范,需要在数据提供者的后端实现。实现此 API 有助于将前端可视化解决方案与后端数据层实现解耦,让开发者有必要的自由来更新和改进后端而不会破坏最终用户体验。

protobuf API 规范可在 pkg/proto 目录中找到。在配置数据源插件时,最终用户需要提供一个端点 URL,也可以选择提供一个 API 密钥。该数据源将尝试建立 gRPC 连接,并根据 API 规范向给定的端点发出调用。

有关 gRPC 或 protobuf 的更多信息,请参阅 gRPC 文档

为什么选择 gRPC?

gRPC 是一个快速高效的服务间通信框架,通过 protobuf 为 API 实现提供了万无一失且流程化的工作流程。

gRPC 还支持所有基本的流式传输功能,这些功能可以在未来的版本中实现。

安全性

数据源插件通过 TLS 建立安全的 gRPC 连接。此外,该数据源支持 API 密钥授权。API 密钥将作为调用元数据的一部分包含在每个 API 调用中。

使用方法

screenshot

指标

随着时间序列数据点流的追加而更新新值的变量。

维度

维度是度量的可选标识属性。每个维度都建模为键值对。一个度量可以有零个或多个维度,它们共同唯一地标识该度量。

查询类型

类型描述
获取指标历史获取历史时间序列值
获取指标聚合获取聚合时间序列
获取指标值获取最后已知值

入门

  1. 本地启动一个示例 gRPC 服务器
docker run -p 50051:50051 innius/sample-grpc-server
  1. 安装 innius-simple-grpc-datasource 插件

  2. 启用数据源

    • 配置端点 localhost:50051
  3. 配置仪表板

实现您自己的后端 API

此数据源插件要求后端实现 SimpleAdvanced 接口。

Simple API (GrafanaQueryAPI)

此 API 提供以下操作

名称描述
ListDimensionKeys返回所有可用维度键的列表
ListDimensionValues返回某个维度键的所有可用维度值的列表
ListMetrics返回维度组合的所有指标列表。
GetMetricValue返回某个指标的最后已知值。
GetMetricHistory返回某个指标的历史值
GetMetricAggregate返回聚合指标值

可在此处找到示例实现:here

此 API 有一些限制

  • 每个查询只支持一个指标
  • 不支持具有多个选项的变量
  • 不支持指标的增强元数据(如单位等)
  • 不支持灵活的查询选项

Advanced API (GrafanaQueryAPIV3)

此 API 提供的操作与 Simple API 几乎相同,但有一个主要区别:它支持同一查询中的多个指标。因此,此 API 可与 grafana 模板化功能无缝集成。此外,它还支持增强的指标元数据,例如度量单位。另一个区别是它支持 grafana 标签。

Advanced API 支持由后端系统定义的动态查询选项。这使得可以针对特定的后端定制 grafana 查询的行为。自定义选项的一个示例是 GetMetricAggregate 查询的 Aggregate。API 的 v1 版本具有固定数量的 Aggregate,由插件定义。后端系统无法添加不同的选项。然而,V3 API 支持这一点。目前,一个选项可以是枚举类型或布尔类型。

此 API 提供以下操作

名称描述
ListDimensionKeys返回所有可用维度键的列表
ListDimensionValues返回某个维度键的所有可用维度值的列表
ListMetrics返回维度组合的所有指标列表。
GetMetricValue返回一个或多个指标的最后已知值。
GetMetricHistory返回一个或多个指标的历史值
GetMetricAggregate返回一个或多个指标的聚合值
GetQueryOptions返回所选查询类型的选项

可在此处找到示例实现:here

示例用例

  • 具有不同标签的同一指标的不同时间序列。例如:温度测量值是一个房间的。该房间有四个区域:北、南、东、西。V1 API 不支持这种情况,除非为每个温度/区域组合定义了四个不同的指标。Advanced API 通过为同一指标 temperature 返回多个时间序列来支持此场景,每个时间序列都使用不同的标签 zone 进行注释。
  • 不同指标的不同时间序列。例如:一个房间有多个温度传感器。V1 API 通过为每个指标定义多个查询来支持此场景。Advanced API 可以通过一个查询实现。

重要说明:为了使用 Advanced API,后端服务器需要支持 gRPC Reflection。插件使用此功能来确定后端是否支持 V2 或 V3 协议。如果不支持,则回退到 Simple API 实现。

请注意,gRPC 与编程语言无关,因此您可以用您选择的语言实现后端。请查看您所用语言的 gRPC 文档

(GrafanaQueryAPIV2) 与 (GravanaQueryAPIV3) 之间的更改

最重要的区别是 V2 API 的 Aggregate 类型在 V3 API 中不可用,除非它们在后端定义。

后端代码需要实现类似这样的功能

const (
    // this id is important because it matches the current v2 aggregate type option 
	AggregationTypeOptionID = iota
    // these enum values are important because they match the values of the V2 options 
	AggregationTypeAverage = 0
	AggregationTypeMax     = 1
	AggregationTypeMin     = 2
	AggregationTypeCount   = 3
)

func (backend *BackendServerV3) GetQueryOptions(ctx context.Context, in *v3.GetOptionsRequest) (*v3.GetOptionsResponse, error) { var Options []*v3.Option switch in.GetQueryType() { case v3.GetOptionsRequest_GetMetricAggregate: Options = append(Options, []*v3.Option{ { Id: strconv.Itoa(AggregationTypeOptionID), Label: “Aggregate”, Description: “Aggregate the query results”, Type: v3.Option_Enum, EnumValues: []*v3.EnumValue{ {Label: “Average”, Description: “Calculate the average of the values”, Id: strconv.Itoa(AggregationTypeAverage)}, {Label: “Min”, Description: “Calculate the minimum of the values”, Id: strconv.Itoa(AggregationTypeMin)}, {Label: “Max”, Description: “Calculate the maximum of the values”, Id: strconv.Itoa(AggregationTypeMax)}, {Label: “Count”, Description: “Calculate the sum of the values”, Id: strconv.Itoa(AggregationTypeCount)}, }, }, }…) case v3.GetOptionsRequest_GetMetricValue: return &v3.GetOptionsResponse{}, nil case v3.GetOptionsRequest_GetMetricHistory: return &v3.GetOptionsResponse{}, nil } return &v3.GetOptionsResponse{Options: Options}, nil }

可在此处找到 V3 后端的示例实现:here

功能特性

  • 在一个查询中选择多个指标
  • 灵活的维度选择
  • 与 Grafana 变量和模板化功能集成
  • 允许后端系统提供额外的元数据,如值映射、度量单位等。
  • 支持通知
  • 支持分页
  • 当后端服务器达到最大容量时,支持对 gRPC 调用进行重试
  • 允许后端系统定义自定义查询选项。

路线图

  • 支持注解
  • 支持流式查询

在 Grafana Cloud 上安装 simple grpc datasource

有关更多信息,请访问 插件安装文档。

变更日志

1.2.12

  • 修复:按 Name 字段对帧排序

1.2.10

  • 例行:更新依赖项

1.2.7

  • 重构:将分页逻辑移动到插件后端
  • 例行:更新依赖项
  • 例行:更新 docker-compose.yml 中的 grafana 版本
  • 例行:将 sample-grpc-server 添加到 docker-compose.yml

1.2.6

  • 修复:确保单值查询能够处理字符串值。

1.2.5

  • 功能:允许后端系统返回字符串值

1.2.3

  • 重构:改进后端错误消息 功能:增强查询编辑器中指标选择控件的宽度
  • 例行:更新到最新的 grafana 框架 修复:更改查询类型后重置查询选项

1.2.2

错误修复:修复后端资源路径

1.2.1

  • 功能:为后端查询选项提供默认值
  • 功能:在检索查询选项时向后端发送当前选定的查询选项
  • 功能:在 GetMetricQuery 中包含 grafana 时间范围
  • 功能:查询选项编辑器的布局改进

1.1.1.

  • 文档:解释 API 版本之间的差异

1.1.0

  • 功能:添加新的 v3 API,允许后端定义查询选项

1.0.14

升级 grafana 依赖项和 grafana 工具

1.0.12

  • 功能:支持后端值映射

1.0.11

  • 修复:指定正确的 grafana 版本依赖项

1.0.10

  • 功能:后端 gRPC 调用的重试机制
  • 功能:向 VariableQueryEditor 添加维度值过滤器
  • 功能:更新到最新的 grafana 框架

1.0.9

  • 功能:改进的维度选择组件
  • 功能:添加支持维度键和指标的变量编辑器

1.0.8

  • 错误修复:从仪表板面板触发 Explore 时指标不正确
  • 错误修复:修复 Chrome 浏览器中的维度下拉框小故障

1.0.7

  • 功能:为 ListDimensions 提供选定的维度以启用高级后端过滤
  • 功能:支持帧元数据以启用来自后端的用户通知
  • 错误修复:包含多帧查询的分页未能正常工作

1.0.6

  • 升级:升级到最新的 grafana 工具包
  • 功能:添加 v2 API,更好地与 grafana dataframe API 对齐
  • 功能:将 fieldname 添加到显示名称表达式

1.0.5

  • 功能:将 COUNT 聚合类型添加到可能的聚合列表
  • 功能:支持显示名称表达式(也称为别名)
  • 错误修复:从 metricFind 查询中排除变量

1.0.4

  • 改进的指标选择
  • 支持 Count 聚合类型
  • 将 grafana intervalMSMaxItems 属性添加到查询定义

1.0.3

在用户界面隐藏技术性的 grpc 错误;后端插件记录错误详情并向用户返回友好的消息。

1.0.2

  • 添加对 GetMetricAggregate 查询的支持
  • 修复 Readme 中的一些拼写错误
  • 将插件 ID 更正为标准的 grafana 插件 ID 约定

1.0.0(未发布)

初始发布。