Cacti 获取数据的方式有两种:
1.监控端的脚本(可以是php, shell, perl 或其他脚本)
2.或者 snmp 协议获取。
Cacti 会在固定的时间间隔启动轮询进程,使用定义好的方式获取被监控的数据,这种监控方式通常叫做 主动监控 。执行轮询获取数据的进程叫做 cmd.php 它由 poller.php 调用, poller.php 在监控机上由计划任务定时执行。数据量多的时候,可以设置启动多个 cmd.php 进程, 或者使用 spine 这个程序,它由 c 语言编写,效率更高,可以实现多进程加多线程。
主动监控的优点是被监控端通常不需要额外安装其他软件,一切数据由监控端主动来获取。
主动监控的缺点很明显,如果某些被监控端出现异常,获取不到数据或者数据获取延迟。那么监控端的轮询进程需要等待这些被监控数据获取超时或延迟,这样必然会阻塞轮询进程去获取其他数据,在轮询时间短或主机较多的情况下,可能出现在轮询周期已经结束,下一次轮询已经开始,而本次轮询还没有结束,造成某些没来得及获取。
(在大规模的监控体系中,一般使用 被动监控 ,客户端主动向监控机发送数据。 被动监控 一般需要在客户端安装监控代理程序,Nagios 和 Zabbix 可以实现被动监控,而 Cacti 只支持主动监控)
Cacti抓取数据方式:使用poller.php 抓取数据
poller.php顾名思义,就是轮询器。它是cacti能够周期性获取数据原始驱动。poller.php是cacti获取数据的一个工具,这个工具是没有办法替代的,cacti必须使用poller.php才能正常工作。
poller.php负责调用cmd.php或者spine。
可以这样认为,poller.php是最终汇总数据的,而cmd.php是获取数据的就行。poller.php发出获取数据的信号,告诉cmd.php 去获取数据,然后cmd.php就会调用那些定义好的数据收集方法去获取数据。
poller.php可以调用cmd.php, 但是由于cmd.php效率不高,最短执行周期是5分钟,因此cacti提供了一个更高效的工具spine来替代cmd.php,最短执行周期1分钟,可以极大的提高效率。
所以,无论是使用cmd.php,还是spine,我们都必须设置 poller.php 的 cron 计划任务,让poller.php去驱动cmd.php或者spine工作。 spine是根据我们设定Poller Interval设置的值运行的,poller.php则是我们cron计划任务控制运行的,结果就是按照cron中定义的进行汇总。最好把Poller Interval 和 cron 定义的周期相同,否则可能出现误差,莫名其妙的问题。
安装spine
# yum -y install cacti-spine
配置spine数据库连接
# vim /etc/spine.conf
将数据库连接改为正确的连接账号
DB_Host localhost DB_Database cacti DB_User cacti DB_Pass cactipasswd DB_Port 3306
测试spine
# spine SPINE: Using spine config file [/etc/spine.conf] SPINE: Version 1.2.5 starting SPINE: Time: 1.0142 s, Threads: 1, Devices: 1
设置spine路径
依次点击 Console -> Configuration -> Settings -> Paths -> Alternate Poller Path -> Spine Binary File Location
将spine二进制路径改为 /usr/bin/spine
设置cacti轮询器为spine
依次点击 Console -> Configuration -> Settings ->Poller->Poller Type
在下拉列表中选择spine
设置轮询时间
根据实际情况可修改Poller Interval 和 Cron Interval 间隔时间为每分钟,默认是5分钟。