cacti 我们也用了很久了,但是它的表结构一直都没有去关心过,得空抽了半个晚上的时间,把它的库表结构大概看了下,某些字段的含义跟大家分享下:
cacti 的数据都是存放在rrdtool 中的,数据库存放的其实只是配置数据,cacti 的逻辑对象主要分为三种,data (数据)、graph (图片)、host (设备),这在它的表设计中也能很容易的看出来。所以,就分三个大类来讨论了
Cacti 如何实现被动数据获取
了解到它的数据结构以后,我们就可以想办法来实现 cacti 的被动数据获取了,因为并不是所有场合, snmp 都可以取到数据的,也许有时候我们要取的 ip 在另外一个局域网里,也许我们觉得 cacti 的负载太高,不能让它取太多的数据。
1 、方式
方式很简单,在 cacti 中定义好 host , data , graph ,然后只要我们能定时的把数据插入到它的 rrd 文件中就可以了。
2 、方法
方法可以有两种:
***种用脚本, cacti 支持自写脚本取数据。最土的办法,就是定时的将数据推送到 cacti 的机器上,追加到一个文件里,然后 cacti 通过一个脚本读取这个文件来获取数据。
第二种就是直接插 rrd 文件, cacti 正常的获取数据方式是用 crontab 跑 poller ,或者 spine ,去定时取数据。我们在 poller 或者 spine 的过程中不需要让它去取数据,直接跳过,而定时的从外部把数据推送进来,然后插入 rrd 文件即可。
3 、步骤
a 、添加一个 host (如果这个 host 无法访问到,那么可用性检查会失败,但是没关系)
b 、添加数据源,需要 insert 以下几张表: data_local 、 data_template_data 、 data_template_data_rra 、 data_template_rrd
c 、创建 rrd 文件,打开 data source 页面,应该已经可以看到我们添加的数据源了,打开那个数据源的 debug 模式,将 rrdtool 的命令拷贝到 shell 中执行一次即可(注意权限)
d 、创建一个图片,需要 insert 以下几张表: graph_local 、 graph_template_graph 、 graph_template_item
e 、定时的向 rrd 文件中插入数据(用你喜欢的方式,同时要注意 rrd 文件的权限)
【编辑推荐】