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

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

使用开源的TDengine与开源的Grafana部署短信运营监测可视化平台-LMLPHP

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

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

测试环境:

安装很简单:

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

启动TDengine:

在命令行输入“taos”

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

1. 创建数据库

说明:

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

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

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

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

使用开源的TDengine与开源的Grafana部署短信运营监测可视化平台-LMLPHP

2. 创建超级表

进入数据库“jk”

短信系统中有3种type,几百种subtype,所以将这些静态信息(或者简单地理解为需要将进行group by的字段设置为tag)

解释一下超级表:

对subtype进行分组聚合查询:

对type和subtype进行分组聚合查询:

INSERT INTO <tb_name> USING <stb_name> TAGS (<tag1_value>, ...)VALUES (field_value, ...) (field_value, ...) ...;

3. 启动Grafana

在最下方找到“TDengine”

配置图形显示


本文分享自微信公众号 - TDengine(taosdata_news)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

03-14 19:57
查看更多