与 Grafana 集成
概述
本文档介绍如何将 TDengine 数据源与开源数据可视化系统 Grafana 集成,以实现数据的可视化和监测报警系统的搭建。通过 TDengine 插件,您可以轻松地将 TDengine 数据表的数据展示在 Grafana 仪表盘上,且无需进行复杂的开发工作。
Grafana 版本要求
当前 TDengine 支持 Grafana 7.5 及以上版本,建议使用最新版本。请根据您的系统环境下载并安装对应版本的 Grafana。
前置条件
要让 Grafana 能正常添加 TDengine 数据源,需要以下几方面的准备工作。
- Grafana 服务已经部署并正常运行。
注意:要确保启动 Grafana 的账号有其安装目录的写权限,否则可能后面无法安装插件。 - TDengine 集群已经部署并正常运行。
- taosAdapter 已经安装并正常运行。具体细节请参考 taosAdapter 的使用手册
记录以下信息:
- TDengine 集群 REST API 地址,如:
http://tdengine.local:6041
。 - TDengine 集群认证信息,可使用用户名及密码。
安装 Grafana Plugin 并配置数据源
- 图形化界面安装
- 安装脚本
- 手动安装
- K8s/Docker 容器
使用 Grafana 最新版本(8.5+),您可以在 Grafana 中浏览和管理插件(对于 7.x 版本,请采用 安装脚本 或 手动安装 方式)。在 Grafana 管理界面中的 Configurations > Plugins 页面直接搜索 TDengine
并按照提示安装。
安装完毕后,按照指示 Create a TDengine data source 添加数据源,输入 TDengine 相关配置:
- Host: TDengine 集群中提供 REST 服务的 IP 地址与端口号,默认
http://localhost:6041
- User:TDengine 用户名。
- Password:TDengine 用户密码。
点击 Save & Test
进行测试,成功会提示:TDengine Data source is working
。
对于使用 Grafana 7.x 版本或使用 Grafana Provisioning 配置的用户,可以在 Grafana 服务器上使用安装脚本自动安装插件即添加数据源 Provisioning 配置文件。
bash -c "$(curl -fsSL \
https://raw.githubusercontent.com/taosdata/grafanaplugin/master/install.sh)" -- \
-a http://localhost:6041 \
-u root \
-p taosdata
安装完毕后,需要重启 Grafana 服务后方可生效。
保存该脚本并执行 ./install.sh --help
可查看详细帮助文档。
使用 grafana-cli
命令行工具 进行插件安装。
grafana-cli plugins install tdengine-datasource
# with sudo
sudo -u grafana grafana-cli plugins install tdengine-datasource
或者从 GitHub 或 Grafana 下载 .zip 文件到本地并解压到 Grafana 插件目录。命令行下载示例如下:
GF_VERSION=3.5.1
# from GitHub
wget https://github.com/taosdata/grafanaplugin/releases/download/v$GF_VERSION/tdengine-datasource-$GF_VERSION.zip
# from Grafana
wget -O tdengine-datasource-$GF_VERSION.zip https://grafana.com/api/plugins/tdengine-datasource/versions/$GF_VERSION/download
以 CentOS 7.2 操作系统为例,将插件包解压到 /var/lib/grafana/plugins 目录下,重新启动 grafana 即可。
sudo unzip tdengine-datasource-$GF_VERSION.zip -d /var/lib/grafana/plugins/
如果 Grafana 在 Docker 环境下运行,可以使用如下的环境变量设置自动安装 TDengine 数据源插件:
GF_INSTALL_PLUGINS=tdengine-datasource
之后,用户可以直接通过 http://localhost:3000 的网址,登录 Grafana 服务器(用户名/密码:admin/admin),通过左侧 Configuration -> Data Sources
可以添加数据源,
点击 Add data source
可进入新增数据源页面,在查询框中输入 TDengine, 然后点击 select
选择添加后会进入数据源配置页面,按照默认提示修改相应配置:
- Host: TDengine 集群中提供 REST 服务的 IP 地址与端口号,默认
http://localhost:6041
- User:TDengine 用户名。
- Password:TDengine 用户密码。
点击 Save & Test
进行测试,成功会提示:TDengine Data source is working
参考 Grafana 容器化安装说明。使用如下命令启动一个容器,并自动安装 TDengine 插件:
docker run -d \
-p 3000:3000 \
--name=grafana \
-e "GF_INSTALL_PLUGINS=tdengine-datasource" \
grafana/grafana
使用 docker-compose,配置 Grafana Provisioning 自动化配置,体验 TDengine + Grafana 组合的零配置启动:
-
保存该文件为
tdengine.yml
。apiVersion: 1
datasources:
- name: TDengine
type: tdengine-datasource
orgId: 1
url: "$TDENGINE_API"
isDefault: true
secureJsonData:
url: "$TDENGINE_URL"
basicAuth: "$TDENGINE_BASIC_AUTH"
token: "$TDENGINE_CLOUD_TOKEN"
version: 1
editable: true -
保存该文件为
docker-compose.yml
。version: "3.7"
services:
tdengine:
image: tdengine/tdengine:3.3.0.0
environment:
TAOS_FQDN: tdengine
volumes:
- tdengine-data:/var/lib/taos/
grafana:
image: grafana/grafana:9.3.6
volumes:
- ./tdengine.yml/:/etc/grafana/provisioning/tdengine.yml
- grafana-data:/var/lib/grafana
environment:
# install tdengine plugin at start
GF_INSTALL_PLUGINS: "tdengine-datasource"
TDENGINE_URL: "http://tdengine:6041"
#printf "$TDENGINE_USER:$TDENGINE_PASSWORD" | base64
TDENGINE_BASIC_AUTH: "cm9vdDp0YmFzZTEyNQ=="
ports:
- 3000:3000
volumes:
grafana-data:
tdengine-data: -
使用 docker-compose 命令启动 TDengine + Grafana :
docker-compose up -d
。
打开 Grafana http://localhost:3000,现在可以添加 Dashboard 了。
下文介绍中,都以 Grafana v11.0.0 版本为例,其他版本功能可能有差异,请参考 Grafana 官网。
Dashboard 使用指南
本节内容按如下方式组织:
- 介绍基础知识,包括 Grafana 的内置变量和自定义变量,TDengine 对与时序查询的特色语法支持。
- 介绍如何使用 TDengine 数据源在 Grafana 中创建 Dashboard,然后给出使用时序查询的特色语法和如何分组展示数据。
- 由于配置的 Dashbord 在页面显示时会定时查询 TDengine 来刷新显示,如果 SQL 编写不当会导致严重的性能问题,我们给出了性能优化建议。
- 最后我们以 TDengine 监控面板 TDinsight 为例介绍了如何导入我们提供的 DashBoard。
Grafana 内置变量和自定义变量
Grafana 中的 Variable(变量)功能非常强大,可以在 Dashboard 的查询、面板 标题、标签等地方使用,用来创建更加动态和交互式的 Dashbord,提高用户体验和效率。
变量的主要作用和特点包括:
-
动态数据查询:变量可以用于查询语句中,使得用户可以通过选择不同的变量值来动态更改查询条件,从而查看不同的数据视图。这对于需要根据用户输入动态展示数据的场景非常有用。
-
提高可重用性:通过定义变量,可以在多个地方重用相同的配置或查询逻辑,而不需要重复编写相同的代码。这使得 Dashboard 的维护和更新变得更加简单高效。
-
灵活的配置选项:变量提供了多种配置选项,如预定义的静态值列表、从数据源动态查询值、正则表达式过滤等,使得变量的应用更加灵活和强大。
Grafana 提供了内置变量和自定义变量,它们都可以可以在编写 SQL 时引用,引用的方式是 $variableName
,variableName
是变量的名字,其他引用方式请参考 引用方式。
内置变量
Grafana 内置了 from
、to
和 interval
等变量,都取自于 Grafana 插件面板。其含义如下:
from
查询范围的起始时间to
查询范围的结束时间interval
窗口切分间隔
对于每个查询都建议设置查询范围的起始时间和结束时间,可以有效的减少 TDengine 服务端执行查询扫描的数据量。interval
是窗口切分的大小,在 Grafana 11 版本中,其大小为时间 间隔和返回点数计算而得。
除了上述三个常用变量,Grafana 还提供了如 __timezone
, __org
, __user
等变量,详情请参考 内置变量。
自定义变量
我们可以在 Dashbord 中增加自定义变量。自定义变量和内置变量的使用方式没有区别,都是在 SQL 中用 $variableName
进行引用。
自定义变量支持多种类型,常见的类型包括 Query
(查询)、Constant
(常量)、Interval
(间隔)、Data source
(数据源)等。
自定义变量可以引用其他自定义变量,比如一个变量表示区域,另一个变量可以引用区域的值,来查询这个区域的设备。
添加查询类型变量
在 Dashbord 的配置中,选择 【Variables】,然后点击 【New variable】:
- 在 “Name” 字段中,输入你的变量名,此处我们设置变量名为
selected_groups
。 - 在 【Select variable type】下拉菜单中,选择 “Query”(查询)。
根据选择的变量类型,配置相应的选项。例如,如果选择了 “Query” 类型,你需要指定数据源和用于获取变量值的查询语句。此处我们还以智能电表为例,设置查询类型,选择数据源后,配置 SQL 为
select distinct(groupid) from power.meters where groupid < 3 and ts > $from and ts < $to;
- 点击底部的【Run Query】后,可以在 “Preview of values”(值预览)部分,查看到根据你的配置生成的变量值。
- 还有其他配置不再赘述,完成配置后,点击页面底部的【Apply】(应用)按钮,然后点击右上角的【Save dashboard】保存。
完成以上步骤后,我们就成功在 Dashboard 中添加了一个新的自定义变量 $selected_groups
。我们可以后面在 Dashboard 的查询中通过 $selected_groups
的方式引用这个变量。
我们还可以再新增自定义变量来引用这个 selected_groups
变量,比如我们新增一个名为 tbname_max_current
的查询变量,其 SQL 为 select tbname from power.meters where groupid = $selected_groups and ts > $from and ts < $to;
添加间隔类型变量
我们可以自定义时间窗口间隔,可以更加贴合业务需求。
- 在 “Name” 字段中,输入变量名为
interval
。 - 在 【Select variable type】下拉菜单中,选择 “Interval”(间隔)。
- 在 【Interval options】选项中输入
1s,2s,5s,10s,15s,30s,1m
。 - 还有其他配置不再赘述,完成配置后,点击页面底部的【Apply】(应用)按钮,然后点击右上角的【Save dashboard】保存。
完成以上步骤后,我们就成功在 Dashboard 中添加了一个新的自定义变量 $interval
。我们可以后面在 Dashboard 的查询中通过 $interval
的方式引用这个变量。
自定义变量和 Grafana 内置变量重名时,会优先引用自定义变量。
TDengine 时序查询支持
TDengine 在支持标准 SQL 的基础之上,还提供了一系列满足时序业务场景需求的特色查询语法,这些语法能够为时序场景的应用的开发带来极大的便利。
partition by
子句可以按一定的维度对数据进行切分,然后在切分出的数据空间内再进行一系列的计算。绝大多数情况可以替代group by
。interval
子句用于产生相等时间周期的窗口fill
语句指定某一窗口区间数据缺失的情况下的填充模式时间戳伪列
如果需要在结果中输出聚合结果所对应的时间窗口信息,需要在 SELECT 子句中使用时间戳相关的伪列: 时间窗口起始时间 (_wstart), 时间窗口结束时间 (_wend) 等