Opentsdb簡介(一)

原文:http://www.jianshu.com/p/0bafd0168647ios


一、OpenTSDB介紹

1.一、OpenTSDB是什麼?主要用途是什麼?

官方文檔這樣描述:OpenTSDB is a distributed, scalable Time Series Database (TSDB) written on top of HBase;web

翻譯過來就是,基於Hbase的分佈式的,可伸縮的時間序列數據庫。數據庫

主要用途,就是作監控系統;譬如收集大規模集羣(包括網絡設備、操做系統、應用程序)的監控數據並進行存儲,查詢。安全

1.二、介紹continue

存儲到OpenTSDB的數據,是以metric爲單位的,metric就是1個監控項,譬如服務器的話,會有CPU使用率、內存使用率這些metric;服務器

OpenTSDB使用HBase做爲存儲,因爲有良好的設計,所以對metric的數據存儲支持到秒級別;網絡

OpenTSDB支持數據永久存儲,即保存的數據不會主動刪除;而且原始數據會一直保存(有些監控系統會將較久以前的數據聚合以後保存)架構

二、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的。

三、OpenTSDB的設計

仍是以例子來講明,譬如保存這樣的1個DataPoint:

metric:proc.loadavg.1m

timestamp:1234567890

value:0.42

tags:host=web42,pool=static

3.一、簡單的設計

那麼,若是是通常的設計,會怎麼作呢,可能就是:RowKey=metric|timestamp|value|host=web42|pool=static,Column=v,Value=0.42

這是最簡單的設計,那接下來看看,OpenTSDB是怎麼作的吧。

3.二、OpenTSDB的方案

OpenTSDB使用HBase存儲,核心的存儲,是有兩張表,tsdb和tsdb-uid

3.2.一、表tsdb

tsdb是保存數據的,看看該表的設計


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

3.2.二、表tsdb-uid


表tsdb-uid

這裏其實保存的就是一些metric,tagk,tagv的一些映射關係。

四、OpenTSDB的整體架構


openTSDB架構

Servers:就是服務器了,上面的C就是指Collector,能夠理解爲OpenTSDB的agent,經過Collector收集數據,推送數據;

TSD:TSD是對外通訊的無狀態的服務器,Collector能夠經過TSD簡單的RPC協議推送監控數據;另外TSD還提供了一個web UI頁面供數據查詢;另外也能夠經過腳本查詢監控數據,對監控數據作報警

HBase:TSD收到監控數據後,是經過AsyncHbase這個庫來將數據寫入到HBase;AsyncHbase是徹底異步、非阻塞、線程安全的Hbase客戶端,使用更少的線程、鎖以及內存,能夠提供更高的吞吐量,特別對於大量的寫操做。

五、簡單的應用

5.一、安裝和部署

OpenTSDB是以HBase做爲存儲的,那麼,首先你得部署個Hbase。就好像對想要娶老婆生小孩的屌絲來講,首先,你得有個女友。

接下來OpenTSDB的安裝和部署,這個官方文檔已經說得很詳細,也是比較簡單的,幾乎是一鍵部署。

5.二、監控數據收集

OpenTSDB已經自帶了收集監控數據的一些腳本。主要由2個部分組成,TCollector和一些具體的collectors。

TCollector是1個客戶端進程,它主要是收集具體的collectors收集到的監控數據,而後負責將數據推送到TSDB;

TCollector會處理和TSD的鏈接和協議處理,具體的collectors負責收集數據便可

目前OpenTSDB提供了一些已實現的collectors


collectors

在一個服務器上部署1個TCollector以後,它會把這些collectors啓動起來,collectors收集到監控數據以後,輸出到stdout,TCollector接收後推送到OpenTSDB

5.三、監控數據查看

TSD除了接收數據以外,還提供了一個web頁面供數據查詢。不過頁面的樣式確實有點難以接受;


查詢條件面板

查詢結果面板

5.四、報警

目前OpenTSDB只是收集數據,並無作報警。

或者說,OpenTSDB自己就是一個基於HBase的數據庫,TCollector是數據收集器,報警不屬於它的範疇。報警的話,能夠接入到Nagios。

六、總結

這篇文章只是簡單介紹一下OpenTSDB是什麼東西,簡單地談了一下存儲和架構,以及應用起來是如何的。接下來還有不少東西能夠繼續寫。

譬如:

1)關於RowKey設計的更多東西(數據壓縮、查詢性能、數據均衡性、設計方案的缺點、metric和tagk長度)

2)OpenTSDB的更多特性(Aggregation、Interpolation 、Downsampling、Metadata、Tree)

可能接下來的文章再繼續了。

做者:沉默劍士連接:http://www.jianshu.com/p/0bafd0168647來源:簡書著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
相關文章
相關標籤/搜索