使用Grafana对接IoTDB数据库
应用场景
IoTDB(物联网数据库)是一体化收集、存储、管理与分析物联网时序数据的软件系统。
IoTDB支持对接Grafana,对接成功后,即可通过Grafana丰富的图形报表展示能力,对IoTDB中的时序数据进行图形化展示,以分析时序数据的变化趋势等信息。

方案架构
IoTDB套件由若干个组件构成,共同形成数据收集、数据写入、数据存储、数据查询、数据可视化、数据分析等一系列功能。
图2展示了使用IoTDB套件的全部组件形成的整体应用架构,IoTDB特指其中的时间序列数据库组件。
- 用户可以通过JDBC/Session将来自设备传感器上采集的时序数据和服务器负载、CPU内存等系统状态数据、消息队列中的时序数据、应用程序的时序数据或者其他数据库中的时序数据导入到本地或者远程的IoTDB中。用户还可以将上述数据直接写成本地(或位于HDFS上)的TsFile文件。
- 用户可以将TsFile文件写入到HDFS上,进而满足Hadoop、Flink等数据处理任务的访问。
- 对于写入到HDFS或者本地的TsFile文件,可以利用TsFile-Hadoop或TsFile-Flink连接器,允许Hadoop或Flink进行数据处理。
- 对于分析的结果,可以写回成TsFile文件。
- IoTDB和TsFile还提供了相应的客户端工具,满足用户以SQL形式、脚本形式和图形形式写入和查看数据的各种需求。
操作流程
- 步骤1:创建MRS集群:创建一个包含有IoTDB组件的MRS集群。
- 步骤2:下载并安装Grafana:下载并安装Grafana。
- 步骤3:使用Grafana查询IoTDB:使用Grafana对接IoTDB并查询表数据。
约束与限制
安装Grafana的Linux节点需要与MRS集群具有相同的“可用区”、“虚拟私有云”和“安全组”。
步骤1:创建MRS集群
- 创建一个包含有IoTDB组件的MRS集群,详情请参见购买自定义集群。
本文以自定义购买的MRS 3.3.0-LTS.1版本的集群为例,集群已开启Kerberos认证。
- 集群购买成功后,在MRS集群的任一节点内,安装集群客户端,具体操作可参考安装并使用集群客户端。
例如客户端安装目录为“/opt/client”。
- 修改IoTDB配置。
- 登录FusionInsight Manager,选择“集群 > 服务 > IoTDB > 配置”,搜索“ssl”,配置以下参数并单击“保存”。
- 将“IoTDB->ConfigNode”的“SSL_ENABLE”参数值修改为“false”。
- 将“IoTDB->IoTDBServer”的“enable_https”和“SSL_ENABLE”的参数值都修改为“false”。
- 使用root用户分别登录所有的IoTDBserver节点,修改“${BIGDATA_HOME}/FusionInsight_IoTDB_8.3.0/1_1_IoTDBServer/etc”目录下的“iotdb-common.properties”文件中的“enable_rest_service”参数值为“true”。
- 在FusionInsight Manager界面,选择“集群 > 服务 > IoTDB”,选择页面右上角的“更多 > 重启服务”,输入当前用户密码并单击“确定”使配置生效。
- 登录FusionInsight Manager,选择“集群 > 服务 > IoTDB > 配置”,搜索“ssl”,配置以下参数并单击“保存”。
- 创建访问IoTDB的用户。
在FusionInsight Manager界面,选择“系统 > 权限 > 用户 > 添加用户”,配置以下参数并单击“确定”创建IoTDB用户。
- 用户名:填写用户名称,例如“iotdbuser”。
- 用户类型:选择“人机”。
- 输入“密码”和“确认新密码”。
- 用户组:单击“添加”,勾选“iotdbgroup”用户组,单击“确定”。
- 主组:主组选择“iotdbgroup”。
- 使用新创建的iotdbuser用户重新登录FusionInsight Manager,修改该用户的初始密码。
步骤2:下载并安装Grafana
- 登录MRS云服务管理控制台,在“现有集群”列表中,单击步骤1:创建MRS集群新创建的集群名称。
记录集群的“可用区”、“虚拟私有云”、“安全组”。
- 在管理控制台首页服务列表中选择“弹性云服务器”,进入ECS列表,单击“购买弹性云服务器”,配置以下参数并单击“立即购买”创建一个Linux弹性云服务器:
- 计费模式:选择“按需计费”。
- 区域:与MRS集群的区域保持一致。
- 可用区:与MRS集群的可用区保持一致。
- 实例:根据实际需求选择对应的规格类型。
- 操作系统:根据实际需求选择操作系统,例如选择公共镜像“Huawei Cloud EulerOS”的“Huawei Cloud EulerOS 2.0 标准版 64位(10GiB)”。
- 网络:“虚拟私有云”与MRS集群保持一致。
- 安全组:与MRS集群的安全组保持一致。
- 公网访问:设置“弹性公网IP”为“现在购买”,并设置“线路”、“公网带宽”和“带宽大小”,勾选“随实例释放”。
- 在https://grafana.com/grafana/download/9.5.2?edition=oss&platform=linux下载Grafana安装包到本地。例如,下载“Version”为“9.5.2”,“Edition”为“OSS”的Linux的Grafana安装包:
图3 下载Grafana安装包
- 在https://archive.apache.org/dist/iotdb/1.0.0/下载IoTDB对应的插件“apache-iotdb-1.0.0-grafana-plugin-bin.zip”到本地。
图4 下载IoTDB插件
- 登录ECS管理控制台,在ECS列表中,单击新创建的ECS所在行的“远程登录”,输入用户名和密码登录ECS。
- 执行以下命令创建用于放置Grafana安装包和IoTDB插件的目录:
cd /opt
mkdir grafana
- 将下载到本地的Grafana安装包和iotdb-grafana插件包上传到“/opt/grafana”目录下。
图5 上传软件包和IoTDB插件
- 执行以下命令创建用于放置Grafana安装包和IoTDB插件的目录:
- 执行以下命令解压Grafana安装包和iotdb-grafana插件:
tar -zxvf grafana-9.5.2.linux-amd64.tar.gz unzip apache-iotdb-1.0.0-grafana-plugin-bin.zip
- 执行以下命令创建插件目录:
cd /opt/grafana/grafana-9.5.2
mkdir -p data/plugins
- 将“/opt/grafana/apache-iotdb-1.0.0-grafana-plugin-bin/iotdb-grafana-plugin”目录及目录下的文件复制到“/opt/grafana/grafana-9.5.2/data/plugins”目录下。
图6 拷贝插件文件
- 配置“/opt/grafana/grafana-9.5.2/conf”目录下的“defaults.ini”文件,修改以下内容:
allow_loading_unsigned_plugins = apache-iotdb-datasource plugins = data/plugins //Grafana的插件目录,即步骤 7创建的目录。
- 切换至Grafana的安装目录,执行以下命令启动Grafana服务:
cd /opt/grafana/ nohup ./bin/grafana-server web > ./grafana.log 2>&1 &
Grafana启动和运行日志可在“grafana.log”中查看。
步骤3:使用Grafana查询IoTDB
准备需要查询的IoTDB数据。
- 以客户端安装用户登录安装客户端的节点,执行以下命令配置环境变量并认证用户:
cd 客户端安装目录
source bigdata_env
kinit 组件业务用户
- 执行以下命令登录IoTDB客户端:
cd IoTDB/iotdb/sbin
./start-cli.sh -h IoTDBserver实例业务IP地址 -p IoTDBserver RPC端口
运行该命令后,根据实际需求指定业务用户名:
- IoTDBServer实例节点IP地址可在Manager界面,选择“集群 > 服务 > IoTDB > 实例”查看。
- IoTDBServer RPC端口可在参数“IOTDB_SERVER_RPC_PORT”中自行配置。默认端口如下:
- 开源端口默认值为:6667
- 定制端口默认值为:22260
端口定制/开源区分:创建LTS版本类型集群时,可以选择“组件端口”为“开源”或是“定制”,选择“开源”使用开源端口,选择“定制”使用定制端口。
- 创建IoTDB数据库并插入数据,例如:
- 创建数据库:
create database root.c1.r1.s1.d1;
- 创建时间序列:
create timeseries root.c1.r1.s1.d1.value WITH DATATYPE=FLOAT, ENCODING=PLAIN; create timeseries root.c1.r1.s1.d1.status WITH DATATYPE=BOOLEAN, ENCODING=PLAIN; create timeseries root.c1.r1.s1.d1.temperature WITH DATATYPE=FLOAT, ENCODING=PLAIN; create timeseries root.c1.r1.s1.d1.humidity WITH DATATYPE=FLOAT, ENCODING=PLAIN;
- 插入数据至时间序列中:
insert into root.c1.r1.s1.d1(value,status,temperature,humidity) values(20,false,15,20); insert into root.c1.r1.s1.d1(value,status,temperature,humidity) values(20,true,17,21); insert into root.c1.r1.s1.d1(value,status,temperature,humidity) values(20,false,19,22); insert into root.c1.r1.s1.d1(value,status,temperature,humidity) values(20,true,20,23); insert into root.c1.r1.s1.d1(value,status,temperature,humidity) values(25,false,20,24); insert into root.c1.r1.s1.d1(value,status,temperature,humidity) values(25,true,19,25); insert into root.c1.r1.s1.d1(value,status,temperature,humidity) values(25,false,18,26); insert into root.c1.r1.s1.d1(value,status,temperature,humidity) values(25,true,16,27); insert into root.c1.r1.s1.d1(value,status,temperature,humidity) values(26,true,16,27);
- 创建数据库:
使用Grafana对接IoTDB。
- 访问Grafana,创建IoTDB数据源。
- 在浏览器中访问Grafana,地址为“http://Grafana所在主机的IP地址:Port”,默认的登录用户名和密码都是admin。
其中,Port为Grafana的运行端口,默认为3000。
- 在左侧导航栏中选择“Home > Data sources > Add data source > Apache IoTDB”,在“Settings”配置以下参数并单击“Save & test”:
- URL:访问IoTDB的地址,格式为“http://IoTDBServer节点IP地址:18080”。IoTDBServer的IP地址可登录FusionInsight Manager,选择“集群 > 服务 > IoTDB > 实例”查看。
- username:在Manager界面创建的用于访问IoTDB的用户名,即步骤 4创建的用户。
- password:在Manager界面创建的用于访问IoTDB的用户密码,即步骤 4创建的用户的密码。
图7 创建IoTDB数据源
- 在浏览器中访问Grafana,地址为“http://Grafana所在主机的IP地址:Port”,默认的登录用户名和密码都是admin。
- 在Grafana页面,添加数据监控。
- 在左侧导航栏选择“Home > Dashboards”,在搜索框右侧选择“New > New Dashboard”,在新建页面单击“Add visualization”进入“Edit panel”页面,并配置以下参数:
- Data source:选择已创建好的Apache IoTDB数据源。
- SQL:选择要查询的SQL类型,例如“Full Customized”,并填写需要查询的时间序列数据。
- 在页面右上角选择要查询的数据的时间范围,例如“Last 6 hours”。
图8 添加监控 - 单击页面右下角的“Query inspector”,再单击“Refresh”,检查监控面板显示的数据。数据无误后单击“Apply”,单击“Save”保存该监控面板。
图9 监控面板数据
- 在左侧导航栏选择“Home > Dashboards”,在搜索框右侧选择“New > New Dashboard”,在新建页面单击“Add visualization”进入“Edit panel”页面,并配置以下参数:
在Grafana查询IoTDB数据。
- 在5.a创建的Dashboards中,配置对应的SQL以实现不同数据的查询功能。
例如,查询过去3个小时内,每隔10分钟某一设备的温度湿度平均值指标(滑动窗口)。
- 选择SQL类型为“Drop-downList”,并配置查询温度的命令:
- TIME-SERIES:设置为“root”,并单击“+”选择指定的时间序列。
- FUNCTION:选择聚合函数“AVG”。
- GROUP BY: “SAMPLING INTERVAL”设置为“30m” ,“SLIDING DTEP”设置为“10m”。表示采样间隔时间是30分钟,滑动步长是10分钟。
- 其他配置保持默认即可。
图10 配置温度的查询命令 - 单击“+ Query”,参考6.a配置查询湿度的命令。
图11 配置湿度的查询命令
- 在页面右上角配置时间范围,设置为“Last 3 hours”;配置显示样式为“Time series”。
- 单击页面右下角的“Query inspector”,再单击“Refresh”,即可图形化展示查询的IoTDB数据:
图12 图形化查询到的IoTDB数据
- 选择SQL类型为“Drop-downList”,并配置查询温度的命令: