快速理解OpenTSDB的Schema設計

2021-09-24 04:16:33 字數 3068 閱讀 6119

在時序資料庫中,time series是乙個基礎概念。我們先來看看wiki中關於time series的定義:

time series是一組按照時間發生先後順序進行排列的資料點序列。通常一組時間序列的時間間隔為一恆定值(如1秒,5分鐘,1小時等)。

我們可以這樣命名乙個time series:

webserver01.sys.cpu.0.user

這樣從名稱中可以很容易獲知該time series關聯了如下資訊:

web server: webserver01

cpu core:  0

如果我們的查詢可以同時指定web server以及cpu core的話,這種設計則非常適合。

但對於乙個擁有64 cores的web server,如果查詢所有cpu cores的聚合結果的話,可以通過如下的萬用字元來匹配所有相關的time series:

查詢1: webserver01.sys.cpu.*.user

這樣,可以獲取到64個time series,然後聚合結果即可。

查詢2: .sys.cpu..user

關於如上兩種查詢,一種可選的加速方案為:在這64個time series之外,記錄乙個名為」webserver01.sys.cpu.user.all」的time series,這樣可以加速查詢1中所有cpu cores的聚合統計計算。 而關於查詢2,可以記錄乙個名為」webservers.sys.cpu.user.all」的time series來進行加速。

在opentsdb的schema定義中,引入了tag的概念。每乙個time series包含乙個metric名稱,但可能包含包含1組或多組tags資訊(每乙個tag包含乙個tagkey與ta**alue),以前面的」webserver01.sys.cpu.0.user」為例,在opentsdb表示為:

sys.cpu.user host=webserver01, cpu=0

將其拆解後的構成資訊:

sys.cpu.user :

host :

webserver01 :

cpu :

0 :

opentsdb中的乙個time series,由metric name與x個tags(x>=1)唯一決定。

例如:sys.cpu.user host=webserver01

sys.cpu.user host=webserver01, cpu=0

sys.cpu.user host=webserver02, cpu=1

代表了三個不同的time series。

如果查詢時指定web server,指定cpu core的聚合結果,可以簡單表達為:

sum: sys.cpu.user

注:實際查詢時需要指定時間資訊,這裡為了簡單起見,省略了時間資訊,下同。

如果查詢web server上所有的cpu cores的聚合結果,可以這麼表達:

sum: sys.cpu.user

這樣就可以匯聚了webserver01上所有cpu cores所關聯的time series的結果。

再進一步,如果查詢所有的web servers所有cpu cores的聚合結果,可以這麼表達:

sum: sys.cpu.user

與同一metric name相關的所有的time series資訊,都是相鄰儲存的,因此,我們可以輕易實現與此metric相關的快速聚合查詢或結果鑽取。

既然了解了opentsdb的schema由metric與tags構成,我們接下來看看需要注意的乙個問題:

sys.cpu.user host=webserver01,cpu=0  1356998400  1

sys.cpu.user host=webserver01,cpu=1  1356998400  0

sys.cpu.user host=webserver01,cpu=2  1356998400  2

sys.cpu.user host=webserver01,cpu=3  1356998400  0

…sys.cpu.user host=webserver01,cpu=63 1356998400  1

而且我們使用了如下命名的time series來記錄關於這個web server上的所有cpu cores的聚合結果:

sys.cpu.user host=webserver01        1356998400  50

也就是說,表中一共儲存了65條記錄。

關於如下查詢:sum:sys.cpu.user

我們期望的聚合結果應該為50,但實際的查詢結果卻會變為100,這是因為這次查詢共聚合了下面的65條記錄的結果:

sys.cpu.user host=webserver01 1356998400 50

sys.cpu.user host=webserver01,cpu=0  1356998400  1

sys.cpu.user host=webserver01,cpu=1  1356998400  0

sys.cpu.user host=webserver01,cpu=2  1356998400  2

sys.cpu.user host=webserver01,cpu=3  1356998400  0

…sys.cpu.user host=webserver01,cpu=63 1356998400  1

再舉乙個典型的例子來闡述說明一下這裡的查詢行為:

如果查詢條件為」sum:sys.cpu.user 」, 如下這些time series都將會被包含其中:

sys.cpu.user host=webserver01,cpu=0

sys.cpu.user host=webserver01,cpu=0,manufacturer=intel

sys.cpu.userhost=webserver01,foo=bar

sys.cpu.user host=webserver01,cpu=0,datacenter=lax,department=ops

因為這些與」sys.cpu.use」的time series中都包含了tag (儘管有一些time series中包含了更多的tags)。

因此,使用opentsdb時需要注意關於tags定義方面的問題。

SC快速聯結器的特點

在光纖佈線中,在某些情況下需要現場聯結器元件。典型的例子是點對點安裝,現場安裝或維修。現場安裝聯結器 faoc 也稱為快速 快速聯結器,是預埋型光纖連線頭,可在現場安裝和連線。它廣泛用於需要快速連線的地方,提供快速裝配和穩定的效能。施工工具簡單方便,無需電源,操作方便,大大提高了施工效率,降低了ft...

分析 OpenTSDB資料的儲存

下面結合例子看看opentsdb儲存的一些核心概念 1 metric 即平時我們所說的監控項。譬如上面的 cpu 使用率。2 tags 就是一些標籤,在 opentsdb 裡面,tags 由 tagk 和 tagv 組成,即 tagk takv。標籤是用來描述metric的,譬如上面為了標記是伺服器...

快速排序的理解

快速排序是對氣泡排序的一種改進。它的基本思想是通過一趟掃瞄後,使得排序序列的長度能大幅度地減少。通過一趟掃瞄,確保以某個數為基準點的左邊各數都比它小,右邊各數都比它大。然後又用同樣的方法處理它左右兩邊的數,直到基準點的左右只有乙個元素為止。簡單的說就是 找乙個基準數 待排序的任意數,一般都是選定首元...