您好,登錄后才能下訂單哦!
小編給大家分享一下OpenTsdb如何查詢或讀取數據,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
??OpenTSDB提供了許多提取,處理和分析數據的方法。數據可以通過CLI工具,HTTP API來查詢,并且作為為一個GnuPlot圖形輸出展示。開源工具如Grafana和Bosun可以訪問TSDB的數據。使用OpenTSDB的基于標簽的系統進行查詢可能有點棘手,所以仔細閱讀本文檔并查看以下頁面以獲取更深入的信息。此頁面上的示例查詢遵循HTTP API格式。
??OpenTSDB提供了多個工具和接口允許隨著時間推移的多樣化查詢定義。原始語法支持簡單的過濾,聚合和降采樣。后來的版本增加了對函數和表達式的支持。一般來說,每個查詢都有以下組件:
參數 | 數據類型 | Required | 描述 | 示例 |
---|---|---|---|---|
Start Time | String或Integer | Required | 查詢的開始時間。可以是絕對時間或相對時間 | 24h-ago |
End Time | String或Integer | Optional | 查詢的結束時間。如果未提供結束時間,則當前時間即結束時間 | 1h-ago |
Metric | String | Required | 系統中的metric全名。必須是全名并且大小寫敏感 | sys.cpu.user |
Aggregation Function | String | Required | 用于組合多個時間序列的數學函數(即如何合并一個組中的時間序列值) | sum |
Filter | String | Optional | 過濾標簽值以減少查詢或組中挑選出的時間序列的數量,并聚合各個標簽 | host=*,dc=lax |
Downsampler | String | Optional | 可選的時間間隔和函數,用于減少隨時間返回的數據點的數量 | 1h-avg |
Rate | String | Optional | 用于計算結果的每秒變化率 | rate |
Functions | String | Optional | 數據處理函數,如附加過濾、時間切換等 | highestMax(…) |
Expressions | String | Optional | 數據處理函數,例如將一個序列分化成另一個序列 | (m2/(m1 + m2))*100 |
??支持人類可讀的絕對時間戳或Unix風格的整型格式。相對時間通常用來刷新儀表板。當前,所有的查詢可以覆蓋單一的時間段。未來我們希望提供一個偏移查詢參數,這個參數可以在不同的時間段內對指標進行聚合或者繪制圖表,比如上周到1年前的比較。
??雖然OpenTSDB可以以毫秒分辨率(精度)存儲數據,但大多數查詢將以秒級分辨率返回數據,以提供對現有工具的向后兼容性。除非使用指定了降采樣算法的查詢,否則將使用查詢中指定的相同聚合函數將數據自動降采樣到1秒。這樣,如果多個數據點存儲在一個給定的秒數,它們將被聚合并正確返回一個正常的查詢。
??要以毫秒分辨率提取數據,請使用/api/query接口并指定msResolution(ms也可以,但不推薦)JSON參數或查詢字符串標識,它將繞過采樣(除非指定),并以Unix epoch毫秒分辨率返回所有時間戳。另外,scan命令行工具將返回寫入存儲的時間戳。
??每個時間序列由一個指標與一個或多個標簽名稱/值對組成。在OpenTSDB中,過濾器應用于標簽值(當前的TSDB不提供對指標或標簽名稱的過濾)。由于過濾器在查詢中是可選的,如果您僅僅請求指標名稱,則具有任意數值或標簽值都會在聚合結果中返回。過濾器與SQL語句中的Where子句相似。例如,我們存儲了如下數據集:
sys.cpu.user host=webserver01,cpu=0 1356998400 1
sys.cpu.user host=webserver01,cpu=1 1356998400 4
sys.cpu.user host=webserver02,cpu=0 1356998400 2
sys.cpu.user host=webserver02,cpu=1 1356998400 1
??制定一個簡單的查詢,至少帶有起始時間,聚合器和指標,如:
start=1356998400&m=sum:sys.cpu.user
??我們會得到一個在1356998400時間點上將4個時間序列聚合到一組,值為8。
??如果我們想縮放一個特定序列或一系列序列,可以使用過濾器。例如,我們可以通過在host標簽上過濾:
start=1356998400&m=sum:sys.cpu.user{host=webserver01}
??該查詢將會返回一個值5,僅包含時間序列host=webserver01。要深入到特定的時間序列,必須包含序列的所有標簽,如查詢:
start=1356998400&m=sum:sys.cpu.user{host=webserver01,cpu=0}
??將會返回1。
??OpenTSDB的一個強大功能是能夠將多個時間序列的即時聚合集成到一組數據點中。原始數據始終可用于存儲,但我們可以通過有意義的方式快速提取數據。聚合函數是將單個時間戳的兩個或多個數據點合并為單個值的方法。
??注意:
??OpenTSDB默認會聚合數據,并且需要每個查詢都有一個聚合運算符。每個聚合器必須處理多個序列的缺失或不同時間戳中的數據點。這通過插值來執行的,如果用戶不知道TSDB在做什么,可能會在查詢時導致意外的結果。
??OpenTSDB可以攝取大量數據,即使僅提取給定時間序列中每秒一個數據點也是如此。因此查詢可能會返回大量的數據點,從API訪問大量點的查詢結果可能會消耗許多帶寬。高頻率的數據很容易壓倒Javascript圖形庫,因此可以選擇使用GnuPlot。由GUI創建的圖形難以閱讀,導致濃密的折線,如下圖所示:
??查詢時可以使用降采樣來減少返回的數據點數量,以便您可以從圖表中提取更好的信息或通過連接傳遞更少的數據。降采樣需要一個聚合函數和一個時間間隔。聚合函數用于通過適當的數學函數計算指定區間內所有數據點上的新數據點。例如,如果使用sum聚合,則間隔內的所有數據點將會一起累加為單個值。如果選擇avg,則會返回間隔內所有數據點的平均值。
使用降采樣,我們可以清理前面的圖,以得到更有用的東西:
??許多數據源以不斷遞增的計數器的形式返回值。一個例子是一個網站點擊計數器。當您啟動Web服務器時,它的計數器可能為0。五分鐘后,該值可能為1,024。再過五分鐘后可能是2,048。計數器的圖形是一條直線且向右傾斜,這樣的圖并不總是非常有用。OpenTSDB提供了一個rate轉換函數,用于計算值隨時間變化的變化率。這會將計數器轉換為帶有尖峰的折線(曲線),以便在活動發生時向您展示且更有用。
該比率是這些值的一階導函數。它被定義為(v2 - v1) / (t2 - t1),時間以秒為單位。因此你會得到每秒的變化率。目前,毫秒級值之間的變化率默認為每秒計算。
??OpenTSDB 2.0支持特殊的單調遞增計數器數據處理,包括設置“翻轉”(越界)值和抑制異常波動的能力。當在查詢中指定counterMax值時,如果數據點接近該值并且之后的點小于先前的值,則將使用最大值來計算給定兩個點的準確率。例如,如果我們用2個字節記錄整數計數器,則最大值將是65,535。如果在t0值是64000,在t1值是 1000,每秒所得到的速率將被作為計算-63000。然而我們知道,計數器可能會翻轉,因此我們可以將最大值設置為65535,現在計算65535 - t0 + t1將會返回給我們2535。
??跟蹤計數器中數據的系統通常在重新啟動時恢復為0。發生這種情況時,如果使用最大計數器功能,我們可能會得到一個虛假的結果。例如,如果計數器在t0達到2000,同時有人重新啟動服務器時,在t1下一個值可能會500。如果我們設定最大值65535,那么結果就是65535 - 2000 + 500返回64035給我們。如果正常速度是每秒幾個點,這個特定的尖峰,在30s中的數據點之間,將創建一個速率尖峰2134.5!為了避免這種情況,我們可以設置resetValue,當速率超過這個值時,返回一個值為0數據點以避免任何一個方向上出現尖峰。對于上面的例子,如果我們知道,速度幾乎從來沒有超過100,我們可以配置resetValue為100,并且當上面的數據點被計算時,它將返回0而不是2,134.5。默認值0表示重置的值將被忽略,不會抑制rates。(不會影響rates)
??了解運算順序非常重要。返回查詢結果時,以下是處理的順序:
??1. 過濾
??1. 分組
??1. 降采樣
??1. 插值
??1. 聚合
??1. Rate轉換
??1. 函數
??1. 表達式
以上是“OpenTsdb如何查詢或讀取數據”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。