opentsdb

簡介

opentsdb是基于Hbase的時序數據庫[時間序列數據庫]。不具備通用性,主要針對具有時間特性和需求的數據,如監控數據、溫度變化數據等。opentsdb說是數據庫,但并不能稱作為數據庫,他是在Hbase(HBase才是具有存儲功能的)的基礎上,進行數據結構的優化和處理,從而適合存儲具有時間特性的數據,同時提供特定的工具進行查詢等操作。

基礎概念
  1. 時間戳(時間序列),指明時間點
  2. 指標名稱 :數據的作用,是這個數據的抽象概括,指明監控內容,如溫度,濕氣,大小
  3. 標簽 : 對象,指明監控對象 ,如某個城市,某個CPU,某塊區域
  4. 值 : 存儲值

以上組合表明 : 某個對象在某時間點對xxx監控的數據。如 : 福州在2018年11月29日12點30分00秒的溫度是21攝氏度。

這些也都是 opentsdb 中存儲的基礎數據類型,opentsdb使用tsdb表及tsdb-uid表存儲這些數據,在Hase中會具體講解opentsdb如何進行存儲優化這些數據。

總體架構

  1. servers : 不知道干嘛的。好像跟http api 沒關系
  2. TSD : 還是不知道干嘛的 。應該是處理程序
  3. HBase : 存儲數據庫
HBase

Hbase 是Hadoop 的子項目,負責數據存儲。是一種基于列的NoSQL數據庫,在opentsdb中HBase 為其提供了高效的數據存儲。

  1. tsdb-uid表 : opentsdb 將指標、時間戳、標簽名及標簽值使用 3個字節的uid 進行存儲,而tsdb-uid表就是存儲的就是做uid 和 真實值之間的映射關系,使用uid是為了優化HBase 中的Rowkey (行鍵)
  2. tsdb 表 : 用來保存數據,這圖其實是看不懂的。只是知道 Row Key 是用來時存儲指標、時間戳、標簽的uid映射的,Column Family 存儲了是1個小時內的數據(一小時 = 60秒 * 60分鐘 = 3600 秒 )
    image-20181130172939991.png

注: 存儲時間戳的方式有點特別。opentsdb將獲取存儲時間戳的所在小時時間戳進行存儲到RowKey ,小時時間戳與存儲時間戳的差值映射到Column Family 的時間值,表示是在這個小時中的第幾秒,這種方式可以開始查找到數據庫

HTTP API 使用

Opentsdb 的http aip 接口使用的是非規范的RESTful,不同的請求方法有不同的作用

(關于 RESTful規范可查閱 : http://www.ruanyifeng.com/blog/2018/10/restful-api-best-practices.html

API 描述
/api/put 寫入數據
/api/query 查詢數據
/api/suggest 查詢Metric.Tagk,TagV
/api/dump_meta 查詢Tagk下的TagV
/api/query/last 查詢最近一個數據(查不出來)

寫入數據

api 請求方法 描述
/api/put POST 新增數據

支持多條數據或單條數據插入,注多條數據是需要使用[] 表示數組的。

每個參數都是必傳的,因為只有所有參數都具備才能說明該數據的精確信息

注 : 值value 從小位數 換成大位數 ,查詢是會發生錯誤,暫無研究其中規律,猜測跟存儲的基礎類型有關

如 : 12 轉 25595461081

刪除數據

api 請求方法 描述
/api/query DELETE 刪除數據

刪除數據的方法也是使用 /api/query但請求方法是DELETE,也就是說使用 POST 查詢出來的數據,換成 DELETE ,就會被刪除。好奇葩,要想符合RESTful ,接口取 /api/data ,用/api/query。

而且DELETE 是需要開啟配置才能使用,默認下是關的,也就是說你一般你是無法刪除數據的

修改數據

api 請求方法 描述
/api/put POST 修改數據

當時間戳 指標 標簽 都相同時,就會從新增變成修改,注意標簽內的數據要完全相同

查詢數據

api 請求方法 描述
/api/query POST|GET 查詢數據

必傳參數 start 開始時間戳 和 queries 子查詢 , 子查詢應該理解為條件查詢,說明了查詢要求,

使用開始時間參數和子查詢中的指標參數、聚合參數,可說明最基礎的查詢要求

如 :

{"start" : 1346846400,"queries" : [ { "aggregator" : "none", "metric" : "sys.area.temperature4" } ] }

說明 區域溫度在 2012/9/5 20:0:0后的所有數據

子查詢參數解析 (查詢名詞概念解析)

downsample 降采樣 :

dpValue 值過濾 : 就是將值進行比較輸出符合 depValue 表達式的值(就是查詢條件)

Aggregate 聚合

具有一定體系的api

樹 /api/tree

不知道這個樹到底是干嘛用的

api 描述
/api/tree/branch
/api/tree/collisions
/api/tree/notmatched
/api/tree/rule
/api/tree/rules
/api/tree/test
uid /api/uid

Uid 是指標、標簽名、標簽值及時間戳對應的uid,在opentsdb中起到很好的優化作用,但對于其api還不知道其具體使用方法

api 描述
/api/uid/assign
/api/uid/tsmeta
/api/uid/uidmeta
狀態 /api/stats

狀態相關接口,如jvm,線程等

api 描述
/api/stats/jvm jvm 信息
/api/stats/query 不知道是什么
/api/stats/region_clients HBase各個端的信息
/api/stats/threads 線程信息

非常用api

api 描述
/api/dropcaches 清空數據緩存(暫不清楚當中處理方式,不推進使用)
/api/aggregators 查詢聚合函數
/api/config 查詢配置信息
/api/serializers 不知道干啥的
/api/suggest 不知道干啥的
/api/version 當前opentsdb 版本信息
/api/histogram

問題

  1. 值value 從小位數 換成大位數 ,查詢是會發生錯誤,暫無研究其中規律,猜測跟存儲的基礎類型有關
  2. 時間區間的頭尾時間節點數據會被忽略
  3. 使用降采樣時,使用時間間隔會發生數據丟失情況。如時間間隔為一天(1d-avg)。會發生凌晨0到凌晨8點會數據丟失,不記錄到統計中。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容