您好,登錄后才能下訂單哦!
??OpenTSDB是一個時間序列數據庫。時間序列是一段時間內某個特定指標量的一系列數值數據點。每個時間序列由一個指標量加上一個或多個與此指標量相關聯的標簽組成(我們會稍微介紹一下標簽)。指標量是您希望隨時跟蹤的任意特定數據(例如點擊Apache主機文件)。
??OpenTSDB也是一個數據繪圖系統。OpenTSDB繪制的東西與其他系統有點不同。我們將在下面更詳細地討論繪圖,但現在對于OpenTSDB來說,任何給定繪圖的基礎都是指標量,了解這一點是很重要的。它采用該指標量,找出所選時間范圍的所有時間序列,將這些時間序列聚合在一起(例如將它們累加)并繪制結果。繪圖機制非常靈活且功能強大,可以做的遠遠不止這些,但現在讓我們來談談時間序列的關鍵——指標(Metric)。
??在OpenTSDB中,指標命名為一個字符串,像“http.hits”。為了能夠存儲該指標量存在的所有位置的不同的值,可以在將數據發送到TSD時使用一個或多個標簽標記數據。TSD存儲時間戳,值和標簽。當您想要讀取這些數據時,TSD檢索讀取您提供的時間范圍的所有值,可選地使用您提供的標簽過濾器,按照您想要的算法聚合所有的這些值,并繪制該指標值隨時間變化的圖形。
??到目前為止,我們已經介紹了一些內容。為了幫助你理解它的工作方式,將從一個典型的例子開始。假設您有一堆Web服務器,并且您想跟蹤兩件事情: Web服務器點擊量和系統負載的平均值。我們來定義指標名稱來表達它們。對于平均負載,我們稱之為”proc.loadavg.lmin”(因為在Linux上,你可以通過讀取/proc/loadavg輕易獲取這些數據)。對很多Web服務器來說,有一種方法可以向Web服務器請求一個表示從服務器啟動以來點擊服務器次數的計數器。這是一個便利的計數器,我們稱之為”http.hits”的指標量。我選擇這兩個例子有如下兩個原因:
??在沒有詳細討論收集器如何將數據發送到TSD的過程中,您可以編寫一個收集器,將每個服務器的這些數據點的當前值定期發送到TSD。因此,TSD可以聚合來自多個主機的數據,您可以用“主機”標簽標記每個值。所以,如果有Web服務器A,B,C等,他們每個人都會定期向TSD發送這樣的內容:
put http.hits 1234567890 34877 host=A
put proc.loadavg.1min 1234567890 1.35 host=A
??這里的“1234567890”是以秒為單位的當前紀元(epoch )時間(日期+%s)。下一個數字是此時的指標值。這是來自主機A的數據,因此標簽標記為host=A。來自主機B的數據將被標記host=B等等。隨著時間的推移,會得到一堆存儲在OpenTSDB中的時間序列。
# 第一個繪制點
??現在,讓我們重新回顧一下我們在開始時談到的內容。時間序列是一段時間內某個特定指標量(及其標簽)的一系列數據點。在這個例子中,每個主機都向TSD發送兩個時間序列。如果你有三個箱子(主機)發送這兩個時間序列,TSD將收集和存儲6個時間序列。現在有數據了,我們開始繪制。
??要繪制HTTP點擊量,您只需轉到UI界面并輸入http.hits為指標名稱,然后輸入時間范圍。選中“Rate”復選框,因為這個特定的指標是一個速率計數器,而且,有隨著時間的HTTP點擊到Web服務器的比率。
??UI界面上聚合函數的默認值是通過將每個主機的每個時間序列相加(sum)來聚合每個主機的時間序列。這意味著,TSD將采用這個三個時間序列(主機= A,B和C)的指標并將它們的值相加在一起,以提供給定時間內所有Web服務器的總的點擊次數。請注意,您不需要在同一時間發送數據點,TSD將會找出它。因此,如果您的每個主機在某個時間點每秒提供1000次點擊,則圖表會顯示3000。如果您想要顯示每個Web服務器提供的點擊次數,該怎么辦?有兩種方式。如果您只關心每個Web服務器的服務平均次數,只需將Aggregator方法從sum更改為avg即可。您也可以嘗試其他(最大值,最小值)來查看最大值或最小值。更多的聚合函數正在起作用(percentiles,百分數等)。這是在每個間隔的基礎上完成的,所以如果在某個時間點,您的某個網絡服務器的服務時間為50 QPS,其他服務器的服務時間為100個,稍遲一些另外一個網絡服務器的服務時間為50 QPS,而其他服務器的服務時間為100個,這兩個點的Min函數值將是50。換句話說,它不能確定哪個時間系列是總的最小值,只是告訴你主機的情節。另一種方法來查看每個Web服務器正在服務的點擊數量?這是我們查看標簽字段的地方。
??為了減少返回的數據點的數量,可以指定一個降采樣的間隔和方法,例如1h-avg或1d-sum。這也是有用的(例如當使用max和min時)在給定時間段內找到最佳和最差情況的數據點。降采樣對于使繪圖階段不太密集,以及更具可讀性尤其有用,特別是繪制比屏幕像素點更多的數據點時。
??在UI中,您會看到TSD填充了一個或多個“標簽”,第一個是host。TSD在這里說,在這個時間范圍內,它看到數據標記有host標簽。您可以過濾圖表,使其只繪制一個host的值。如果在host行中填寫A,則只繪制主機A隨時間變化的值。如果要給出要繪制的主機列表,請填寫由管道符號分隔的主機列表,例如A | B,這將會繪制兩個圖,而不是一個,一個用于A,一個用于B。最后,還可以指定特殊字符*,這意味著為每個主機繪制一條線。
??在UI中,您會看到TSD填充了一個或多個“標簽”,第一個是host。TSD在這里說,在這個時間范圍內,它看到數據標記有host標簽。您可以過濾圖表,使其只繪制一個host的值。如果在host行中填寫A,則只繪制主機A隨時間變化的值。如果要給出要繪制的主機列表,請填寫由管道符號分隔的主機列表,例如A | B,這將會繪制兩個圖,而不是一個,一個用于A,一個用于B。最后,還可以指定特殊字符*,這意味著為每個主機繪制一條線。
??試想一下,如果服務器實際上運行了兩個Web服務器,比如說一個用于靜態內容,另一個用于動態內容。而不是創建另一個指標,只需使用服務器實例標簽http.hits指標即可。讓收集器發送如下內容:
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
??為什么要這樣做而不是創建另一個指標?那么,如果有時候你關心的是繪制總HTTP點擊量,有時候你會分別關心靜態點擊或動態點擊呢?使用標簽,很容易實現。使用這個新標簽,繪制此指標時,會看到UI中會顯示一個webserver標簽。可以將其保留為空,并將兩個值合并到一個繪圖中(根據聚合器設置),可以看到總點擊數,或者可以執行webserver = 來分析通過web服務器的每個靜態和動態實例的數量。甚至可以更深入地指定webserver = 和host = *以查看完整分類。
現在,無法將兩個指標合并成一條折線。這意味著您希望指標量成為最大可能的聚合點。如果您想深入查看指標中的具體內容,請使用標簽。
??指標量應該是一個特定的事物,比如“以太網數據包”,但不能分解成某個事物的特定實例。一般而言,您不希望收集諸如net.bytes.eth0,net.bytes.eth2等的指標。收集net.bytes并使用iface = eth0標記eth0數據點等。不要費心創建單獨的“in”和“out”指標,而是添加標簽direction = in或direction = out。通過這種方式,您可以輕松查看給定”盒子”的整個網絡活動,而無需繪制大量指標。這仍然使您可以靈活地向下鉆取,只顯示特定接口的活動,或只顯示特定方向的活動數據。
??如果有東西是計數器,或者天生地是Rate的東西,請不要在將其發送到TSD之前將其轉換為Rate。這有兩個主要原因。首先,做自己的Rate計算,重置/溢出處理等是愚蠢的,因為TSD可以自動做。您也不必擔心基于稍微不準確或不斷改變的采樣間隔來獲取單位每秒計算的正確性。其次,如果發生了丟失數據點或更多數據點的情況,如果您發送當前計數器值,則不會丟失數據,只是該數據的解析度會稍差一些。TSD的黃金法則是,如果源數據是一個計數器(某些計數器輸出到/ proc或SNMP),請保持原樣,不要轉換它。如果你正在寫你自己的收集器(比如說,用于計算特定錯誤消息出現在日志尾部的頻率),請勿在每個采樣時間間隔重置計數器。讓TSD為你做好此類工作。
??在小環境之上的任何環境中,您可能會有一些集群或一組機器在做同樣的事情。不過隨著時間的推移這些會發生改變,沒關系。只需在將數據發送到TSD以傳遞此集群信息時使用標簽。將cluster = webserver添加到每個Web服務器發送的所有數據點,cluster = db標簽添加到所有數據庫等。
??現在,當您為Web服務器集群繪制CPU活動情況時,會看到所有這些聚合到一個繪圖中。然后,我們假設您添加一個web服務器,甚至將其從web服務器更改為數據庫。您所要做的就是確保在其角色更改時發送正確的標簽,并且現在將該“盒子”的CPU活動計入正確的集群。更重要的是,所有的歷史數據都是正確的!這是OpenTSDB的真正能力。您不僅不會像基于RRD的系統一樣隨時間丟失數據點的解析度,而且隨著“盒子”轉移,歷史數據不會丟失。您也不必將大量集群或分組意識(awareness)邏輯放入儀表板。
??數據點上允許的最大標簽數量由常量(Const.MAX_NUMTAGS)定義,在寫入時為8。指標量名稱,標簽名稱和標簽值必須由字母數字字符, “ - ” , “”,”.”和 “/”構成,正如包私有函數Tags.validateString所強制的那樣。
下一篇
OpenTsdb官方文檔----日期和時間
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。