因为我的需要主要是根据主机名和数据类型来取相关RRA数据,所以对一些关系不大的部分就没作进一步分析。就我需求而言,以下的几个表是很重要的被用于定位RRA文件路径(连文件名):
host 主机名表,主要字段:id, hostname
data_local 数据源表,主要字段:id, data_template_id, host_id, snmp_query_id, snmp_index
data_template 数据模板表, 主要字段:id
data_template_data 数据源信息表,主要字段:id, local_data_id, data_template_id, data_input_id, data_source_path, name_cache
其中host表的id与data_local表的host_id关联,data_local表和data_tempate_data表的data_template_id与data_template的id关联;data_template_data表的local_data_id和data_local表的id关联。
基于上述信息可以查到任意一个给定主机的所有RRA文件信息(data_tempate_data表的data_source_path字段)。
不过要查给定一种数据类型的数据,还需要进一步的约束条件。这里要分几种情况来分析:
第一种,类似CPU/LoadAverage等对应MIBII库限定OID数据类型的情况:
新引进以下一个表来继续分析:
data_input_data 查询输入数据信息表,主要字段:data_template_data_id,value
其中的value字段就是用来存储数据类型所对应OID的。用其data_template_data_id与data_template_data表的id关联即可实现该约束的加强。
第二种,用data_query方法和XML文件定义来实现数据模板的数据类型的情况:
需新引进以下一个表来继续分析:
snmp_query_graph_rrd 数据源查询字段表, 主要字段:data_template_id,snmp_field_name。
其中的snmp_field_name字段就是用来存储数据类型相关SNMP的NODE DESCRIPTION的,用其data_template_id和data_template_data表的data_template_id关联,即可实现该约束的加强。
第三种,这是第二种情况的延伸,即data_query方法是属于index类的(即返回多列数据,由返回列的描述字段来自扩展数据源)。
用data_local表的snmp_index或data_template_data的name_cache来实现该约束的加强。