OpenTsdb官方文檔-----理解指標和時間序列

  OpenTSDB是一個時間序列數據庫。時間序列是一段時間內某個特定指標量的一系列數值數據點。每個時間序列由一個指標量加上一個或多個與此指標量相關聯的標籤組成(我們會稍微介紹一下標籤)。指標量是您希望隨時跟蹤的任意特定數據(例如點擊Apache主機文件)。

  OpenTSDB也是一個數據繪圖系統。OpenTSDB繪製的東西與其他系統有點不同。我們將在下面更詳細地討論繪圖,但現在對於OpenTSDB來說,任何給定繪圖的基礎都是指標量,瞭解這一點是很重要的。它採用該指標量,找出所選時間範圍的所有時間序列,將這些時間序列聚合在一起(例如將它們累加)並繪製結果。繪圖機制非常靈活且功能強大,可以做的遠遠不止這些,但現在讓我們來談談時間序列的關鍵——指標(Metric)。

  在OpenTSDB中,指標命名爲一個字符串,像“http.hits”。爲了能夠存儲該指標量存在的所有位置的不同的值,可以在將數據發送到TSD時使用一個或多個標籤標記數據。TSD存儲時間戳,值和標籤。當您想要讀取這些數據時,TSD檢索讀取您提供的時間範圍的所有值,可選地使用您提供的標籤過濾器,按照您想要的算法聚合所有的這些值,並繪製該指標值隨時間變化的圖形。

  到目前爲止,我們已經介紹了一些內容。爲了幫助你理解它的工作方式,將從一個典型的例子開始。假設您有一堆Web服務器,並且您想跟蹤兩件事情: Web服務器點擊量和系統負載的平均值。我們來定義指標名稱來表達它們。對於平均負載,我們稱之爲”proc.loadavg.lmin”(因爲在Linux上,你可以通過讀取/proc/loadavg輕易獲取這些數據)。對很多Web服務器來說,有一種方法可以向Web服務器請求一個表示從服務器啓動以來點擊服務器次數的計數器。這是一個便利的計數器,我們稱之爲”http.hits”的指標量。我選擇這兩個例子有如下兩個原因:

  1. 我們將看看OpenTSDB如何輕鬆地處理兩個計數器(隨着時間的推移,值會單調遞增,除非通過restart/reboot或overflow溢出重置),以及如何處理正常值的上升和下降,如負載平均值。OpenTSDB的一大優點就是無需對計數器進行Rate比率的計算,它會爲你做這些。
  2. 我們還可以向您展示如何在同一圖表上繪製兩個不同比例的指標量,這是關聯不同指標量非常好的一種方式。

第一個數據點

  在沒有詳細討論收集器如何將數據發送到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.eth1等的指標。收集net.bytes並使用iface = eth0標記eth0數據點等。不要費心創建單獨的“in”和“out”指標,而是添加標籤direction = in或direction = out。通過這種方式,您可以輕鬆查看給定”盒子”的整個網絡活動,而無需繪製大量指標。這仍然使您可以靈活地向下鑽取,只顯示特定接口的活動,或只顯示特定方向的活動數據。

計數器和Rates

  如果有東西是計數器,或者天生地是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官方文檔----日期和時間

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章