cacti 我们也用了很久了,但是它的表结构一直都没有去关心过,得空抽了半个晚上的时间,把它的库表结构大概看了下,某些字段的含义跟大家分享下:
cacti 的数据都是存放在rrdtool 中的,数据库存放的其实只是配置数据,cacti 的逻辑对象主要分为三种,data (数据)、graph (图片)、host (设备),这在它的表设计中也能很容易的看出来。所以,就分三个大类来讨论了
Graph
绘图方面,自定义的方法其实很多, cacti 并没有把 rrdtool 在绘图方面的参数全部表现出来,不过也已经够用了。
1 、 graph_local 表
本地的图片,和 data_local 类似,一般来讲,一个 data_local 的对象,都会对应一个 graph_local 的对象,意思就是,一个数据,对应一张图片,但是也有可能出现不对应的情况,那就是:我有些数据并不绘图、或者有些图我需要多个数据。
表结构和 data_local 类似,不过 data_template_id 换成了 graph_template_id ,***个 id 字段代表的含义也变了,代表 graph 对象。
2 、 graph_templates 表
绘图模板。
id :模板的 id
hash :索引
name :名称
3 、 graph_template_input 表
graph_template 对应的具体对象类型,比如说这个类型是个颜色,这个类型是流量数据流入的数据源,等等。
id :数据类型的 id
hash :索引
graph_template_id :图片模型的 id ,在 graph_template 中定义
name :名字
description :不作说明了
column_name :对象的类型,是颜色,还是数据源,还是一段文字
4 、 graph_template_input_defs 表
定义图中的具体对象类型和 item 的对应。
graph_template_input_id : graph_template_input 的 id ,类型是什么
graph_template_item_id :具体对象的 id ,在 graph_templates_item 中定义
5 、 graph_templates_gprint 表
输出格式
6 、 graph_templates_graph 表
绘图时候的选项,每张图在这张表中对应一条记录,大多是 rrdtool 的参数。和 data_template_data 类似。
id :绘图选项的 id
local_graph_template_graph_id :如果采用模板的话,这里就是模板的 id 。模板中定义好的东西,就不用重新定义了。在本张表中有定义
local_graph_id :是哪张图,在 graph_local 中定义
graph_template_id :在 graph_templates 表中定义的绘图模板
剩下的都是 rrd 绘图的选项了,例如绘的图有多高,多宽,图片的名字是啥等等 ......
7 、 graph_templates_item 表
每张图上,对应的有些什么内容。内容主要是包含:线或者是面,就是趋势图、下面的标注,例如***值,最小值,当前值。
id : item 的 id
hash :
local_graph_template_item_id :如果采用了模板,则写模板的 id ,在本表中定义
local_graph_id :对象属于哪张图
graph_template_id :在 graph_templates 表中定义的绘图模板
task_item_id :如果对象的类型是 task_item_id (在 graph_template_input 中定义),则这里的 id 就是数据源的 id ,在 data_template_rrd 中定义。
color_id :颜色,在 color 表中定义
alpha :透明度
graph_type_id :图的类型?
cdef_id :如果这个值是计算出来的(例如多个值的累加),那这里要有计算的公式,在 cdef 表中定义
consolidation_function_id :功能函数,比如取平均值,取***值等
text_format :字符串,直接显示在图上的东东,可以理解为对象的名字
value :值
hard_return :不知
gprint_id :输出格式
sequence : rrd 的绘图是有顺序的, sequence 大的对象会覆盖 sequence 小的对象
绘图的地方,是最复杂的地方,因为 rrdtool 本身在绘图的时候参数就是最多的,也是最复杂的,把这些东西都封装到数据库中,那这些表结构也是十分复杂的。一般情况下,可以这么理解:
1 、每个 host_id 的对象,可以对应多张图,但是也有可能有某些图并不对应任何 host ,例如汇总的图。但是每张图必然在 graph_local 中有定义,就是有一个 local_graph_id 。
2 、每张图片,在创建的时候肯定有很多参数,这些参数就是在 graph_template_graph 中定义的。如果采用了模板,那模板中定义过的参数,就不用再重复定义了。
3 、每张图片,必然包含一个以上的对象,那就是 graph_template_item 了, item 有很多类型,例如,流量图中,绿色区域代表的流出、蓝色实线代表的流出,就分别代表一个对象。还有些对象,例如下标的***值,平均值等。这些对象,都是需要有数据源的,可能一个数据源,也可能需要多个,因为实际绘出来的值,是 cdef 把不同的数据源运算后得到的。这个数据源,就是 ds ,也就是 data_template_rrd 中的对象。
【编辑推荐】