OpenTSDB介紹


 OpenTSDB 2.0, the scalable, distributed time series database可擴展、分布式時間序列數據庫

1、背景

一些老的監控系統,它常常會出現這樣的問題:

1)中心化數據存儲進而導致單點故障。

2)有限的存儲空間。

3)數據會因為時間問題而變得不准確。

4)不易於定制圖形。

5)不能擴展采集數據點到100億級別。

6)不能擴展metrics到K級別。

7)不支持秒級別的數據。

OpenTSDB解決上面的問題:

1、它用hbase存儲所有的時序(無須采樣)來構建一個分布式、可伸縮的時間序列數據庫。

2、它支持秒級數據采集所有metrics,支持永久存儲,可以做容量規划,並很容易的接入到現有的報警系統里。

3、OpenTSDB可以從大規模的集群(包括集群中的網絡設備、操作系統、應用程序)中獲取相應的metrics並進行存儲、索引以及服務

從而使得這些數據更容易讓人理解,如web化,圖形化等。

對於運維工程師而言,OpenTSDB可以獲取基礎設施和服務的實時狀態信息,展示集群的各種軟硬件錯誤,性能變化以及性能瓶頸。

對於管理者而言,OpenTSDB可以衡量系統的SLA,理解復雜系統間的相互作用,展示資源消耗情況。集群的整體作業情況,可以用以輔助預算和集群資源協調。

對於開發者而言,OpenTSDB可以展示集群的主要性能瓶頸,經常出現的錯誤,從而可以着力重點解決重要問題。

 

2、架構Review

openTSDB使用hbase作為存儲中心,它無須采樣,可以完整的收集和存儲上億的數據點,支持秒級別的數據監控,得益於hbase的分布式列式存儲,hbase可以靈活的支持metrics的增加,可以支持上萬機器和上億數據點的采集。

在openTSDB中,TSD是hbase對外通信的daemon程序,沒有master/slave之分,也沒有共享狀態,因此利用這點和hbase集群的特點就可以消除單點。用戶可以通過telnet或者http協議直接訪問TSD接口,也可以通過rpc訪問TSD。每一個需要獲取metrics的Servers都需要設置一個Collector用來收集時間序列數據。這個Collector就是你收集數據的腳本。

圖1、openTSDB的數據流圖

如果想快速地展示mysql中在一段時間內執行delete子句的數量,慢查詢的數量,創建的臨時文件數量以及99%的延遲數量等等。OpenTSDB則可以非常容易存儲和處理百萬級別以上的數據點,並能實時動態的生成對應的圖,如圖2.

圖2、OpenTSDB用例圖

 

3、在hbase中存儲時間序列

OpenTSDB使用async hbase ,這是個完全異步、非阻塞、線程安全、HBase api,使用更少的線程、鎖以及內存可以提供更高的吞吐量,特別對於大量的寫操作。

圖3為讀寫流程

黑色的線表示寫入,紅色的線表示讀取,通過get請求,綠色的呢,Gnuplot是畫圖嗎??

在hbase中,表結構的設計對性能具有很大的影響,其中tsdb-uid表和tsdb表見表一和表二

tsdb-uid表

 

tsdb表

 

4、一淘的實例

OpenTSDB,一個數據點可以表示為:1)一個指標名稱。2)UNIX時間戳。3)一個值(64位整數或雙精度浮點值)。4)標識這個數據點的一組標記tags(鍵-值對)。

如tcollector中的dfstat.py腳本的輸出:

df.bytes.total 1413306095 4159016960 mount=/ fstype=ext3

一淘的例子:

下面四個數據點都是采集的metrics為index.full_count,代表引擎索引doc數;標記tags為來自哪個domain(代表機房),area和app代表應用,cluster代表索引表,partition代表列。Metrics和tags加起來就是一個時間序列。

index.full_count 1341069600 156866750 domain=domain_E area=1 app=jqb cluster=epid partition=partition_16384_32767

index.full_count 1341069600 155819640 domain=domain_E area=1 app=jqb cluster=epid partition=partition_32768_49151

index.full_size 1341069000 18561 domain=domain_D area=1 app=jqb cluster=b2c partition=partition_0_16383

index.full_size 1341069000 18554 domain=domain_D area=1 app=jqb cluster=b2c partition=partition_16384_32767

index.full_count 1341069200 11421051 domain=domain_G area=1 app=jqb cluster=b2c partition=partition_16384_32767

那如何收集這些數據呢,Etao在tcollector開源收集器的基礎上,做第二次開發,見圖5。

tcollector可以完成:

1)可以任意添加你的收集腳本程序,並收集所有數據。

2)完成發送數據到TSD的所有連接管理。

3)初始化一些狀態,執行一些公共的部分,比如定時管理執行1min文件夾下面的腳本。

4)刪除重復的數據。

5)支持很多種數據交換協議,提供良好的擴展性。

將etao-tcollector部署在所有機器上(可采用集中運維腳本進行遠程部署,並可通過該系統遠程控制收集器的啟停)。etao-tcollector會將帶時間和metrics的時間序列數據發送到tsd,之后的處理見第三節的圖3,最后我們在Opentsdb提供的web UI上通過指定查詢條件進行查詢獲取相應的圖形用來對應用進行監控

該etao-tcollector在一淘引擎中用來收集索引相關信息,引擎服務狀態如延遲,日志等。

openTSDB采用hbase作為時序數據的存儲中心,具有高擴展性,metrics添加相當靈活,且對數據可以無損的存儲。可以很靈活的支持數據分析,圖形顯示以及一系列定制化操作,非常方便運維人員做運維監控。

 

5、參考資料

1、http://www.searchtb.com/2012/07/opentsdb-monitoring-system.html

2、http://opentsdb.net/docs/build/html/index.html

3、https://github.com/stumbleupon/asynchbase

4、https://github.com/stumbleupon/tcollector


免責聲明!

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



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