插件 〉QuestDB


开发者

QuestDB

订阅以接收不定期产品新闻和更新



数据源
商业版

QuestDB

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

Grafana 的 QuestDB 数据源

Sql builder screenshot

QuestDB 数据源插件允许您在 Grafana 中查询和可视化 QuestDB 数据。

安装

有关如何在 Grafana Cloud 或本地安装插件的详细说明,请查看插件安装文档

阅读 QuestDB 网站上的指南:第三方工具 - Grafana

配置

用于数据源的 QuestDB 用户

设置一个具有只读权限的 QuestDB 用户账号,并授予对您要查询的数据库和表的访问权限。请注意,Grafana 不会验证查询是否安全。查询可以包含任何 SQL 语句。例如,诸如 UPDATE users SET name='blahblah'DROP TABLE importantTable; 之类的语句都将被执行。

配置只读用户,请按照以下步骤操作:

  • 开源版本
    1. 在 server.conf 文件中设置以下属性:
      • pg.readonly.user.enabled=true
      • pg.readonly.user=myuser
      • pg.readonly.password=secret
    2. 重启 QuestDB 实例。
  • 企业版
    1. 创建用户
      • CREATE USER grafana_readonly;
    2. 授予对选定表/表列的读取权限;
      • GRANT SELECT ON table1, ... TO grafana_readonly;

手动配置

在您的 Grafana 实例上安装插件后,按照这些说明添加新的 QuestDB 数据源,并输入配置选项。

通过配置文件

可以使用 Grafana 的 Provisioning 系统通过配置文件配置数据源。要了解其工作原理,包括可以为此数据源设置的所有设置,请参阅Provisioning Grafana 数据源

请注意,插件必须事先安装。如果您使用 Docker 并希望自动化安装,可以设置GF_INSTALL_PLUGINS 环境变量

docker run -p 3000:3000 -e GF_INSTALL_PLUGINS=questdb-questdb-datasource grafana/grafana-oss

这是使用 QuestDB 开源版默认配置的此数据源的示例 Provisioning 文件。

apiVersion: 1
datasources:
  - name: QuestDB
    type: questdb-questdb-datasource
    jsonData:
      server: localhost
      port: 8812
      username: admin
      tlsMode: disable
      # timeout: <seconds>
      # queryTimeout: <seconds>
      maxOpenConnections: 100
      maxIdleConnections: 100
      maxConnectionLifetime: 14400
    secureJsonData:
      password: quest
      # tlsCACert: <string>

如果您使用的是 QuestDB 企业版并已启用 TLS,则需要将上面示例中的 tlsMode: require 修改为其他值。

构建查询

查询编辑器允许您查询 QuestDB 以返回时间序列或表格数据。查询可以包含宏,从而简化语法并支持动态部分。

时间序列

timestamp 字段类型添加到查询后,可以选择时间序列可视化选项。此字段将用作时间戳。您可以使用可视化选项选择时间序列可视化。Grafana 将没有明确时区的时间戳行解释为 UTC。除了 time 以外的任何列都被视为值列。

多线时间序列

要创建多线时间序列,查询必须按照以下顺序返回至少 3 个字段:

  • 字段 1:别名为 timetimestamp 字段
  • 字段 2:用于分组的值
  • 字段 3+:指标值

例如:

SELECT pickup_datetime AS time, cab_type, avg(fare_amount) AS avg_fare_amount
FROM trips
GROUP BY cab_type, pickup_datetime
ORDER BY pickup_datetime

表格

对于任何有效的 QuestDB 查询,表格可视化始终可用。

为了简化语法和支持动态部分(如日期范围过滤器),查询可以包含宏。

这是一个包含宏的查询示例,该宏将使用 Grafana 的时间过滤器:

SELECT desginated_timestamp, data_stuff
FROM test_data
WHERE $__timeFilter(desginated_timestamp)
描述输出示例
$__timeFilter(columnName)根据面板的时间范围(以秒为单位),使用提供的列进行数据过滤的条件表达式替代timestamp >= cast(1706263425598000 as timestamp) AND timestamp <= cast(1706285057560000 as timestamp)
$__fromTime用转换成时间戳的面板时间范围的起始时间替代cast(1706263425598000 as timestamp)
$__toTime用转换成时间戳的面板时间范围的结束时间替代cast(1706285057560000 as timestamp)
$__sampleByInterval用间隔值后跟单位(d, h, s 或 T(毫秒))替代。示例:1d, 5h, 20s, 1T。20s (20 秒) , 1T (1 毫秒)
$__conditionalAll(condition, $templateVar)当第二个参数中的模板变量未选择所有值时,用第一个参数替代。当模板变量选择所有值时,用 1=1 替代。condition1=1

插件还支持使用大括号 {} 的记法。当参数内部需要查询时,使用此记法。

此外,Grafana 具有内置的 $__interval,用于计算以秒或毫秒为单位的间隔。由于时间单位不兼容(1ms 与 QuestDB 期望的 1T),不应将其与 SAMPLE BY 一起使用。请改用 $__sampleByInterval

模板和变量

要添加新的 QuestDB 查询变量,请参阅添加查询变量

创建变量后,您可以使用变量语法在 QuestDB 查询中使用它。有关变量的更多信息,请参阅模板和变量

即席过滤器

即席过滤器允许您添加键/值过滤器,这些过滤器会自动添加到使用指定数据源的所有指标查询中,而无需在查询中显式使用。

默认情况下,即席过滤器将填充所有表和列。如果您在数据源设置中定义了默认数据库,则将使用该数据库中的所有表来填充过滤器。由于这可能会很慢/昂贵,您可以引入第二个变量来限制即席过滤器。它应该是一个名为 questdb_adhoc_queryconstant 类型变量,可以包含:一个逗号分隔的表列表,仅显示一个或多个表的列。

有关即席过滤器的更多信息,请查看Grafana 文档

使用查询作为即席过滤器

常量 questdb_adhoc_query 也允许使用任何有效的 QuestDB 查询。查询结果将用于填充您的即席过滤器的可选项。您可以选择隐藏此变量,因为它不再具有其他用途。

了解更多

在 Grafana Cloud 上安装 QuestDB

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

更新日志

@questdb/grafana-questdb-datasource 项目的所有重要变更都将在此文件中记录。

格式基于Keep a Changelog,本项目遵循语义化版本规范

变更类型

  • Added:新增功能。
  • Changed:现有功能变更。
  • Deprecated:即将移除的功能。
  • Removed:已移除的功能。
  • Fixed:任何错误修复。
  • Security:漏洞相关。

0.1.4

变更

  • 在生成的 SQL 中将变量和列名用引号括起来 #107
  • 添加 VARCHAR 类型 #107
  • 更新 docker-compose yaml 以使用 QuestDB 8.0.3 #107

0.1.3

变更

  • 移除已废弃的 vectorator 方法并使用数组格式进行操作。 #97
  • 更新必要的版权 + 添加 NOTICE 以指示衍生作品 #97
  • 尽可能淘汰 @grafana/experimental,转而使用 @grafana/plugin-ui

0.1.0

新增

  • 初始 Beta 版本发布。