Grafana数据可视化

公司的主营业务是给企业客户提供短信群发服务,内部有一个强大的运营监控平台。每日短信业务量巨大,监控平台需要使用时序数据库来对发送的海量短信分地理区域、运营商、接收状态等类别进行统计和监控。以前一直在用InfluxDB,对于时间跨度稍大些的查询(比如一个月的数据)就显得非常慢了。从TDengine开源后,便知道了这个很牛的家伙,于是尝试着使用TDengine。

在搞懂了基本的功能后,便上线了TDengine版的监控系统,但是发现,在grafana中居然不能“group by”,只能通过写where多条语句将多个短信状态数据放到一个仪表盘里,如图:

clipboard(10).png

如果where条件有更多,这样的方法就太笨,并且灵活性太差。

于是,开始仔细研究官方文档,搞懂了“超级表”、“连续查询“等,在这个过程中遇到过不少问题,在这里做一下记录(测试环境,数据是模拟产生的)。

一、安装和运行

测试环境

cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)

 安装很简单:

rpm -ivh tdengine-1.6.3.1-3.x86_64.rpm

 配置都用默认的(未改配置文件)



启动TDengine:

systemctl start taosd

二、建库、建表

在命令行输入“taos”

taos>
以下建库、建表操作都在此提示符下进行

创建数据库

create database jk keep 365 precision ‘us’;
说明:

keep 365表示该库保存365天内的数据,365天之前的数据会被自动清除(因为是时序数据库,所以不能对库中的表进行delete操作);

precision ‘us’表示数据库中的时间戳精度为“微秒”,(默认是毫秒,也可以显示写为precision ‘ms’), 经测试,此处用单引号和双引号都是可以的,但是不能没有引号。

配置文件中已经不支持时间精度的配置,必须在建库的时候指定(测试了很多配置都不生效,Issues后得到的官方回复)

TDengine的设计初衷是用于物联网,设备的信息采集精度到“毫秒”已经足够用,但我司的短信平台会有突发大量数据产生,为了避免可能会导致的数据丢失,将精度设置为“微秒”,经测试,效果很好,测试的模拟数据插入时间戳都用“now”获取,下图左侧为“毫秒”精度,能看到有“0 row(s)”的情况出现,表示有数据未插入, 右侧为“微秒”精度,未见未插入数据。clipboard(13).png

  1. 创建超级表
进入数据库“jk”

taos> use jk;
Database changed.
create table jiankong (ts timestamp, gatewayid binary(6), companyid binary(20), provinceid binary(10), cityid binary(10), value int, timestr binary(30))
tags(type binary(10), subtype binary(10));
短信系统中有3种type,几百种subtype,所以将这些静态信息(或者简单地理解为需要将进行group by的字段设置为tag)

    解释一下超级表:

    STable是同一类型数据采集点的抽象,是同类型采集实例的集合,包含多张数据结构一样的子表。

    每个STable为其子表定义了表结构和一组标签:表结构即表中记录的数据列及其数据类型;标签名和数据类型由STable定义,标签值记录着每个子表的静态信息,用以对子表进行分组过滤。

    子表本质上就是普通的表,由一个时间戳主键和若干个数据列组成,每行记录着具体的数据,数据查询操作与普通表完全相同;但子表与普通表的区别在于每个子表从属于一张超级表,并带有一组由STable定义的标签值。

    针对所有的通过STable创建的子表进行多表聚合查询,支持按照全部的TAG值进行条件过滤(where),并可将结果按照TAGS中的值进行聚合(group by),暂不支持针对binary类型的模糊匹配过滤。

    标签数据(或者叫标签值)直接关联到每个子表,相同的标签值(一个或者多个,最多6个)定位到一个子表(用“写数据时自动建表”的方式,可以将“相同的标签值”对应到多个子表)。

    tag值支持中文,需要将tag类型设置为NCHAR(在其他测试中已经验证过)。
  1. 创建子表(子表就是普通表,表结构完全由超级表定义):

create table jiankong_sub_send using jiankong tags (‘send’, ‘send’);
create table jiankong_sub_delivrd using jiankong tags (‘delivrd’, ‘delivrd’);
create table jiankong_sub_undeliv_db_0108 using jiankong tags (‘undeliv’, ‘DB:0108’);
create table jiankong_sub_undeliv_db_0107 using jiankong tags (‘undeliv’, ‘DB:0107’);
create table jiankong_sub_undeliv_balance using jiankong tags (‘undeliv’, ‘BALANCE’);
create

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值