TSDB
基礎概念
時序數據庫:提供高效存取時序數據和統計分析功能的數據管理系統,廣泛應用於物聯網(IoT)設備監控系統、企業能源管理系統(EMS)、生產安全監控系統和電力檢測系統等行業場景。
TSDB特點
-
高吞吐量寫入
-
數據分級存儲
-
高壓縮率減少存儲空間
-
多維度查詢能力
-
高效聚合能力
OpenTSDB
-
Opentime series database
-
是基於Hbase的分佈式的,可擴展的時間數據庫
-
它是建立在Hbase上的一層數據讀寫服務
How does OpenTSDB work?
OpenTSDB框架
-
Servers:就是服務器了,C就是指Collector,通過Collector收集數據,推送數據;
-
TSD:TSD是對外通信的無狀態的服務,Collector可以通過TSD簡單的RPC協議推送監控數據;
-
TSD還提供了一個webUI頁面供數據查詢;另外也可以通過腳本查詢監控數據,對監控數據做報警;
-
HBase:TSD收到監控數據後,是通過AsyncHbase這個庫來將數據寫入到HBase;AsyncHbase是完全異步、非阻塞、線程安全的Hbase客戶端,使用更少的線程、鎖以及內存,可以提供更高的吞吐量,特別對於大量的寫操作。
名詞解釋
In OpenTSDB, a time series data pointconsists of:
-
A metric name.
-
A UNIX timestamp (seconds or millisecondssince Epoch).
-
A value (64 bit integer orsingle-precision floating point value), a JSON formatted event or ahistogram/digest.
-
A set of tags (key-value pairs) thatdescribe the time series the point belongs to.
{
"metric":"temperature",
"timestamp":1567675709879,
"value":20.5,
"tags":{
"host":"device-1"
}
}
數據查詢
監控場景中,我們可以這樣定義一個監控指標:
OpenTSDB支持的查詢場景爲:
指定指標名稱和時間範圍,給定一個或多個標籤名稱和標籤的值作爲條件,查詢出所有的數據。
以上面那個例子舉例,我們可以查詢:
- sys.cpu.user (host=,cpu=)(1465920000<= timestamp < 1465923600)
查詢凌晨0點到1點之間,所有機器的所有CPU核上的用戶態CPU消耗。
- sys.cpu.user (host=10.101.168.111,cpu=*)(1465920000<= timestamp < 1465923600)
查詢凌晨0點到1點之間,某臺機器的所有CPU核上的用戶態CPU消耗。
- sys.cpu.user (host=10.101.168.111,cpu=0)(1465920000<= timestamp < 1465923600)
查詢凌晨0點到1點之間,某臺機器的第0個CPU核上的用戶態CPU消耗。
存儲優化
rowkey採用metricname + timestamp + tags的組合,唯一確定一個指標值。
核心優化:縮短rowkey
OpenTSDB採用的策略是:爲每個metric、tag key和tagvalue都分配一個UID,UID爲固定長度三個字節。
Rowley的長度大大的縮短了,好處:
-
節省存儲空間
-
提高查詢效率:減少key匹配查找的時間
-
提高傳輸效率:不光節省了從文件系統讀取的帶寬,也節省了數據返回佔用的帶寬,提高了數據寫入和讀取的速度。
-
緩解內存壓力:String存儲的metric name、tagkey或tag value,現在均可以用3個字節的byte array替換,大大節省了內存佔用
其它存儲優化:減少Key-Value數
合併行和列,進一步縮短存儲量。
其它存儲優化:併發寫優化
進行預分桶,避免寫熱點
常用HTTP API
插入數據:/api/put
查詢數據:/api/query
其它HTTP API
具體參考官網:
http://opentsdb.net/docs/build/html/api_http/index.html
OpenTSDB安裝
參考官網:
http://opentsdb.net/docs/build/html/installation.html