1. 程式人生 > >OpentTsdb官方文件中文版----儲存

OpentTsdb官方文件中文版----儲存

&nmsp;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