温馨提示:在读取本文之前请先确保自己对cacti的基本知识有了一定的了解(了解数据输入方法、数据模板、图形模板、主机模板的配置和使用)

声明:本文旨在分析cacti的数据库结构以便于在其基础上进行二次开发。


一、与数据输入方法相关的数据库表结构

与数据输入方法直接相关的表有三个,分别为data_input表、data_input_fields表以及data_input_data表

①data_input存放了数据输入方法的基本信息

表结构如下:

Cacti--cacti数据库详解

id:数据输入方法主键

hash:cacti利用自己定义的get_hash_data_input函数基于id生成的hash值

此方法在cacti源码中经常被使用,其使用方式如下:

Cacti--cacti数据库详解

name:数据输入方法的名称

input_string:数据输出方法对应的输入字符串

type_id:数据输入类型id,对应关系如下:

1 Script/Command

2 SNMP

3 SNMP Query

4 Script Query

5 Script - Script Server (PHP)

6 Script Query - Script Server

库表实例(红框内为自己定义的一个数据输入方法):

Cacti--cacti数据库详解

②data_input_fields存放了数据输入方法的输入输出字段

表结构如下:

Cacti--cacti数据库详解

id、hash:略过

data_input_id:指向data_input表的外键,表示该输入/输出字段关联的数据输入方法

name:字段名称

data_name: 字段对应的数据名称

input_output: 输入/输出字段的标识位

update_rra:是否更新rra

sequence:该字段的序号(是第几个字段,用于表明是第几个输入字段)

type_code:指定给该字段的类型代码(用户输入字段)

regexp_match:输入的数据要匹配的正则表达式

allow_nulls:输入数据是否允许为空

库表实例(红框内是adm_tt方法对应的输入输出字段信息):

Cacti--cacti数据库详解

③data_input_data表存放的是数据输入方法每个输入字段的输入数据(也是从此表出发建立了与数据模板的联系)

其库表结构如下:

Cacti--cacti数据库详解

data_input_field_id:指向data_input_field的外键

data_template_data_id:指向data_template_data的外键

t_value:自定义的数据输入方法一般为空

value:输入字段对应的数据

库表实例(红框内对应着数据输入方法adm_tt的输入字段ip对应的数据信息,有好几条的原因是有多个数据模板引用了这个数据输入方法,值得注意的是即使未来你删除了这些数据模板但是次数的数据仍不会被删除):

Cacti--cacti数据库详解


二、与数据模板相关的库表结构

与数据模板直接相关的表有data_template、data_template_date、date_template_date_rra、date_template_rrd

①data_template表存放的是数据模板的基本信息

表结构如下:

Cacti--cacti数据库详解

name:数据模板的名称

库表实例(红框内为手动创建的adm_tt数据模板):

Cacti--cacti数据库详解

②data_template_date存储了使用该数据模板的主机产生的数据

其表结构如下:

Cacti--cacti数据库详解

local_data_template_data_id:本地数据模板数据id,由这个id最终可以找到rra,来区分不同的rra读取方法(step不同)---实际就是关联到rra表的多对多外键

例如:

数据输入方法adm_tt关联到了local_data_template_data_id:70

Cacti--cacti数据库详解

通过date_template_date_rra记录着local_data_template_data_id与rra的关联关系,可见70对应着rra_id为1、2、3、4、5

Cacti--cacti数据库详解

查看表rra可以发现1、2、3、4、5分别对应着查看rra文件的不同steps方式

Cacti--cacti数据库详解


local_data_id:关联到data_local表的外键

data_template_id:关联到data_template表的外键

data_input_id:关联到data_input表的外键

t_name:在自定义的数据模板中一般为空,对应着下面这个checkbox的选择与否,其含义是是否需要在生成数据源的时候来指定数据源的名字,如果不勾选的话那么默认就会使用后面输入框中的名字生成数据源,如果勾选的话那么每当要生成新的数据源时就会弹出页面询问是否需要修改数据源的名字。(后面要介绍的表中有很多以t_开始的字段都是类似的作用,以后就不再赘述)

Cacti--cacti数据库详解

name:模板源名称

name_cache:模板源实例化后的名称(只有已经关联了主机的数据源这个字段才会有内容)

data_source_path:数据源路径(只有已经关联了主机的数据源这个字段才会有内容)

t_active:类似t_name

active:数据源状态

t_rrd_step:类似t_name(以后再有这类字段我就直接跳过了,每个都解释很蛋疼……)

rrd_step:步进值

实例(红框内为关联了主机后的数据):

Cacti--cacti数据库详解

③date_template_date_rra:这个在第②项中提及过,记录着local_data_template_data_id与rra的关联关系(实例在②中有截图)

表结构:

Cacti--cacti数据库详解

④date_template_rrd:记录着数据模板各个字段的rrd信息

表结构:

Cacti--cacti数据库详解

以_id结尾的字段都是指向不同表外键,以后跳过了……(每个都解释真心受不了了……请原谅)

rrd_maxinum:该字段的上限

rrd_mininum:字段下限……

rrd_heartbeat:心跳检查时间间隔

data_source_name:数据源字段(对象)名称

表实例(红框内是adm_tt相关数据,以后也不再赘述了……):

Cacti--cacti数据库详解

三、图形模板相关的数据

相关的表有:

Cacti--cacti数据库详解

①graph_template:

表结构:

Cacti--cacti数据库详解

就一个name字段表示名字……这个不用详细说了吧……

表实例:

Cacti--cacti数据库详解

②graph_template_input:存储了图形模板的输入字段

表结构:

Cacti--cacti数据库详解

name为字段名称

column_name:字段类型,有以下几种

task_item_id 数据源

color_id 颜色

alpha 不透明度

graph_type_id 图形对象类型

consolidation_function_id 合并函数

cdef_id CDEF函数

value HRULE或VRULE的值

gprint_id GPRINT类型

text_format 文本

hard_return 插入换行符

表实例:

Cacti--cacti数据库详解

③graph_templates_item:存储了图形模板对象信息

表结构:

Cacti--cacti数据库详解

未完待续……