前言

经常接触数通设备的朋友一定很熟悉 Cacti (仙人掌)监控,作为老牌开源监控软件,Cacti 常用于交换机、路由器等数通设备的监控,方便可视化感知网络流量和故障分析,但是常常有不少朋友会被其繁琐的部署流程而难倒,前段时间我把我的 Cacti 从 Docker 里面移到了虚拟机里面跑,并且升级到了最新版本,也顺带讲讲怎么部署

准备虚拟机,安装环境

  • CentOS 7.x 的虚拟机一台
  • 内存和核核尽量多给一些,尤其是要监控的设备比较多的时候,Cacti 还是比较吃性能的,在内存和核数给的少的时候,添加设备过程会比较慢……

添加 epel 源

yum install epel-release

添加 wlnmp 一键包源,装起来会比较方便

rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm

关于这个源的更多信息可见:https://www.wlnmp.com/

安装 nginx、php、mysql

yum install wnginx wphp71 wmysql57

安装php扩展及其他所需依赖

yum install wphp71-ldap wphp71-snmp wrrdtool wnet-snmp wspine sendmail

设置软链接

ln -sv /usr/local/mysql/lib/libmysqlclient.so.20 /usr/lib64/libmysqlclient.so.20
ln -sv /usr/local/mysql/lib/libmysqlclient.so /usr/lib64/libmysqlclient.so

取消被禁用的 php 函数

vi /usr/local/php/etc/php.ini
# 找到disable_functions行,删除shell_exec,exec,popen,保存退出,重启php服务
/etc/init.d/php-fpm71 restart

启动相关服务

/etc/init.d/nginx restart
/etc/init.d/mysql restart
/etc/init.d/snmpd restart

后面动了服务之后最好也重启一下

修改 MySQL 密码,创建 cacti 数据库,添加权限

mysql -uroot -p
# mysql 默认密码是空,记得下面的 “test123” 换成自己的高强度密码
mysql> set password = password('test123');
mysql> CREATE DATABASE cacti DEFAULT CHARACTER SET utf8;
mysql> GRANT ALL ON cacti.* TO cacti@localhost IDENTIFIED BY 'test123';
mysql> GRANT SELECT ON mysql.time_zone_name TO cacti@localhost IDENTIFIED BY 'test123';
mysql> ALTER DATABASE cacti CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
mysql> flush privileges;
mysql> quit

加载时区到 MySQL 数据库

/usr/local/mysql/bin/mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -uroot -ptest123 mysql

部署 Cacti

下载 Cacti

推荐下载好之后传上去,或者传到内网的文件服务器

mkdir /data/www
cd /data/www
wget https://files.cacti.net/cacti/linux/cacti-1.2.24.tar.gz
tar xf cacti-1.2.24.tar.gz
mv cacti-1.2.24 cacti

修改 cacti 数据库配置文件

cd /data/www/cacti/include
vi config.php
$database_type = 'mysql';
$database_default = 'cacti';
$database_hostname = '127.0.0.1';
$database_username = 'cacti';
$database_password = 'test123';
$database_port = '3306';
$database_retries = 5;
$database_ssl = false;
$database_ssl_key = '';
$database_ssl_cert = '';
$database_ssl_ca = '';
$database_persist = false;

导入 cacti.sql

mysql -uroot -ptest123 cacti < /data/www/cacti/cacti.sql

继续做软链接

ln -sv /usr/local/rrdtool/bin/rrdtool /usr/local/bin/rrdtool
ln -sv /usr/local/php/bin/php /usr/bin/php
ln -sv /usr/local/snmp/bin/snmpwalk /usr/local/bin/snmpwalk
ln -sv /usr/local/snmp/bin/snmpget /usr/local/bin/snmpget
ln -sv /usr/local/snmp/bin/snmpbulkwalk /usr/local/bin/snmpbulkwalk
ln -sv /usr/local/snmp/bin/snmpgetnext /usr/local/bin/snmpgetnext
ln -sv /usr/local/snmp/bin/snmptrap /usr/local/bin/snmptrap

修改cacti目录权限

chown -R www:www /data/www/cacti/

修改 nginx 配置

vi /usr/local/nginx/conf/vhost/demo.conf
# 修改root路径为root /data/www;,取消php注释include enable-php71.conf;,修改下server_name为本机IP

重启nginx服务

nginx -t
/etc/init.d/nginx restart

配置 spine

cd /usr/local/spine/etc
cp spine.conf.dist spine.conf
vi spine.conf
# 修改以下配置
DB_Host 127.0.0.1
DB_Database cacti
DB_User cacti
DB_Pass test123
DB_Port 3306
# 验证
/usr/local/spine/bin/spine
# 应当显示以下信息
SPINE: Using spine config file [spine.conf]
Version 1.2.20 starting
Time: 1.0196 s, Threads: 1, Devices: 1

进入 web 安装

http://ip/cacti

调优数据库

进入 web 之后根据上面的提示安装并调优数据库即可,关于要调整的内容 web 会详细写,这里不再细说

修改 poller ,设置定时任务

Cacti Setting

添加 poller 的定时任务

crontab -e
# 添加以下内容
*/5 * * * * /usr/bin/php /data/www/cacti/poller.php > /dev/null 2>&1

删除历史记录

前面我们导 sql 文件的时候,用了 -p 加密码,清除一下历史记录比较好

history -c

写在最后

Cacti 已经很老了,php 写的很容易有很多洞出来,一定要做好端口访问权限管理,使用强密码,另外可以试试用 Prometheus 或者 Zabbix ,前段时间尝试了一下 Prometheus + Grafana 监控 Minio 和 Promox VE 效果很不错,推荐各位不妨去试试