天天看點

《Cacti實戰》——3.2 存儲流程

本節書摘來自華章計算機《cacti實戰》一書中的第3章,第3.2節,作者:劉钊,張躍著, 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

當資料通過snmp或者腳本查詢的方式被cacti系統擷取之後,這些資料會分門别類地存儲,cacti的工作流程就進入資料存儲這一步驟。在cacti系統中,資料一般會分為兩種,一種是監控名額的資料,它們以普通檔案的方式(rra檔案)存儲在檔案系統中,另一種是系統必備的中繼資料,它們以結構化資料的方式存儲在資料庫中。下面分别介紹這兩種資料是如何存儲的。

3.2.1 rrdtool存儲方式

在前面章節已經介紹了rrdtool基本知識,rrdtool的存儲方式,也很有必要學習。rrdtool的存儲方式比較有意思,簡單來說,可以将這種存儲方式比喻成一個圓鐘,資料存儲的時間節點就是圓鐘上的分鐘刻度,圓鐘的箭頭就好像讀取資料的方式,它日複一日,年複一年地不斷轉動,沒有起點和終點,指針可以一直往下走下去。每轉動一圈,所有存儲了資料的時間節點都會被重用,該循環過程會自動重新整理原來的位置。這樣的設計可以使存儲的資料集不會增大,并且維護起來非常簡單。

通過一個形象的例子說明rrdtool的資料存儲原理。假設有一個裝置需要監控,姑且叫做a裝置,a裝置運作起來之後會有很多描述運作狀态的資料,我們把它想象成一個大型的資料池。rrdtool的工作就是要按照使用者的要求擷取指定的資料并儲存起來。假設需要rrdtool以3種方式來讀取資料,即每5分鐘采集一次資料、每20分鐘(4個5分鐘)采集一次資料和每一小時(12個5分鐘)采集一次資料。

在3-4圖中,rrdtool會每5分鐘采集一次資料,并儲存在一個rra檔案中,當運作到20分鐘時,以每5分鐘采集一次資料的方式進行到了第4次,這一次的資料不僅會被每5分鐘采集資料的政策存儲下來,同時它作為一個每20分鐘采集資料政策的第一個資料存儲下來。以此類推,當每5分鐘采集資料進行了12次之後,第一個每小時采集資料的政策也會記錄它的第一個資料。

《Cacti實戰》——3.2 存儲流程

從這個過程中不難發現,對于采集同一名額的資料,rrdtool可以按照時間政策存儲多個rra資料檔案,并且rra檔案采用固定大小來存儲,當資料寫滿之後,之前寫過的位置會被系統重用寫入新的資料。

3.2.2 資料庫存儲方式

資料庫存儲通常用來儲存cacti系統必備的中繼資料内容,那麼什麼是中繼資料呢?簡單來說就是“描述資料的資料”(data about data)。其中,後一個data是指被描述的資訊資源,前一個data則是指為了解該資訊資源而存儲的有關資訊,即中繼資料。例如,一組資料“15,26,31,15”,如果沒有中繼資料對它進行描述,這一組資料就毫無意義,假如有一組中繼資料将它描述為“今天夜間的最低氣溫,明天白天的最高氣溫,一周之内的最高氣溫,一周之内的最低氣溫”,那麼前面的4個數字變成了表達天氣的資料,就變得有意義了。如果我們換一組中繼資料為“停車場1樓的空車位,停車場2樓的空車位,停車場3樓的空車位,停車場4樓的空車位”,則這一組數字就變成了描述空車位的資料。這就是中繼資料的作用。

cacti系統将中繼資料儲存在mysql資料庫中,通過關系型資料結構的方式存儲。通過檢視其中一個資料庫來了解cacti資料庫的表結構存儲了哪些中繼資料資訊。如表3-1所示,“plugin_config”資料庫的主要作用是存儲用來描述cacti插件的基本資訊。從字段注釋,不難看出cacti資料庫的主要作用就是存儲描述cacti系統的各種中繼資料。

《Cacti實戰》——3.2 存儲流程

附錄完整呈現了cacti資料庫的結構,這裡為節省篇幅不再贅述。