Cacti 安装高效轮询器 Spine

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分钟。