插件 〉简单grpc数据源
简单的gRPC数据源
Graphana Simple gRPC数据源插件
这个插件是什么?
这个后端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调用中。
用法
度量
作为时间序列数据点的流附加时更新新值的变量。
维度
维度是度量的可选标识属性。每个维度都模拟为一个键值对。一个度量可以有一个或多个维度,这些维度共同唯一标识它。
查询类型
type | 描述 |
---|---|
获取度量历史记录 | 获取历史时间序列值 |
获取度量聚合 | 获取聚合时间序列 |
获取度量值 | 获取最后一个已知值 |
入门指南
- 启动本地的示例gRPC服务器
docker run -p 50051:50051 innius/sample-grpc-server
安装innius-simple-grpc-datasource
启用数据源
- 配置端点
localhost:50051
- 配置端点
配置仪表板
实现自己的后端API
简单API (GrafanaQueryAPI)
此API提供以下操作:
name | 描述 |
---|---|
ListDimensionKeys | 返回所有可用维度键的列表 |
ListDimensionValues | 返回维度键的所有可用值的列表 |
ListMetrics | 返回给定维度的度量值列表 |
GetMetricValue | 返回度量的最后已知值。 |
GetMetricHistory | 返回度量的历史值。 |
GetMetricAggregate | 返回聚合度量值。 |
示例实现可以在这里找到。
该API有一些限制
- 它只支持查询中每个查询一个度量
- 它不支持多个选项的变量
- 它不支持度量的增强元数据(如单位等)
- 它不支持灵活的查询选项
高级API (GrafanaQueryAPIV3)
此API与简单API几乎提供相同的操作,但有一个主要区别:它支持同一查询中的多个度量。因此,该API与Grafana模板功能无缝集成。此外,它支持增强的度量元数据,如测量单位。另一个区别是它支持Grafana标签。
高级API支持由后端系统定义的动态查询选项。这使得可以为特定后端定制Grafana查询的行为。一个自定义选项的示例是GetMetricAggregate查询的聚合。API的v1版本有一个固定的聚合数目,由插件定义。后端系统无法添加不同的选项。然而,V3 API支持这一点。目前选项可以是枚举类型或布尔类型。
此API提供以下操作:
name | 描述 |
---|---|
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 上安装简单的 grpc 数据源
在 Grafana Cloud 实例上安装插件是一个单点安装;更新也是如此。酷吗?
请注意,可能需要 1 分钟才能在您的 Grafana 中看到插件。
在 Grafana Cloud 实例上安装插件是一个单点安装;更新也是如此。酷吗?
请注意,可能需要 1 分钟才能在您的 Grafana 中看到插件。
在 Grafana Cloud 实例上安装插件是一个单点安装;更新也是如此。酷吗?
请注意,可能需要 1 分钟才能在您的 Grafana 中看到插件。
在 Grafana Cloud 实例上安装插件是一个单点安装;更新也是如此。酷吗?
请注意,可能需要 1 分钟才能在您的 Grafana 中看到插件。
在 Grafana Cloud 实例上安装插件是一个单点安装;更新也是如此。酷吗?
请注意,可能需要 1 分钟才能在您的 Grafana 中看到插件。
在 Grafana Cloud 实例上安装插件是一个单点安装;更新也是如此。酷吗?
请注意,可能需要 1 分钟才能在您的 Grafana 中看到插件。
在 Grafana Cloud 实例上安装插件是一个单点安装;更新也是如此。酷吗?
请注意,可能需要 1 分钟才能在您的 Grafana 中看到插件。
有关更多信息,请访问插件安装文档。
在本地 Grafana 上安装
对于本地实例,插件通过简单的 CLI 命令安装和更新。插件不会自动更新,但是当更新可用时,您将在 Grafana 中收到通知。
1. 安装数据源
使用 grafana-cli 工具从命令行安装简单的 grpc 数据源。
grafana-cli plugins install
插件将被安装到您的 grafana 插件目录中;默认为 /var/lib/grafana/plugins。有关 CLI 工具的更多信息,请参阅此处。
2. 配置数据源
从 Grafana 主菜单访问,您可以立即在“数据源”部分添加新安装的数据源。
接下来,点击右上角的“添加数据源”按钮。数据源将在 类型 选择框中选择。
要查看已安装的数据源列表,请单击主菜单中的 插件 项。将显示核心数据源和已安装的数据源。
变更日志
1.2.6
- 修复:确保单个状态查询可以适合字符串值。
1.2.5
- 特性:允许后端系统返回字符串值
1.2.3
- 重构:改进后端错误消息 特性:增强查询编辑器中指标选择控制的宽度
- 日常:更新到最新的Grafana框架 修复:更改查询类型后重置查询选项
1.2.2
修复bug:修复后端资源路径
1.2.1
- 特性:提供具有默认值的后端查询选项
- 特性:在检索查询选项时,将当前所选查询选项发送到后端
- 特性:在GetMetricQuery中包含Grafana时间范围
- 特性:查询选项编辑器的布局改进
1.1.1.
- 文档:解释API版本之间的差异
1.1.0
- 特性:添加新的v3 API,允许后端定义查询选项
1.0.14
升级:升级Grafana依赖项和工具
1.0.12
- 特性:支持后端值映射
1.0.11
- 修复:指定正确的Grafana版本依赖项
1.0.10
- 特性:后端gRPC调用的重试机制
- 特性:向VariableQueryEditor添加维度值过滤器
- 特性:更新到最新的Grafana框架
1.0.9
- 特性:改进维度选择组件
- 特性:添加支持维度键和指标的变量编辑器
1.0.8
- 修复bug:从仪表板面板触发 Explore 时指标不正确
- 修复bug:Chrome浏览器中维度下拉菜单的故障
1.0.7
- 特性:提供带所选维度的ListDimensions以启用高级后端过滤
- 特性:支持帧元数据以启用来自后端的用户通知
- 修复bug:具有多个帧的查询的分页功能不正确
1.0.6
- 升级:升级到最新的Grafana工具包
- 特性:添加与Grafana DataFrame API更好的对齐的v2 API
- 特性:将字段名添加到显示名称表达式
1.0.5
- 特性:将
COUNT
聚合类型添加到可能的聚合列表中 - 特性:支持显示名称表达式(也称为别称)
- 修复bug:在metricFind查询中排除变量
1.0.4
- 改进指标选择
- 支持Count聚合类型
- 将Grafana的
intervalMS
和MaxItems
属性添加到查询定义中
1.0.3
隐藏技术gRPC错误从用户界面;后端插件记录错误详细信息,并为用户返回友好的消息。
1.0.2
- 添加对GetMetricAggregate查询的支持
- 修复Readme中的一些拼写错误
- 修正插件ID以符合标准Grafana插件id约定
1.0.0(未发布)
初始发布。