OpenTSB概述
官方文档这样描述:OpenTSDB is a distributed, scalable Time Series Database (TSDB) written on top of HBase;
OpenTSDB是基于HBase的分布式的,可伸缩的时间序列数据库,通过TCollector收集监控对象的各个指标,按时间的序列存入HBase中。通过查询在一段时间内某个指标的参数,经过处理展示给用户,用户可以看到各个时间点的指标值和这段时间的变化,达到监控的目的。
主要用途,可以做监控系统,收集大规模集群的监控数据并存储,监控。
OpenTSDB总体部署OpenTSDB包含时间序列守护进程Time Series Daemon(TSD)。与OpenTSDB交互主要是有一个或多个TSD来实现,每一个TSD都是独立的,没有master,没有shared state,所以可以根据需要运行尽可能多的TSD。每一个TSD使用开源数据库HBase来存储并检索时间序列数据。HBase模式高度优化相似时间序列的快速聚合以减少存储空间。TSD的用户从不直接连接HBase,可以通过简单的远程连接协议,HTTP API或简单的GUI和TSD交流。所有的会话发生在同一个端口。
详细介绍
OpenTSDB主要有两个表:tsdb-uid和tsdb. 前者描述指标(metrics)相关的元数据,后者存储时间序列数据。首先我们来了解一下“指标”(metrics)的概念,简单讲一个指标就是一个需要收集的数据项,但是只有指标是不能全面地描述出一条数据产生的相关背景信息的,比如:如果我们要统计cpu的使用率,我们可以建立一下名为proc.stat.cpu的metrics,如果我们从不同的机器和用户下收集了大量的cpu信息,如果没有对一条信息进行一定地标识,我们是无法区分出哪些数据来自哪台机器的哪个用户,所以我们还需要建立一些“标签”(Tag)来标识一条数据。严格地说,指标和标签之间并没有必然的从属关系,就像两个不同的指标的数据可能都有指示其来自哪台主机的host标签一样,但是有一点是确定的,即:对于一条数据来说,应该至少含有一个指标和一个标签,这样的数据才是有意义的,因此,在OpenTSDB的表设计上,就把“指标”(metrics)和“标签”(Tag)统一放在了tsdb-uid表中存储,格式为:RowKey(自增ID,3字节数组):name:metrics,name:tagk,name:tagv
,
在OpenTSDB中,有一系列的数据点,这些数据点包含以下参数
- metric name,metric描述的是这条数据的指标
- timestamp
- value(64位整数或单精度浮点值)
- 一系列tags(键值对),tags是对这些数据点做一些来源或特性的标识
mysql.bytes_received 1287333217 327810227706 schema=foo host=db1
mysql.bytes_sent 1287333217 6604859181710 schema=foo host=db1
mysql.bytes_received 1287333232 327812421706 schema=foo host=db1
mysql.bytes_sent 1287333232 6604901075387 schema=foo host=db1
mysql.bytes_received 1287333321 340899533915 schema=foo host=db2
mysql.bytes_sent 1287333321 5506469130707 schema=foo host=db2
例如,此例子包含了6个数据点(data point),metric有两种mysql.bytes_received
与mysql.bytes_sent
通过OpenTSDB查询
HTTP API/quaryapi链接
一个request通过开始时间start,结束时间end,以及一个包含查询语句的数组queries来查询。
queries数组里面包含的是subquery,subquery必须包含aggregator和metric,即需要知道你要对什么进行查询,也要知道你要对这些数据点怎么处理是叠加呢还是干啥呢。博主使用的时候还涉及到了filters,filters就是对所取出来数据的过滤嘛,一般是针对tags的分组。
网友评论