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在做什么,可能會在查詢時導致意外的結果。
參考資料
http://opentsdb.net/docs/build/html/user_guide/query/examples.html
http://opentsdb.net/docs/build/html/user_guide/query/filters.html