OpentTsdb官方文档中文版----存储

  OpenTSDB目前支持Apache HBase作为其主要的存储后端。截止版本2.3,OpenTSDB也可以使用Google云上的Bigtable。选择下面的HBase链接以存储架构或Bigtable以查找用于云中的配置和设置。

HBase Schema

Data Table Schema

  OpenTSDB的所有数据点都保存在一个独立的,默认命名为tsdb的海量表中。它利用了HBase排序和region分布优势。所有的值都存储在列族t中。
  Row Key – Row key是由一个可选的盐值,metric UID,时间戳,以及tagk/v对的UID组成的字节数组:[salt]<metric_uid><timestamp><tagk1><tagv1>[…<tagkN><tagvN>]。默认情况下,UID是3个字节编码。
  自OpenTSDB 2.2版本启用salting特性,第一个字节(或者多个字节)是一个哈希盐值ID以便在多个regions或region servers上更好地分布数据。
  时间戳部分是以4个字节编码以秒为单位的Unix epoch值。每个小时一行,由每行中的时间戳反映。因此每个时间戳将会标准化(归一化)到hour的值,例如:2013-01-01 08:00:00。这是为了避免在单行中填充太多的数据点,因为这会影响region的分布。另外,由于HBase 对Row Key进行排序,同一个指标和时间段的数据,但具有不同标签的数据也将会被组合在一起以便进行高效查询。(不同标签组合在一起,是指同一个Region?)
  没有盐值的示例row key,以16进制表示如下:

00000150E22700000001000001
00000150E22700000001000001000002000004
00000150E22700000001000002
00000150E22700000001000003
00000150E23510000001000001
00000150E23510000001000001000002000004
00000150E23510000001000002
00000150E23510000001000003
00000150E24320000001000001
00000150E24320000001000001000002000004
00000150E24320000001000002
00000150E24320000001000003

  where

00000150E22700000001000001
'---------''-----------''---------''--------'
metric    time    tagk  tagv

  这代表了一个单一的指标,而是3个小时的4个时间序列。请注意一个时间序列由两组标签:

00000150E22700000001000001000002000004
'---------''-----------''---------''--------''---------''---------'
metric    time    tagk  tagv   tagk  tagv

  标签名称(tagk)在存储之前按照字幕顺序排序,所以在rowkey/TSUID中host标签将始终出现在owner之前。
数据点列
  到目前为止,最常见的列数据点。这些是数据发送到TSD进行存储时记录的实际值。
  Column Qualifier – qualifier有2个或4个字节组成,这些字节对行的基准时间的偏移以及确定此值是integer或者decimal(十进制)值的标识进行编码。Qualifier对行基准时间的偏移量以及存储的数据的格式和长度进行编码。
  具有2个字节Qualifier的列是以秒为单位的偏移。Qualifier的前12位(bit)代表一个integer,它是row key中时间戳的增量。例如,如果row key归一化为1292148000 ,在1292148123时刻来了一个数据点,则记录的增加将为123。最后4位(bit)是格式标识。
  具有4个字节Qualifier的列是以毫秒为单位的偏移。Qualifier的前4位(bit)将会置为十六进制的1或F。接下来的22位(bit)编码offset为一个unsigned integer。接下来的2位(bit)保留,最后4位(bit)是格式标识。
  任一列类型的最后4位(bit)描述存储的数据。第一位是一个标识,指示该值是整数还是浮点数。值0标识一个整数,1表示一个浮点数。最后3位(bit)表示数据的长度,偏移量1。值000表示1字节值,而010表示2字节值。长度必须反映1,2,4或8中的值。其他任何内容都表示出现错误。
  例如:0100表示列值是一个8字节的有符号整数。1011表示列值是一个4字节浮点值。因此在1292148123 时刻的Qualifier的数据点将具有整数值4294967296 ,将会有0000011110110100 或十六进制07B4的Qualifier。
  Column Values – 由Qualifier标识指定的1到8个字节编码。
测试示例:

{"metric":"sys.cpu.system","tags":{"host":"web02","dc":"lax"},"timestamp":1525336162539,"value":4}
查询结果:
RowKey{metricUid='1', metricName='sys.cpu.system', ts=1525334400, datetime='2018-05-03 16:00:00', tags=[TagPair{tagKUid='1', tagK='host', tagVUid='3', tagV='web02'}, TagPair{tagKUid='2', tagK='dc', tagVUid='6', tagV='lax'}]}
family: t   qualifier: f6b93ac0  value: 4
计算:
0xf6b93ac0 = 1111 0110 1011 1001 0011 1010 1100 0000(二进制)
前4bit:1111
22bit: 0110 1011 1001 0011 1010 11 = 1762539(十进制)
最后4bit:0000
因此: 时间戳 = 1525334400*1000 + 1762539 = 1525336162539

转载于:https://blog.51cto.com/1196740/2334625

OpenTSDB旨在在查询执行期间有效地组合多个不同的时间序列。这样做的原因是,当用户查看他们的数据时,他们通常会从较高的级别开始询问诸如“数据中心的总吞吐量是多少?”之类的问题。或“按地区划分的当前用功耗是多少?”。在查看这些高级别值之后,可能会出现一个或多个值,因此用户可以深入研究更详细的数据集,例如“我的LAX数据中心主机的吞吐量是多少?”。我们希望能够轻松回答这些高级问题,但仍然可以深入了解更多细节。 但是,如何将多个单独的时间序列合并为一个系列的数据呢?聚合函数提供了将不同时间序列数学方式将不同时间序列合并为一个的方法。过滤器用于按标签对结果进行分组,然后将聚合应用于每个组。聚合类似于SQL的GROUP BY子句,其中用户选择预定义的聚合函数以将多个记录合并为单个结果。但是在TSD中,每个时间戳和组聚合一组记录。 每个聚合器都有两个组件: 功能 - 应用的数学计算,例如对所有值求和,计算平均值或选择最高值。 插值 - 一种处理缺失值的方法,例如当时间序列A的值为T1但时间序列B没有值时。 本文档重点介绍如何在一个组中按上下文使用聚合器,即将多个时间序列合并为一个时。此外,聚合器可用于下采样时间序列(即返回较低分辨率的结果集)。有关更多信息,请参阅下采样。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值