openTSDB(轉)


1、OpenTSDB介紹

1.1、OpenTSDB是什么?主要用途是什么?

官方文檔這樣描述:OpenTSDB is a distributed, scalable Time Series Database (TSDB) written on top of HBase;
翻譯過來就是,基於Hbase的分布式的,可伸縮的時間序列數據庫。
主要用途,就是做監控系統;譬如收集大規模集群(包括網絡設備、操作系統、應用程序)的監控數據並進行存儲,查詢。

1.2、介紹continue

存儲到OpenTSDB的數據,是以metric為單位的,metric就是1個監控項,譬如服務器的話,會有CPU使用率、內存使用率這些metric;
OpenTSDB使用HBase作為存儲,由於有良好的設計,因此對metric的數據存儲支持到秒級別;
OpenTSDB支持數據永久存儲,即保存的數據不會主動刪除;並且原始數據會一直保存(有些監控系統會將較久之前的數據聚合之后保存)

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

 

3、OpenTSDB的設計

還是以例子來說明,譬如保存這樣的1個DataPoint:
metric:proc.loadavg.1m
timestamp:1234567890
value:0.42
tags:host=web42,pool=static
 

3.1、簡單的設計

那么,如果是一般的設計,會怎么做呢,可能就是:RowKey=metric|timestamp|value|host=web42|pool=static,Column=v,Value=0.42
這是最簡單的設計,那接下來看看,OpenTSDB是怎么做的吧。

3.2、OpenTSDB的方案

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

3.2.1、表tsdb

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

 

 
tsdb的表結構
1)RowKey的設計
RowKey其實和上面的metric|timestamp|value|host=web42|pool=static類似;
但是區別是,OpenTSDB為了節省存儲空間,將每個部分都做了映射。
在OpenTSDB里面有這樣的映射,metric-->3字節整數、tagk-->3字節整數、tagv-->3字節整數
上圖的映射關系為,proc.loadavg.1m-->052、host-->001、web42-->028、pool-->047、static-->001
2)column的設計
為了方便后期更進一步的節省空間。OpenTSDB將一個小時的數據,保存在一行里面。
所以上面的timestamp1234567890,會先模一下小時,得出1234566000,然后得到的余數為1890,表示的是它是在這個小時里面的第1890秒;
然后將1890作為column name,而0.42即為column value

3.2.2、表tsdb-uid

 

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

4、OpenTSDB的總體架構

 

Servers:就是服務器了,上面的C就是指Collector,可以理解為OpenTSDB的agent,通過Collector收集數據,推送數據;
TSD:TSD是對外通信的無狀態的服務器,Collector可以通過TSD簡單的RPC協議推送監控數據;另外TSD還提供了一個web UI頁面供數據查詢;另外也可以通過腳本查詢監控數據,對監控數據做報警
HBase:TSD收到監控數據后,是通過AsyncHbase這個庫來將數據寫入到HBase;AsyncHbase是完全異步、非阻塞、線程安全的Hbase客戶端,使用更少的線程、鎖以及內存,可以提供更高的吞吐量,特別對於大量的寫操作。

5、簡單的應用

5.1、安裝和部署

OpenTSDB是以HBase作為存儲的,那么,首先你得部署個Hbase。就好像對想要娶老婆生小孩的屌絲來說,首先,你得有個女朋友。
接下來OpenTSDB的安裝和部署,這個官方文檔已經說得很詳細,也是比較簡單的,幾乎是一鍵部署。

5.2、監控數據收集

OpenTSDB已經自帶了收集監控數據的一些腳本。主要由2個部分組成,TCollector和一些具體的collectors。
TCollector是1個客戶端進程,它主要是收集具體的collectors收集到的監控數據,然后負責將數據推送到TSDB;
TCollector會處理和TSD的連接和協議處理,具體的collectors負責收集數據即可
目前OpenTSDB提供了一些已實現的collectors

 

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

5.3、監控數據查看

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

 

查詢條件面板
 
 

 

查詢結果面板

5.4、報警

目前OpenTSDB只是收集數據,並沒有做報警。
或者說,OpenTSDB本身就是一個基於HBase的數據庫,TCollector是數據收集器,報警不屬於它的范疇。報警的話,可以接入到Nagios。

6、總結

這篇文章只是簡單介紹一下OpenTSDB是什么東西,簡單地談了一下存儲和架構,以及應用起來是如何的。接下來還有很多東西可以繼續寫。
譬如:
1)關於RowKey設計的更多東西(數據壓縮、查詢性能、數據均衡性、設計方案的缺點、metric和tagk長度)
2)OpenTSDB的更多特性(Aggregation、Interpolation 、Downsampling、Metadata、Tree)
可能接下來的文章再繼續了
 
 
作者:沉默劍士
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM