插件 〉简单的grpc数据源


开发者

Ron van der Wijngaard

资源


注册以接收偶尔的产品新闻和更新



数据源
社区

简单的 gRPC 数据源

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

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 接口。

简单 API (GrafanaQueryAPI)

此 API 提供以下操作

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

示例实现可以在此处找到 这里.

此 API 有一些限制

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

高级 API (GrafanaQueryAPIV3)

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

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

此 API 提供以下操作

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

示例实现可以在此处找到 这里.

示例用例

  • 同一度量具有不同标签的不同时间序列。例如:温度测量是一个房间。房间有四个区域:北、南、东和西。V1 API 除非为每个温度/区域组合定义了四个不同的度量,否则不支持此操作。高级 API 通过为同一度量 temperature 返回多个时间序列来支持此场景,每个时间序列都标注了不同的标签 zone
  • 不同度量的不同时间序列。例如:一个房间有多个温度传感器。V1 API 通过为每个度量定义多个查询来支持此操作。高级 API 可以通过单个查询来完成此操作。

重要提示:为了使用高级API,后端服务器需要支持gRPC反射。插件使用此功能来判断后端是否支持V2或V3协议。如果不支持,则回退到简单API实现。

请注意,gRPC与编程语言无关,这使得您可以使用您选择的任何语言来实现后端。查看您语言的相关gRPC文档

在(GrafanaQueryAPIV2)和(GravanaQueryAPIV3)之间的变化

最重要的区别是,V2 API的聚合类型在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后端的示例实现

功能

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

路线图

  • 支持注释
  • 支持流查询

在Grafana Cloud上安装simple grpc数据源

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

变更日志

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

  • 功能:提供具有默认值的后端查询选项
  • 功能:在检索查询选项时将当前选择的查询选项发送到后端
  • 功能:将 Grafana 时间范围包含在 GetMetricQuery 中
  • 功能:改进查询选项编辑器的布局

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 工具包
  • 功能:添加与 grafana dataframe API 更好对齐的 v2 API
  • 功能:将字段名添加到显示名称表达式

1.0.5

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

1.0.4

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

1.0.3

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

1.0.2

  • 支持 GetMetricAggregate 查询
  • 修复 Readme 中的几个拼写错误
  • 将插件 ID 修改为标准的 grafana plugin-id 习惯用法

1.0.0 (未发布)

初始版本。