插件 〉simple grpc datasource
simple grpc datasource
Grafana 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 调用中。
使用方法
指标
随着时间序列数据点流的追加而更新新值的变量。
维度
维度是度量的可选标识属性。每个维度都建模为键值对。一个度量可以有零个或多个维度,它们共同唯一地标识该度量。
查询类型
类型 | 描述 |
---|---|
获取指标历史 | 获取历史时间序列值 |
获取指标聚合 | 获取聚合时间序列 |
获取指标值 | 获取最后已知值 |
入门
- 本地启动一个示例 gRPC 服务器
docker run -p 50051:50051 innius/sample-grpc-server
安装 innius-simple-grpc-datasource 插件
启用数据源
- 配置端点
localhost:50051
- 配置端点
配置仪表板
实现您自己的后端 API
此数据源插件要求后端实现 Simple 或 Advanced 接口。
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
在 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 工具从命令行安装 simple grpc datasource
grafana-cli plugins install
插件将安装到您的 grafana 插件目录;默认路径是 /var/lib/grafana/plugins。有关 CLI 工具的更多信息。
2. 配置数据源
通过 Grafana 主菜单访问,新安装的数据源可以在“数据源”部分立即添加。
接下来,单击右上角的“添加数据源”按钮。该数据源将在类型选择框中可用。
要查看已安装数据源的列表,请在主菜单中单击插件项。核心数据源和已安装数据源都将显示。
变更日志
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
intervalMS
和MaxItems
属性添加到查询定义
1.0.3
在用户界面隐藏技术性的 grpc 错误;后端插件记录错误详情并向用户返回友好的消息。
1.0.2
- 添加对 GetMetricAggregate 查询的支持
- 修复 Readme 中的一些拼写错误
- 将插件 ID 更正为标准的 grafana 插件 ID 约定
1.0.0(未发布)
初始发布。