Cacti是一套老牌的开源网络监控系统,它通过SNMP协议采集交换机、路由器、服务器等设备的流量数据,再借助RRDTool的环形数据库进行存储和绘图,最终以网页图表的形式呈现流量趋势。虽然官方文档默认使用Apache作为Web服务器,但Nginx在内存占用和静态资源处理上更轻量,配合PHP-FPM同样可以稳定运行Cacti。本文将围绕Nginx环境下Cacti的完整部署与流量图表绘制流程展开,兼顾配置细节与常见问题的排查。

一、部署前的组件依赖与安装思路
搭建Cacti需要几个核心组件:Web服务器(Nginx)、PHP运行环境(PHP-FPM及若干扩展)、数据库(MariaDB或MySQL)、数据采集协议(net-snmp)以及绘图引擎RRDTool。这些组件环环相扣,任何一个缺失都会导致图表无法正常生成。
以CentOS 7为例,可以先安装EPEL仓库,再通过yum一次性装齐基础依赖:
yum install -y epel-release yum install -y nginx mariadb-server php-fpm php-mysql php-snmp \ php-ldap php-gd php-mbstring php-xml rrdtool net-snmp net-snmp-utils \ net-snmp-libs net-snmp-devel zlib-devel
安装完成后需要特别注意PHP的时区配置,打开php.ini找到date.timezone一项,将其设置为Asia/Shanghai,否则Cacti在安装检测阶段会直接报错。同时建议将php.ini中的memory_limit调整为512M,避免轮询器处理大量设备时内存不足。
数据库层面,MariaDB需要针对Cacti做一些参数调优,主要体现在字符集和内存分配上,否则导入初始数据时会非常缓慢甚至超时。
二、数据库初始化与Cacti程序部署
首先启动MariaDB并初始化安全配置,然后创建Cacti专用的数据库和账号。字符集务必指定为utf8mb4,这是官方推荐的设置,能避免后期图表中文名乱码的问题。
CREATE DATABASE cacti CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL ON cacti.* TO 'cacti'@'localhost' IDENTIFIED BY 'YourStrongPass'; GRANT SELECT ON mysql.time_zone_name TO 'cacti'@'localhost'; FLUSH PRIVILEGES;
其中授予mysql.time_zone_name的SELECT权限是很多人容易遗漏的一步,Cacti安装检测会强制检查这一项。接着导入时区数据并加载Cacti自带的初始数据库脚本:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -uroot -p mysql mysql -uroot -p cacti < /usr/share/doc/cacti/cacti.sql
然后解压Cacti程序包到Nginx的站点目录,例如/usr/share/nginx/html/cacti,并修改include/config.php中的数据库连接参数。最后设置目录属主,log目录和rra目录必须对运行PHP-FPM的用户可写,否则轮询数据无法落盘,图表会一直是空白状态。
三、Nginx站点配置与Web安装向导
Nginx本身不解析PHP,需要通过fastcgi将请求转发给PHP-FPM。Cacti对rewrite规则有一定要求,下面是一份经过验证的server配置:
server {
listen 80;
server_name monitor.ipipp.com;
root /usr/share/nginx/html/cacti;
index index.php index.html;
access_log /var/log/nginx/cacti.access.log;
error_log /var/log/nginx/cacti.error.log;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}配置完成后启动php-fpm和nginx,通过浏览器访问站点即可进入Cacti的图形化安装向导。向导会逐项检查PHP版本、扩展、目录权限和数据库设置,全部显示绿色后选择全新安装,按提示完成即可。
登录后第一步要进入System Settings检查Cacti和RRDTool的可执行文件路径是否正确。如果Cacti的log中反复出现路径错误,多半是因为Nginx环境下系统命令的默认路径与Apache环境不同,比如rrdtool实际位于/usr/bin/rrdtool,手动修正后即可正常绘图。
四、添加设备、配置SNMP采集与流量图表绘制
图表数据的来源是SNMP。在添加设备前,先确保被监控的交换机或服务器开启了SNMP服务,并记录团体名。以一台交换机为例,可以先用命令行验证连通性:
snmpwalk -v 2c -c public 192.168.0.1 ifHCOctets
能正常返回各端口的字节数说明SNMP链路畅通。接下来在Cacti的Devices页面点击Add,填入设备IP、SNMP版本(推荐v2c或v3)、团体名和SNMP端口,保存后页面顶部应显示绿色的SNMP信息,表示Cacti已经能读取到设备的系统描述和运行时间。
设备添加成功后,为其关联Graph Templates。绘制端口流量最常用的是接口进出流量模板,选中后批量勾选需要监控的端口,Create Graphs for this Device会自动生成对应的图表定义。随后进入Graph Trees,把设备和图表挂到树上,方便前端浏览。
最后也是最关键的一步:启动轮询器。Cacti依赖cron每五分钟执行一次poller.php来采集数据:
*/5 * * * * php /usr/share/nginx/html/cacti/poller.php > /dev/null 2>&1
等两三个轮询周期后刷新图表页面,就能看到端口流入流出的实时曲线。注意首次轮询时图表往往只有网格没有数据,这是RRDTool的环形数据库还没有填充足够样本,属于正常现象。
五、常见问题排查与优化建议
图表一直空白是最常见的故障。排查顺序建议是:先看Cacti的log目录中是否有SNMP超时记录,再检查rra目录下有没有生成rrd文件,最后手动执行一次poller.php观察输出。如果rrd文件存在但是零字节,通常是权限问题;如果完全没有rrd文件,多半是图表模板未关联或轮询器没有运行。
另一个典型问题是页面图表显示为红叉。这通常是rrdtool路径配置错误,或者Nginx用户对rra和log目录没有读取权限导致的,可以对比Cacti日志中的rrdtool命令手动执行验证。
从优化角度看,当监控设备超过两三百台时,建议开启Cacti的spine轮询器替代默认的cmd.php,采集效率能提升数倍;同时将MySQL的InnoDB缓冲池适当调大,轮询日志定期清理,可以让整套系统长期稳定运行,流量图表的连续性和准确性也更有保障。