在opennms中,*thresholder负责从rrd文件中读取数据,然后比较,产生事件。现在要把数据从rrd文件转移到数据库中。
在最初的实现中,收集到的流量数据在rrd文件中,因此在流量检测时也需要从rrd文件读取数据。现在将流量数据存放在trend_data(snmp数据)和tb_response(其他service的响应时间)中,相应的也需要从数据库中读取数据进行比较。
其中负责读取流量数据的是各个service的thresholder,也就是SnmpThresholder, LatencyThresholder。
在LatencyThresholder中,check()函数取得每个节点的response数据文件所在目录,然后调用checkRrdDir函数。CheckRrdDir()函数通过查看该目录下的所有文件名,获得该节点支持的service列表,然后对于每个service,通过调用fetch函数从该rrd文件中读取数据。
在SnmpThresholder中,check()函数取得每个节点的snmp数据文件所在目录,因为snmp数据分为”node” “if”两种类型,node类型数据项的rrd文件直接该目录下,该节点的每个interface对应在该目录下有一个子目录,if类型数据项的rrd文件在这个子目录下。对于node类型数据项,调用checkNodeDir函数。对于if类型数据项,调用checIfDir()函数进行处理。CheckNodeDir()函数通过查看该目录下的所有文件名,获得该节点支持的node类型的数据项列表,然后对于每个数据项,通过调用fetch函数从该rrd文件中读取数据。CheckIfDir()函数通过查看该interface对应的字目录下的所有文件名,获得该interface支持的if类型的数据项列表,然后对每个数据项,通过调用fetch函数从该rrd文件中读取数据。
所以更换数据库之需要更改check、check*Dir、fetch三个函数。Service/数据项列表、数据值都从数据库获得即可。