Cacti的庫表結構-Data
cacti 我們也用了很久了,但是它的表結構一直都沒有去關心過,得空抽了半個晚上的時間,把它的庫表結構大概看了下,某些字段的含義跟大家分享下:
cacti 的數據都是存放在rrdtool 中的,數據庫存放的其實只是配置數據,cacti 的邏輯對象主要分為三種,data (數據)、graph (圖片)、host (設備),這在它的表設計中也能很容易的看出來。所以,就分三個大類來討論了
二、 Data
data 主要就是數據獲取,獲取數據,然后存放到 rrd 文件中,這里存放的數據,主要就是如何獲取數據、和如何存放數據這兩種。
1 、 data_input 表
數據獲取的方式,在 console 中的 data_input_method 里可以看到。
id :數據獲取方式的 id
hash :對應的磁盤索引
name :數據獲取方式的名字
input_string :如果是腳本的話,那就是腳本的位置了
type_id : type 一直沒找到對應的表,可能是程序里寫死了,對應的是 input_type ,有 6 個選項,分別是: snmp 、 snmp query 、 script/command 、 script query 、 script – script server 、 script query – script server
2 、 data_input_fields 表
這張表是用來存放一些 data_input 方法中所需要的對象,比如 snmp 的 oid ,那就是一個對象, script 方式取硬盤時候,取回來值的名字,單位,都屬于它所定義的范疇。表內容,主要是這些對象,和 data_input 的對應。
id : input_fields 的 id
data_input_id :對應 data_input 表中的 id
name 、 data_name :名字
input_output :輸入還是輸出
下面幾個字段我也不清楚了……
3 、 data_input_data 表
存放的是每個 data 對象的 data_input_field 內容。
data_input_field_id : data_input_field 中的 id
data_template_data_id : data_template_data 中的 id
4 、 data_local 表
存放數據對象,就是在 console 中的 data source 頁面看到的東東。不過這張表只是簡單的定義一個對象和對應關系,對象的具體屬性在另外的表中。
id : data 的 id
data_template_id :采用了哪個數據模板,在 data_templates 模板中定義
host_id :是哪個設備的數據,在 host 中定義
snmp_query_id :如果是通過 snmp_query 方式獲取的,那對應的 snmp_query 的 id ,如果不是,則為 0
snmp_index : snmp_query 方式獲取數據時,獲取數組的前綴。例如,流量獲取中,端口的 index
5 、 data_template 表
數據模板,我們在 console 的 data templates 中看到的東東。
id :數據模板的 id
hash :索引
name :名字
6 、 data_template_data 表
具體數據對象的信息,包含模板。可以認為,每一個對象都代表一個 rrd 文件。
id : data 對象的 id
local_data_template_data_id :如果使用了模板,那這個就是模板的 id ,定義的位置也是這個表
local_data_id :對應的數據對象,在 data_local 表中定義
data_template_id : data_template ,數據模板,在 data_template 表中定義。
data_input_id :數據獲取的方式,在 data_input 表中定義
*name :名字,就是字面的意思
data_source_path : rrd 文件的路徑
active :是否被激活,可以通過 enable/disable 來控制
rrd_step :步長,默認是 300s ,就是 5 分鐘,也就是多長時間存一個數據( rrdcreate 的選項)
7 、 data_template_data_rra 表
數據對象和 rra 的對應, rra 也是 rrdtool 中的概念,是一種數據歸檔壓縮的機制。
data_template_data_id :上張表中定義的 id
rra_id :對應的 rra 的 id ,在 rra 表中定義
8 、 data_template_rrd 表
基本上也是 rrdtool 的配置選項,一個 rrd 文件可以存多列,叫做 ds ,每個列代表一組數據。這張表可以看成是對這個列的定義。
id : ds 的 id
local_data_template_rrd_id :如果使用了 ds 的模板,則這里定義模板的 id ,模板定義也在這張表中
local_data_id :數據 id ,在 data_local 表中定義
data_template_id :采用的數據模板,在 data_template_data 中定義
其余的都是 rrdtool 在創建 rrd 文件時候,對這個 ds 的配置選項,例如***值,名字等等。
data 部分還是比較復雜的,如果和 host 連起來看,就更復雜了。拋開模板不談,一般來講是有以下的對應關系:
1 、每個 host_id ,都有一組 local_data_id ,例如,一個 cisco 交換機的 cpu 就是一個 local_data_id ,它的一個端口—— te1/1 流量,也是一個 local_data_id 。一個 host_id 對應多個 local_data_id 。
2 、每個 local_data_id ,就是一個數據源,它必須有一個 rrd 文件與他對應,所以每個 local_data_id 在 data_template_data 中,必定對應一行記錄,必定有一個 rrd 文件。別看 data_template_data 中有那么多記錄,其中 local_data_id 為 0 的,或者 rrd 路徑為空的,那都是模板。
3 、每個 rrd 文件,必然至少有一個 ds ,也就是在 data_template_rrd 中,至少有一條記錄,例如流量,還是 cisco 的交換機,每個端口代表一個 local_data_id ,有一個 rrd 文件,有兩個 ds ,流入和流出,那在 data_template_rrd 中就有兩條記錄。
4 、 data_input 那幾張表,主要是數據獲取方式,數據獲取方式有 6 種,我們一般用的是三種:腳本直接取,就是 script 、 snmp ,給個 oid 直接 get 、 snmp query ,就是 snmp 取回來一組數據,然后分組。
【編輯推薦】