插件 〉简单的grpc数据源
简单的 gRPC 数据源
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 接口。
简单 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数据源
在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.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
intervalMS
和MaxItems
属性添加到查询定义中
1.0.3
从用户界面隐藏技术 gRPC 错误;后端插件记录错误详情并向用户返回友好的消息。
1.0.2
- 支持 GetMetricAggregate 查询
- 修复 Readme 中的几个拼写错误
- 将插件 ID 修改为标准的 grafana plugin-id 习惯用法
1.0.0 (未发布)
初始版本。