插件 〉kdb+
kdb+
Grafana KDB+ 后端数据源
什么是 KDB+ 后端数据源?
AquaQ 的 kdb+ 后端数据源是一个插件,增加了从 Grafana 查询 kdb+ 的能力。它支持 Grafana 的许多核心功能,包括静态/查询变量、告警以及对 Grafana 查询 API 的支持。
目录
用户入门
添加数据源
- 导航到 设置 -> 数据源。
- 点击 添加数据源 并导航到 kdb-backend-datasource。
- 输入 KDB+ 实例的 URL 和端口,以及用户名和密码(如果需要 - 如果未提供,这些将默认为 "")。
- 输入超时值(毫秒),默认为 1000 毫秒。
- 点击 保存并测试。
- 底部应显示一条提示:kdb+ 连接成功。
创建 Dashboard
- 从左侧工具栏导航到 创建 - Dashboard。
- 创建一个空面板。新的 Dashboard 会默认包含一个空面板。可以使用右上角任务栏的 添加面板 按钮添加新面板。
- 在 KDB+ 查询 字段下输入有效的 KDB+ 查询,例如
([] time:reverse .z.p-0D00:05*til 20;val:til 20)
。 - 可选地,可以在 超时(毫秒)输入字段中定义自定义超时。默认值为
10 000
毫秒。 - 点击右上角面板可视化上方的 刷新 Dashboard 按钮。数据应显示在可视化中。
- 点击页面左上角的 返回 (Esc) 按钮退出查询编辑器并返回 Dashboard。
- 可以使用右上角的 保存 Dashboard 按钮保存 Dashboard。如果需要,可以为 Dashboard 设置自动刷新速率,点击右上角 刷新 Dashboard 按钮旁边的下拉菜单并设置您所需的刷新速率。可以在 Dashboard 设置 中添加自定义刷新速率。
变量
此插件可以处理静态和查询变量。它还允许用户链式查询。
静态和多值变量
可以使用 Grafana 的标准格式(即逗号分隔列表)在 自定义 变量类型下输入这些变量。然后,静态变量可以在查询中以如下形式使用
${variable_name}
如果使用可以同时选择多个值的多值变量,请参考 Grafana 关于变量格式化的文档。我们建议以 csv 格式注入多值变量,然后在 kdb+ 中使用 sv
操作符将其分割并转换为所需类型的列表,例如在以下 select
语句中
select from trade where exchange in `$\",\" vs "${multi_variable_name:csv}"
时间变量
时间变量(例如 ${__from}
, ${__to}
等)由 Grafana 注入,表示自 Unix epoch 以来的毫秒数(例如 1594671549254
对应于 Jul 13 2020 20:19:09
)。要在 kdb+ 中使用时间变量,我们需要对其进行处理,使其符合 kdb+ 接受的格式。
可以通过将毫秒除以 1000 转换为秒,然后使用 .Q.f
转换为十进制字符串,再 tok
为时间戳来实现
("P"$.Q.f[3] ${__from}%1000)
或者,可以将 Grafana 注入的时间变量格式化为 ISO-8601
格式,并在 kdb+ 中将其 tok
为 datetime
数据类型
("Z"$"${__from:date}")
从 kdb+ 4.0 版本开始,ISO-8601
格式的日期时间不能直接 tok
为时间戳。
如果引用的 timestamp
只需要精确到秒,那么可以直接注入 unix 时间并 tok
为时间戳
("P"$"${__from:date:seconds}")
查询和链式变量
可以在 Query
变量类型下输入这些变量。这些变量在面板查询运行之前对目标数据源运行一个查询,Grafana 从这个元查询构建一个变量/变量列表。输入查询必须返回一个 flat table
(参见 限制),其第一列将用于生成变量。在旧版本的 Grafana 中,输出可能需要是 strings
或 symbols
(在新版本的 Grafana 中,也支持数字数据类型)。
有一个可选的 Timeout
字段,如果未定义,将默认为 10 000
毫秒。变量更新后,按下 Update
按钮,页面底部将显示返回变量的预览。
查询变量也可以在其运行的查询中包含其他变量(有时称为 Chained
变量)。其格式与静态和多值变量相同(${variable_name}
)
安全性
默认情况下,用户名和密码都传递空字符串 ""
,可以在数据源设置中覆盖。还支持 TLS - 通过 TLS 客户端认证
开关启用。在提供的字段中输入客户端 TLS 密钥和客户端 TLS 证书。要跳过服务器对 TLS 证书的验证,请使用 跳过 TLS 验证
开关。如果启用了 使用 CA 证书
开关,则可以使用自定义证书颁发机构证书 - 如果 kdb+ 数据源运行的是自定义签名的证书,则使用此选项。
kdb+ 查询
查询以包含两个元素的同步查询形式(将由 .z.pg
评估)传递给 kdb+,形式如下
({[x] value x[`Query;`Query]};**QUERYDATA**)
**QUERYDATA** 是一个字典(kdb+ 类型 99
),其嵌套结构如下
键 | 值 (kdb+ 类型 ) |
---|---|
AQUAQ_KDB_BACKEND_GRAF_DATASOURCE | 插件版本 (float atom ) |
时间 | 查询时间戳 (timestamp atom ) |
OrgID | Grafana 组织 ID (long atom ) |
数据源 | 数据源信息对象 (dictionary ) |
用户 | 用户信息对象 (dictionary ) |
查询 | 查询信息对象 (dictionary ) |
超时 | Grafana 侧超时持续时间(毫秒) (long atom ) |
数据源信息对象
键 | 值 (kdb+ 类型 ) |
---|---|
ID | Grafana 实例分配的数据源 ID (long atom ) |
名称 | 用户指定的数据源名称 (char list ) |
UID | Grafana 实例分配的数据源 UID (char list ) |
已更新 | 数据源最后更新的时间戳 (timestamp atom ) |
URL | 数据源 URL (?) (char list ) |
用户 | 创建数据源的用户 UserName (char list ) |
用户信息对象
键 | 值 (kdb+ 类型 ) |
---|---|
UserName | 用户的 Grafana 名称(非登录用户名) (char list ) |
用户电子邮件 | 用户的 Grafana 电子邮件地址 (char list ) |
用户登录名 | 用户的 Grafana 登录用户名 (char list ) |
用户角色 | 用户的 Grafana 角色 (char list ) |
查询信息对象
注意:RefID、MaxDataPoints、Interval 和 TimeRange 键在 HEALTHCHECK
类型的查询中不存在。
键 | 值 (kdb+ 类型 ) |
---|---|
RefID | 待评估的查询字符串 (char list ) |
查询 | 将被求值的查询字符串 (char list ) |
查询类型 | 查询类型 (HEALTHCHECK 或 QUERY ) (symbol atom ) |
最大数据点数 | 面板定义的最大数据点数(当前未使用) (long atom ) |
间隔 | 面板定义的间隔(当前未使用) (long atom ) |
时间范围 | __from 和 __to 查询时间范围 (包含 2 个时间戳的列表) |
告警
在创建告警之前,请在 告警 -> 联系点 下创建一个联系点。然后在 告警 -> 通知策略 下创建一个通知策略。
要在面板上创建告警,请导航到相关的 Dashboard,然后从此处选择编辑选项,导航到 告警 菜单。填写相关的 规则名称、类型 和 文件夹。输入您的 kdb+ 查询并运行查询。您将能够使用表达式来查询此查询中的数据。接下来设置告警条件,确保选择表达式并设置评估持续时间。最后在 告警详情 中设置自定义标签。
时区
kdb+ 以时区无关的形式存储其时间戳和日期时间;Grafana 将其解释为没有时区偏移(UTC),因此我们建议用户将使用此插件的任何 Dashboard 的时区设置为 UTC。这可以在 Dashboard 设置 - 时间选项 - 时区 中完成。
限制
所有查询必须返回 flat table(kdb+ 数据类型 98)或 grouped table(kdb+ 数据类型 99,其中字典的 key 和 value 都是同构表)。如果在 grouped tables 的分组旁边使用聚合,则任何聚合列将被投影到与数据框其余部分相同的长度。
Grafana 中的 Infinity 和 null 与 kdb+ 中的数据类型不同。显示的是底层字符串值表示,而不是 kdb+ 中持有的 null 或 infinity 值。建议 Grafana 用户根据其数据模式、数据字典来处理 null 表示。
列
列必须是单一的、恒定的数据类型 - 不能有混合列表或嵌套列表作为列(字符串列和分组条目除外,参见下面的 分组表处理)。
分组表处理
如果评估的查询向 Grafana 返回一个 grouped table,则 Grafana 将每个分组作为单独的帧返回。每个帧的名称是每个分组键的字符串表示(如果存在多个键,则用分号分隔)。
Null 和 Infinity
下表显示了每种数据类型如何处理 null、infinity 和 zero
字段 | Short | Int | Long | Chars | Symbols | 时间戳 | 时间 | 日期时间 | 时间跨度 | 月 | 日期 | 分钟 | 秒 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
零 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Null | -32768 | -2147483648 | -9223372036854776000 | -2147483648 | -2147483648 | -2147483648 | -2147483648 | -2147483648 | -2147483648 | -2147483648 | -2147483648 | -2147483648 | -2147483648 |
负无穷大 | -32767 | -2147483647 | -9223372036854776000 | -2147483647 | -2147483647 | -2147483647 | -2147483647 | -2147483647 | -2147483647 | -2147483647 | -2147483647 | -2147483647 | -2147483647 |
正无穷大 | 32767 | 2147483647 | 9223372036854776000 | 2147483647 | 2147483647 | 2147483647 | 2147483647 | 2147483647 | 2147483647 | 2147483647 | 2147483647 | 2147483647 | 2147483647 |
在 Grafana Cloud 上安装 kdb+
在 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 工具从命令行安装 kdb+
grafana-cli plugins install
插件将安装到您的 grafana plugins 目录;默认是 /var/lib/grafana/plugins。关于 cli 工具的更多信息。
2. 配置数据源
从 Grafana 主菜单访问,新安装的数据源可以在 数据源 部分立即添加。
接下来,点击右上角的 添加数据源 按钮。数据源将在 类型 选择框中可用。
要查看已安装的数据源列表,请点击主菜单中的 插件 项。核心数据源和已安装的数据源都将显示。
更新日志
1.0.0 (未发布)
初始发布。