原文:http://www.jianshu.com/p/0bafd0168647ios
官方文檔這樣描述:OpenTSDB is a distributed, scalable Time Series Database (TSDB) written on top of HBase;web
翻譯過來就是,基於Hbase的分佈式的,可伸縮的時間序列數據庫。數據庫
主要用途,就是作監控系統;譬如收集大規模集羣(包括網絡設備、操做系統、應用程序)的監控數據並進行存儲,查詢。安全
存儲到OpenTSDB的數據,是以metric爲單位的,metric就是1個監控項,譬如服務器的話,會有CPU使用率、內存使用率這些metric;服務器
OpenTSDB使用HBase做爲存儲,因爲有良好的設計,所以對metric的數據存儲支持到秒級別;網絡
OpenTSDB支持數據永久存儲,即保存的數據不會主動刪除;而且原始數據會一直保存(有些監控系統會將較久以前的數據聚合以後保存)架構
介紹這些概念的時候,咱們先看一個實際的場景。異步
譬如假設咱們採集1個服務器(hostname=qatest)的CPU使用率,發現該服務器在21:00的時候,CPU使用率達到99%分佈式
下面結合例子看看OpenTSDB存儲的一些核心概念性能
1)Metric:即平時咱們所說的監控項。譬如上面的CPU使用率
2)Tags:就是一些標籤,在OpenTSDB裏面,Tags由tagk和tagv組成,即tagk=takv。標籤是用來描述Metric的,譬如上面爲了標記是服務器A的CpuUsage,tags可爲hostname=qatest
3)Value:一個Value表示一個metric的實際數值,譬如上面的99%
4)Timestamp:即時間戳,用來描述Value是何時的;譬如上面的21:00
5)Data Point:即某個Metric在某個時間點的數值。
Data Point包括如下部分:Metric、Tags、Value、Timestamp
上面描述的服務器在21:00時候的cpu使用率,就是1個DataPoint
保存到OpenTSDB的,就是無數個DataPoint。
下面講一下,OpenTSDB是如何保存DataPoint的。
仍是以例子來講明,譬如保存這樣的1個DataPoint:
metric:proc.loadavg.1m
timestamp:1234567890
value:0.42
tags:host=web42,pool=static
那麼,若是是通常的設計,會怎麼作呢,可能就是:RowKey=metric|timestamp|value|host=web42|pool=static,Column=v,Value=0.42
這是最簡單的設計,那接下來看看,OpenTSDB是怎麼作的吧。
OpenTSDB使用HBase存儲,核心的存儲,是有兩張表,tsdb和tsdb-uid
tsdb是保存數據的,看看該表的設計
1)RowKey的設計
RowKey其實和上面的metric|timestamp|value|host=web42|pool=static相似;
可是區別是,OpenTSDB爲了節省存儲空間,將每一個部分都作了映射。
在OpenTSDB裏面有這樣的映射,metric-->3字節整數、tagk-->3字節整數、tagv-->3字節整數
上圖的映射關係爲,proc.loadavg.1m-->05二、host-->00一、web42-->02八、pool-->04七、static-->001
2)column的設計
爲了方便後期更進一步的節省空間。OpenTSDB將一個小時的數據,保存在一行裏面。
因此上面的timestamp1234567890,會先模一下小時,得出1234566000,而後獲得的餘數爲1890,表示的是它是在這個小時裏面的第1890秒;
而後將1890做爲column name,而0.42即爲column value
這裏其實保存的就是一些metric,tagk,tagv的一些映射關係。
Servers:就是服務器了,上面的C就是指Collector,能夠理解爲OpenTSDB的agent,經過Collector收集數據,推送數據;
TSD:TSD是對外通訊的無狀態的服務器,Collector能夠經過TSD簡單的RPC協議推送監控數據;另外TSD還提供了一個web UI頁面供數據查詢;另外也能夠經過腳本查詢監控數據,對監控數據作報警
HBase:TSD收到監控數據後,是經過AsyncHbase這個庫來將數據寫入到HBase;AsyncHbase是徹底異步、非阻塞、線程安全的Hbase客戶端,使用更少的線程、鎖以及內存,能夠提供更高的吞吐量,特別對於大量的寫操做。
OpenTSDB是以HBase做爲存儲的,那麼,首先你得部署個Hbase。就好像對想要娶老婆生小孩的屌絲來講,首先,你得有個女友。
接下來OpenTSDB的安裝和部署,這個官方文檔已經說得很詳細,也是比較簡單的,幾乎是一鍵部署。
OpenTSDB已經自帶了收集監控數據的一些腳本。主要由2個部分組成,TCollector和一些具體的collectors。
TCollector是1個客戶端進程,它主要是收集具體的collectors收集到的監控數據,而後負責將數據推送到TSDB;
TCollector會處理和TSD的鏈接和協議處理,具體的collectors負責收集數據便可
目前OpenTSDB提供了一些已實現的collectors
在一個服務器上部署1個TCollector以後,它會把這些collectors啓動起來,collectors收集到監控數據以後,輸出到stdout,TCollector接收後推送到OpenTSDB
TSD除了接收數據以外,還提供了一個web頁面供數據查詢。不過頁面的樣式確實有點難以接受;
目前OpenTSDB只是收集數據,並無作報警。
或者說,OpenTSDB自己就是一個基於HBase的數據庫,TCollector是數據收集器,報警不屬於它的範疇。報警的話,能夠接入到Nagios。
這篇文章只是簡單介紹一下OpenTSDB是什麼東西,簡單地談了一下存儲和架構,以及應用起來是如何的。接下來還有不少東西能夠繼續寫。
譬如:
1)關於RowKey設計的更多東西(數據壓縮、查詢性能、數據均衡性、設計方案的缺點、metric和tagk長度)
2)OpenTSDB的更多特性(Aggregation、Interpolation 、Downsampling、Metadata、Tree)
可能接下來的文章再繼續了。
做者:沉默劍士連接:http://www.jianshu.com/p/0bafd0168647來源:簡書著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。