翻譯 OpenTSDB 2 3 文件 聚合

2021-08-30 17:41:27 字數 3091 閱讀 7784

但是,如何將多個單獨的時間序列合併為乙個系列的資料呢?聚合函式提供了以數學方式將不同時間序列合併為乙個的方法。過濾器用於按標籤對結果進行分組,然後將聚合應用於每個組(先進行分組,再進行聚合)。聚合類似於sql的group by子句,使用者選擇預定義的聚合函式以將多個記錄合併為單個結果。但是在tsd中,通過時間戳和組將聚合出一組記錄。

每個聚合器都有兩個元件:

本文件重點介紹如何在乙個組中按上下文使用聚合器,即將多個時間序列合併為乙個。此外,聚合器可用於下取樣時間序列(即返回較低解析度的結果集)。有關更多資訊,請參閱下取樣。

在將多組時間序列聚合或分組成為為乙個時,每個組的時間序列中的時間戳都是對齊的。然後,對於每個時間戳,將所有時間序列中的值聚合為新的數值。也就是說,聚合將工作跨越時間序列的每個時間戳。將原始資料視為矩陣或**,如以下示例所示,該示例說明sum聚合器在兩個時間序列中的作用,a並b生成新的時間序列output。

對於時間戳t0,對a和b的資料點進行求和,即5 + 10 = 15。接下來,將t1的兩個值相加得到10,以此類推。在sql中,這看起來像是select sum(value) from ts_table group by timestamp。

在上面的例子中,時間序列a和b每個時間戳都有資料點,它們排列整齊。然而,當兩個系列沒有對齊時會發生什麼?同步所有資料來源以在同一時間寫入資料可能是困難的,有時是不切實際的。例如,如果我們有10,000臺伺服器每5分鐘傳送100個系統指標,那麼這將是一秒鐘內的10m資料點突發。我們需要乙個非常強大的網路和集群來適應這種流量。更不用說系統將閒置4分59秒。相反,隨著時間的推移顯示寫入更有意義,因此我們平均每秒有3,333次寫入,以減少我們的硬體和網路要求。

缺失資料

「缺失」只是意味著時間序列在給定的時間戳上沒有資料點。通常,資料只是在請求的時間戳之前或之後進行時間移位,但如果源或tsd遇到錯誤並且未記錄資料,則實際上可能會丟失資料。某些時序資料庫db可以允許在某個時間戳處儲存nan,以表示不可記錄的值,但是opentsdb還不支援這樣。

如何累加或找平均乙個不存在的值?第一直覺就是返回有效的資料點並用這些資料來完成工作。但是,如果你像上面那樣處理數千個資料點根本不對齊的資料來源呢?例如,下圖顯示了未對齊寫入的時間序列,導致鋸齒狀線條難以讀取:

另一種選擇是定義乙個標量值(例如0或者long的最大值)來代替丟失的資料。opentsdb 2.0及更高版本提供了一些聚合方法,用於替換缺失資料點的標量值,實際上,上圖是使用zimsum聚合器生成的,該聚合器將未對齊值替換為零。這種替換有時候很有用,有時候卻不一定有用。

opentsdb提供的乙個答案是使用定義良好的插值數值分析方法來猜測該時間點的值。插值使用現有資料點作為時間序列,以在請求的時間戳處計算最佳猜測值。使用opentsdb的線性插值,我們可以平滑我們的未對齊圖形,以獲得:

對於數值示例,請檢視這兩個時間序列,其中源每20秒發出一次值,資料只是偏移10秒:

當opentsdb計算聚合時,它會從任何序列找到的第乙個資料點開始,在這種情況下,在b中的資料是t0時刻的資料。我們請求a在t0時刻的值,t0但那裡沒有任何資料。我們知道a在t0+10s時有資料,但由於我們沒有t0之前的資料,我們無法猜測a在t0時它會是什麼。因此,我們只返回值b在t0的值。

接下來,我們訪問a在時間t0+10s的資料,這個資料是存在的。但是我們取t0+10s時間序列的值,b但沒有乙個。但是b知道t0有乙個值,t0+20s有乙個值,所以我們現在可以猜測計算t0+10s的值。對於線性插值的公式是其中,公式就不列了,線性插值,結果是15.

迭代在每個時間戳上繼續,對於作為查詢的一部分返回的每個系列,找到資料點。使用sum聚合器生成的系列將如下所示:

更多示例: 對於圖示,我們有以下示例。名為的虛擬度量標準m記錄在opentsdb中。查詢語句為start=1h-ago&m=sum:m。它由紅線host=foo和綠線host=bar的和構成藍線:

(說白的,上面那張圖是按上面那種插值方式求和)從上圖中可以直觀地看出,如果你「疊加」紅線和綠線,你就會得到藍線。在任何離散時間點,藍線的值等於紅線的值與此時綠線的值之和。如果沒有插值,你會得到一些非常不直觀的東西,這些東西更難以理解,而且它也沒那麼有意義和有用(說白的下面那張圖是不進行插值,沒有就設為0得到的):

目前,opentsdb主要支援線性插值(有時縮短為「lerp」)以及一些簡單地替換零或最大值或最小值的聚合器。對於想要新增其他插值方法的人,歡迎使用補丁。

只會在查詢時執行插值。許多系統在寫入時進行插值,因此會記錄非原始值。opentsdb儲存您的原始值,並允許您隨時檢索它(即opentsdb的插值不會被落庫)。

以下是來自郵件列表的另乙個稍微複雜的示例,描述了如何按平均值聚合多個時間序列:

帶有三角形的粗藍線是根據查詢具有多個時間序列函式值聚合而成的,而聚合的方式是對與丟失的值視為0,從而得到藍色所在的圖(好像沒啥意義)

注意:聚合函式根據輸入資料點的型別決定返回整數還是double 值。如果兩個源值都是儲存中的整數,則生成的計算將為整數。這意味著計算產生的任何小數值都將被刪除,不會發生捨入。如果任一資料點是浮點值,則結果將是浮點。但是,如果啟用了下取樣或速率,則結果將始終為浮點數。

WSE 3 0 文件翻譯 路由

文件翻譯 wse 的新功能 下面的篇幅主要講述wse的路由功能 乙個使用wse的應用程式能夠被設計成對客戶端透明的計算機網路拓撲結構。為了建立這樣乙個透明的網路拓撲結構,需要為一台中介計算機進行配置來執行wse路由,這時候,客戶端將請求傳送給路由,而不是網路服務,而路由再將soap訊息報文傳遞給網路...

Apache Mina 2 文件翻譯 章節彙總

size x large apache mina 2 文件翻譯 章節彙總 size url 第一章 開始 url url 第二章 基礎 url url 第三章 ioservice url url 第四章 session url url 第五章 過濾器 url url 第六章 傳輸協議 url url...

MediaPlayer的一點文件翻譯

另外乙個開發者必須要多加小心的地方是medplayer的狀態管理。因為一些medplayer的方法開發者必須在mediaplayer合適的狀態下呼叫,否則很有可能丟擲異常或者未知的錯誤。在寫 的時候,永遠心裡想著mediaplayer的各種狀態變化,因為大部分的bug都是在某個狀態下呼叫了錯誤的方法...