OpenTSDB是一個(gè)時(shí)間序列數(shù)據(jù)庫(kù)。時(shí)間序列是一段時(shí)間內(nèi)某個(gè)特定指標(biāo)量的一系列數(shù)值數(shù)據(jù)點(diǎn)。每個(gè)時(shí)間序列由一個(gè)指標(biāo)量加上一個(gè)或多個(gè)與此指標(biāo)量相關(guān)聯(lián)的標(biāo)簽組成(我們會(huì)稍微介紹一下標(biāo)簽)。指標(biāo)量是您希望隨時(shí)跟蹤的任意特定數(shù)據(jù)(例如點(diǎn)擊Apache主機(jī)文件)。
創(chuàng)新互聯(lián)建站致力于網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站,成都網(wǎng)站設(shè)計(jì),集團(tuán)網(wǎng)站建設(shè)等服務(wù)標(biāo)準(zhǔn)化,推過(guò)標(biāo)準(zhǔn)化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務(wù)水平進(jìn)行質(zhì)量交付,讓企業(yè)網(wǎng)站從市場(chǎng)競(jìng)爭(zhēng)中脫穎而出。 選擇創(chuàng)新互聯(lián)建站,就選擇了安全、穩(wěn)定、美觀的網(wǎng)站建設(shè)服務(wù)!OpenTSDB也是一個(gè)數(shù)據(jù)繪圖系統(tǒng)。OpenTSDB繪制的東西與其他系統(tǒng)有點(diǎn)不同。我們將在下面更詳細(xì)地討論繪圖,但現(xiàn)在對(duì)于OpenTSDB來(lái)說(shuō),任何給定繪圖的基礎(chǔ)都是指標(biāo)量,了解這一點(diǎn)是很重要的。它采用該指標(biāo)量,找出所選時(shí)間范圍的所有時(shí)間序列,將這些時(shí)間序列聚合在一起(例如將它們累加)并繪制結(jié)果。繪圖機(jī)制非常靈活且功能強(qiáng)大,可以做的遠(yuǎn)遠(yuǎn)不止這些,但現(xiàn)在讓我們來(lái)談?wù)剷r(shí)間序列的關(guān)鍵——指標(biāo)(Metric)。
在OpenTSDB中,指標(biāo)命名為一個(gè)字符串,像“http.hits”。為了能夠存儲(chǔ)該指標(biāo)量存在的所有位置的不同的值,可以在將數(shù)據(jù)發(fā)送到TSD時(shí)使用一個(gè)或多個(gè)標(biāo)簽標(biāo)記數(shù)據(jù)。TSD存儲(chǔ)時(shí)間戳,值和標(biāo)簽。當(dāng)您想要讀取這些數(shù)據(jù)時(shí),TSD檢索讀取您提供的時(shí)間范圍的所有值,可選地使用您提供的標(biāo)簽過(guò)濾器,按照您想要的算法聚合所有的這些值,并繪制該指標(biāo)值隨時(shí)間變化的圖形。
到目前為止,我們已經(jīng)介紹了一些內(nèi)容。為了幫助你理解它的工作方式,將從一個(gè)典型的例子開始。假設(shè)您有一堆Web服務(wù)器,并且您想跟蹤兩件事情: Web服務(wù)器點(diǎn)擊量和系統(tǒng)負(fù)載的平均值。我們來(lái)定義指標(biāo)名稱來(lái)表達(dá)它們。對(duì)于平均負(fù)載,我們稱之為”proc.loadavg.lmin”(因?yàn)樵贚inux上,你可以通過(guò)讀取/proc/loadavg輕易獲取這些數(shù)據(jù))。對(duì)很多Web服務(wù)器來(lái)說(shuō),有一種方法可以向Web服務(wù)器請(qǐng)求一個(gè)表示從服務(wù)器啟動(dòng)以來(lái)點(diǎn)擊服務(wù)器次數(shù)的計(jì)數(shù)器。這是一個(gè)便利的計(jì)數(shù)器,我們稱之為”http.hits”的指標(biāo)量。我選擇這兩個(gè)例子有如下兩個(gè)原因:
在沒有詳細(xì)討論收集器如何將數(shù)據(jù)發(fā)送到TSD的過(guò)程中,您可以編寫一個(gè)收集器,將每個(gè)服務(wù)器的這些數(shù)據(jù)點(diǎn)的當(dāng)前值定期發(fā)送到TSD。因此,TSD可以聚合來(lái)自多個(gè)主機(jī)的數(shù)據(jù),您可以用“主機(jī)”標(biāo)簽標(biāo)記每個(gè)值。所以,如果有Web服務(wù)器A,B,C等,他們每個(gè)人都會(huì)定期向TSD發(fā)送這樣的內(nèi)容:
put http.hits 1234567890 34877 host=A
put proc.loadavg.1min 1234567890 1.35 host=A
這里的“1234567890”是以秒為單位的當(dāng)前紀(jì)元(epoch )時(shí)間(日期+%s)。下一個(gè)數(shù)字是此時(shí)的指標(biāo)值。這是來(lái)自主機(jī)A的數(shù)據(jù),因此標(biāo)簽標(biāo)記為host=A。來(lái)自主機(jī)B的數(shù)據(jù)將被標(biāo)記host=B等等。隨著時(shí)間的推移,會(huì)得到一堆存儲(chǔ)在OpenTSDB中的時(shí)間序列。
# 第一個(gè)繪制點(diǎn)
現(xiàn)在,讓我們重新回顧一下我們?cè)陂_始時(shí)談到的內(nèi)容。時(shí)間序列是一段時(shí)間內(nèi)某個(gè)特定指標(biāo)量(及其標(biāo)簽)的一系列數(shù)據(jù)點(diǎn)。在這個(gè)例子中,每個(gè)主機(jī)都向TSD發(fā)送兩個(gè)時(shí)間序列。如果你有三個(gè)箱子(主機(jī))發(fā)送這兩個(gè)時(shí)間序列,TSD將收集和存儲(chǔ)6個(gè)時(shí)間序列?,F(xiàn)在有數(shù)據(jù)了,我們開始繪制。
要繪制HTTP點(diǎn)擊量,您只需轉(zhuǎn)到UI界面并輸入http.hits為指標(biāo)名稱,然后輸入時(shí)間范圍。選中“Rate”復(fù)選框,因?yàn)檫@個(gè)特定的指標(biāo)是一個(gè)速率計(jì)數(shù)器,而且,有隨著時(shí)間的HTTP點(diǎn)擊到Web服務(wù)器的比率。
UI界面上聚合函數(shù)的默認(rèn)值是通過(guò)將每個(gè)主機(jī)的每個(gè)時(shí)間序列相加(sum)來(lái)聚合每個(gè)主機(jī)的時(shí)間序列。這意味著,TSD將采用這個(gè)三個(gè)時(shí)間序列(主機(jī)= A,B和C)的指標(biāo)并將它們的值相加在一起,以提供給定時(shí)間內(nèi)所有Web服務(wù)器的總的點(diǎn)擊次數(shù)。請(qǐng)注意,您不需要在同一時(shí)間發(fā)送數(shù)據(jù)點(diǎn),TSD將會(huì)找出它。因此,如果您的每個(gè)主機(jī)在某個(gè)時(shí)間點(diǎn)每秒提供1000次點(diǎn)擊,則圖表會(huì)顯示3000。如果您想要顯示每個(gè)Web服務(wù)器提供的點(diǎn)擊次數(shù),該怎么辦?有兩種方式。如果您只關(guān)心每個(gè)Web服務(wù)器的服務(wù)平均次數(shù),只需將Aggregator方法從sum更改為avg即可。您也可以嘗試其他(大值,最小值)來(lái)查看大值或最小值。更多的聚合函數(shù)正在起作用(percentiles,百分?jǐn)?shù)等)。這是在每個(gè)間隔的基礎(chǔ)上完成的,所以如果在某個(gè)時(shí)間點(diǎn),您的某個(gè)網(wǎng)絡(luò)服務(wù)器的服務(wù)時(shí)間為50 QPS,其他服務(wù)器的服務(wù)時(shí)間為100個(gè),稍遲一些另外一個(gè)網(wǎng)絡(luò)服務(wù)器的服務(wù)時(shí)間為50 QPS,而其他服務(wù)器的服務(wù)時(shí)間為100個(gè),這兩個(gè)點(diǎn)的Min函數(shù)值將是50。換句話說(shuō),它不能確定哪個(gè)時(shí)間系列是總的最小值,只是告訴你主機(jī)的情節(jié)。另一種方法來(lái)查看每個(gè)Web服務(wù)器正在服務(wù)的點(diǎn)擊數(shù)量?這是我們查看標(biāo)簽字段的地方。
為了減少返回的數(shù)據(jù)點(diǎn)的數(shù)量,可以指定一個(gè)降采樣的間隔和方法,例如1h-avg或1d-sum。這也是有用的(例如當(dāng)使用max和min時(shí))在給定時(shí)間段內(nèi)找到最佳和最差情況的數(shù)據(jù)點(diǎn)。降采樣對(duì)于使繪圖階段不太密集,以及更具可讀性尤其有用,特別是繪制比屏幕像素點(diǎn)更多的數(shù)據(jù)點(diǎn)時(shí)。
在UI中,您會(huì)看到TSD填充了一個(gè)或多個(gè)“標(biāo)簽”,第一個(gè)是host。TSD在這里說(shuō),在這個(gè)時(shí)間范圍內(nèi),它看到數(shù)據(jù)標(biāo)記有host標(biāo)簽。您可以過(guò)濾圖表,使其只繪制一個(gè)host的值。如果在host行中填寫A,則只繪制主機(jī)A隨時(shí)間變化的值。如果要給出要繪制的主機(jī)列表,請(qǐng)?zhí)顚懹晒艿婪?hào)分隔的主機(jī)列表,例如A | B,這將會(huì)繪制兩個(gè)圖,而不是一個(gè),一個(gè)用于A,一個(gè)用于B。最后,還可以指定特殊字符*,這意味著為每個(gè)主機(jī)繪制一條線。
在UI中,您會(huì)看到TSD填充了一個(gè)或多個(gè)“標(biāo)簽”,第一個(gè)是host。TSD在這里說(shuō),在這個(gè)時(shí)間范圍內(nèi),它看到數(shù)據(jù)標(biāo)記有host標(biāo)簽。您可以過(guò)濾圖表,使其只繪制一個(gè)host的值。如果在host行中填寫A,則只繪制主機(jī)A隨時(shí)間變化的值。如果要給出要繪制的主機(jī)列表,請(qǐng)?zhí)顚懹晒艿婪?hào)分隔的主機(jī)列表,例如A | B,這將會(huì)繪制兩個(gè)圖,而不是一個(gè),一個(gè)用于A,一個(gè)用于B。最后,還可以指定特殊字符*,這意味著為每個(gè)主機(jī)繪制一條線。
試想一下,如果服務(wù)器實(shí)際上運(yùn)行了兩個(gè)Web服務(wù)器,比如說(shuō)一個(gè)用于靜態(tài)內(nèi)容,另一個(gè)用于動(dòng)態(tài)內(nèi)容。而不是創(chuàng)建另一個(gè)指標(biāo),只需使用服務(wù)器實(shí)例標(biāo)簽http.hits指標(biāo)即可。讓收集器發(fā)送如下內(nèi)容:
put http.hits 1234567890 34877 host=A webserver=static
put http.hits 1234567890 4357 host=A webserver=dynamic
put proc.loadavg.1min 1234567890 1.35 host=A
為什么要這樣做而不是創(chuàng)建另一個(gè)指標(biāo)?那么,如果有時(shí)候你關(guān)心的是繪制總HTTP點(diǎn)擊量,有時(shí)候你會(huì)分別關(guān)心靜態(tài)點(diǎn)擊或動(dòng)態(tài)點(diǎn)擊呢?使用標(biāo)簽,很容易實(shí)現(xiàn)。使用這個(gè)新標(biāo)簽,繪制此指標(biāo)時(shí),會(huì)看到UI中會(huì)顯示一個(gè)webserver標(biāo)簽??梢詫⑵浔A魹榭?,并將兩個(gè)值合并到一個(gè)繪圖中(根據(jù)聚合器設(shè)置),可以看到總點(diǎn)擊數(shù),或者可以執(zhí)行webserver = 來(lái)分析通過(guò)web服務(wù)器的每個(gè)靜態(tài)和動(dòng)態(tài)實(shí)例的數(shù)量。甚至可以更深入地指定webserver =和host = *以查看完整分類。
現(xiàn)在,無(wú)法將兩個(gè)指標(biāo)合并成一條折線。這意味著您希望指標(biāo)量成為大可能的聚合點(diǎn)。如果您想深入查看指標(biāo)中的具體內(nèi)容,請(qǐng)使用標(biāo)簽。
指標(biāo)量應(yīng)該是一個(gè)特定的事物,比如“以太網(wǎng)數(shù)據(jù)包”,但不能分解成某個(gè)事物的特定實(shí)例。一般而言,您不希望收集諸如net.bytes.eth0,net.bytes.eth2等的指標(biāo)。收集net.bytes并使用iface = eth0標(biāo)記eth0數(shù)據(jù)點(diǎn)等。不要費(fèi)心創(chuàng)建單獨(dú)的“in”和“out”指標(biāo),而是添加標(biāo)簽direction = in或direction = out。通過(guò)這種方式,您可以輕松查看給定”盒子”的整個(gè)網(wǎng)絡(luò)活動(dòng),而無(wú)需繪制大量指標(biāo)。這仍然使您可以靈活地向下鉆取,只顯示特定接口的活動(dòng),或只顯示特定方向的活動(dòng)數(shù)據(jù)。
如果有東西是計(jì)數(shù)器,或者天生地是Rate的東西,請(qǐng)不要在將其發(fā)送到TSD之前將其轉(zhuǎn)換為Rate。這有兩個(gè)主要原因。首先,做自己的Rate計(jì)算,重置/溢出處理等是愚蠢的,因?yàn)門SD可以自動(dòng)做。您也不必?fù)?dān)心基于稍微不準(zhǔn)確或不斷改變的采樣間隔來(lái)獲取單位每秒計(jì)算的正確性。其次,如果發(fā)生了丟失數(shù)據(jù)點(diǎn)或更多數(shù)據(jù)點(diǎn)的情況,如果您發(fā)送當(dāng)前計(jì)數(shù)器值,則不會(huì)丟失數(shù)據(jù),只是該數(shù)據(jù)的解析度會(huì)稍差一些。TSD的黃金法則是,如果源數(shù)據(jù)是一個(gè)計(jì)數(shù)器(某些計(jì)數(shù)器輸出到/ proc或SNMP),請(qǐng)保持原樣,不要轉(zhuǎn)換它。如果你正在寫你自己的收集器(比如說(shuō),用于計(jì)算特定錯(cuò)誤消息出現(xiàn)在日志尾部的頻率),請(qǐng)勿在每個(gè)采樣時(shí)間間隔重置計(jì)數(shù)器。讓TSD為你做好此類工作。
在小環(huán)境之上的任何環(huán)境中,您可能會(huì)有一些集群或一組機(jī)器在做同樣的事情。不過(guò)隨著時(shí)間的推移這些會(huì)發(fā)生改變,沒關(guān)系。只需在將數(shù)據(jù)發(fā)送到TSD以傳遞此集群信息時(shí)使用標(biāo)簽。將cluster = webserver添加到每個(gè)Web服務(wù)器發(fā)送的所有數(shù)據(jù)點(diǎn),cluster = db標(biāo)簽添加到所有數(shù)據(jù)庫(kù)等。
現(xiàn)在,當(dāng)您為Web服務(wù)器集群繪制CPU活動(dòng)情況時(shí),會(huì)看到所有這些聚合到一個(gè)繪圖中。然后,我們假設(shè)您添加一個(gè)web服務(wù)器,甚至將其從web服務(wù)器更改為數(shù)據(jù)庫(kù)。您所要做的就是確保在其角色更改時(shí)發(fā)送正確的標(biāo)簽,并且現(xiàn)在將該“盒子”的CPU活動(dòng)計(jì)入正確的集群。更重要的是,所有的歷史數(shù)據(jù)都是正確的!這是OpenTSDB的真正能力。您不僅不會(huì)像基于RRD的系統(tǒng)一樣隨時(shí)間丟失數(shù)據(jù)點(diǎn)的解析度,而且隨著“盒子”轉(zhuǎn)移,歷史數(shù)據(jù)不會(huì)丟失。您也不必將大量集群或分組意識(shí)(awareness)邏輯放入儀表板。
數(shù)據(jù)點(diǎn)上允許的大標(biāo)簽數(shù)量由常量(Const.MAX_NUMTAGS)定義,在寫入時(shí)為8。指標(biāo)量名稱,標(biāo)簽名稱和標(biāo)簽值必須由字母數(shù)字字符, “ - ” , “”,”.”和 “/”構(gòu)成,正如包私有函數(shù)Tags.validateString所強(qiáng)制的那樣。
下一篇
OpenTsdb官方文檔----日期和時(shí)間
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。