查看博客目录

手把手教你部署新版 Cacti 1.2.x 监控:小白也能轻松上手

Cacti 是一款基于 Web 的开源网络监控和图形化工具。它基于 PHP、MySQL、SNMP 及 RRDTool 开发,通过 SNMP 协议采集数据,并使用 RRDTool 保存数据和绘制图表,采用 B/S 架构实现数据展示与管理。

本文记录一套基于旧版环境的部署过程,适合用于实验环境和学习。原文环境如下:

  • 安装架构:LAMP,即 Linux、Apache、MariaDB、PHP
  • Cacti 版本:1.2.15
  • 系统版本:CentOS 7.9

Cacti 1.2.15、CentOS 7 和 PHP 7.2 都属于较旧的版本。部署生产环境前,请根据当前 Cacti 官方文档重新核对系统、PHP、数据库和安全配置要求。

1. 安装相关软件包

1.1 安装 Apache

yum install -y httpd
systemctl start httpd
systemctl enable httpd

1.2 安装 PHP 7.2

Cacti 要求 PHP 版本不低于 5.4。下面以 Remi 仓库和 PHP 7.2 为例:

# 安装 Remi 仓库
yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm

# 安装 yum-utils
yum install -y yum-utils

# 启用 Remi 仓库中的 PHP 7.2
yum-config-manager --enable remi-php72

# 安装 PHP 及相关模块
yum install -y php php-mysql php-snmp php-xml php-ldap php-gd \
  php-mbstring php-posix php-gmp php-intl

1.3 修改 PHP 时区

vim /etc/php.ini

[PHP] 配置段中设置:

date.timezone = Asia/Shanghai

1.4 安装 MariaDB 10.6

先创建 MariaDB 软件源:

vim /etc/yum.repos.d/MariaDB.repo

写入:

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.6/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

安装并启动 MariaDB:

yum install -y MariaDB-server MariaDB-client MariaDB-devel
systemctl start mariadb
systemctl enable mariadb

初始化数据库:

mysql_secure_installation

开始时如果 root 还没有密码可以直接回车,后续按提示设置 root 密码、删除匿名账号、禁止 root 远程登录、删除测试数据库并刷新权限表。

根据机器配置调整 MariaDB 参数:

vim /etc/my.cnf.d/server.cnf

示例配置:

[mysqld]
collation_server = utf8mb4_unicode_ci
character_set_server = utf8mb4
max_allowed_packet = 16777216
max_heap_table_size = 123M
tmp_table_size = 123M
join_buffer_size = 6M
innodb_buffer_pool_size = 1G
innodb_flush_log_at_timeout = 3
innodb_read_io_threads = 32
innodb_write_io_threads = 16
innodb_buffer_pool_instances = 9
innodb_io_capacity = 5000
innodb_io_capacity_max = 10000
innodb_file_format = Barracuda
innodb_large_prefix = 1
innodb_doublewrite = OFF

修改后重启:

systemctl restart mariadb.service

1.5 安装 Net-SNMP

yum install -y net-snmp net-snmp-libs net-snmp-utils \
  net-snmp-devel net-snmp-perl
systemctl start snmpd.service
systemctl enable snmpd.service

1.6 安装 RRDTool

安装编译时可能用到的依赖:

yum -y install lm_sensors gcc gcc-c++ libart_lgpl-devel zlib-devel \
  libpng-devel freetype-devel gettext-devel glib2-devel pcre-devel \
  pango-devel cairo-devel libxml2-devel perl-ExtUtils-CBuilder \
  perl-ExtUtils-MakeMaker

直接通过 yum 安装 RRDTool:

yum install -y rrdtool

1.7 创建 Cacti 数据库和用户

登录 MariaDB:

mysql -uroot -p

创建数据库、用户并授权:

CREATE DATABASE cacti;
GRANT ALL ON cacti.* TO 'cacti'@'localhost' IDENTIFIED BY '123456';
GRANT SELECT ON mysql.time_zone_name TO 'cacti'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

导入系统时区:

mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -u root -p mysql

2. 安装 Cacti

下载地址:

下载并解压 Cacti:

wget https://www.cacti.net/downloads/cacti-1.2.15.tar.gz
tar zxvf cacti-1.2.15.tar.gz
mv cacti-1.2.15 /var/www/html/cacti

导入数据库:

mysql -ucacti -p cacti < /var/www/html/cacti/cacti.sql

2.1 配置 Cacti 数据库连接

编辑配置文件:

vim /var/www/html/cacti/include/config.php

根据实际环境修改数据库连接参数:

$database_type     = 'mysql';
$database_default  = 'cacti';
$database_hostname = 'localhost';
$database_username = 'cacti';
$database_password = '123456';
$database_port     = '3306';
$database_retries  = 5;
$database_ssl      = false;
$database_ssl_key  = '';
$database_ssl_cert = '';
$database_ssl_ca   = '';

2.2 创建日志文件

touch /var/www/html/cacti/log/cacti.log
touch /var/www/html/cacti/log/cacti_stderr.log

2.3 创建系统用户并设置目录权限

useradd cacti
chown apache.apache /var/www/html/cacti/ -R
chown cacti /var/www/html/cacti/{rra,log}/ -R
chmod 777 /var/www/html/cacti/{rra,log}/ -R

2.4 重启相关服务

systemctl restart mariadb httpd

3. 安装 Spine

Cacti 默认使用 cmd.php 进行轮询。Spine 使用 C 编写,适合提高大规模网络环境中的数据采集效率和并发能力。

下载地址:

下载、解压并准备安装目录:

wget https://files.cacti.net/spine/cacti-spine-1.2.15.tar.gz
tar zxvf cacti-spine-1.2.15.tar.gz
mv cacti-spine-1.2.15 /usr/local/spine
cd /usr/local/spine

安装编译依赖:

yum install -y net-snmp-devel mysql-devel openssl-devel dos2unix \
  autoconf automake binutils libtool gcc cpp glibc-headers \
  kernel-headers glibc-devel help2man

编译并安装:

sh bootstrap
./configure --with-reentrant
make
make install

chown root:root /usr/local/spine/bin/spine
chmod +s /usr/local/spine/bin/spine

复制配置文件:

cp /usr/local/spine/etc/spine.conf.dist /etc/spine.conf
vim /etc/spine.conf

修改数据库连接参数:

DB_Host 127.0.0.1
DB_Database cacti
DB_User cacti
DB_Pass 123456
DB_Port 3306

执行初始化测试:

/usr/local/spine/bin/spine

成功时可以看到类似输出:

SPINE: Using spine config file [/etc/spine.conf]
SPINE: Version 1.2.15 starting
SPINE: Time: 0.0716 s, Threads: 5, Devices: 0

4. 初始化 Cacti

在浏览器访问:

http://服务器IP/cacti

默认账号和密码通常是 admin/admin,首次登录后应立即修改密码。

Cacti 安装预检查

根据提示修改 PHP 配置:

vim /etc/php.ini

例如:

max_execution_time = 60
memory_limit = 900M

修改后重启 Apache:

systemctl restart httpd

完成推荐配置检查后点击下一步。

Cacti 安装配置页面

选择新的主要服务器继续:

选择主要服务器

继续配置 Spine 路径:

配置 Spine 路径

Cacti 初始化页面

Cacti 初始化页面

Cacti 初始化页面

Cacti 初始化页面

Cacti 初始化页面

Cacti 初始化页面

5. 配置通过 IP 直接访问

如果希望通过服务器 IP 直接访问 Cacti,而不使用 /cacti 路径,可以修改 Cacti 和 Apache 配置。

先修改 Cacti 的 URL 路径:

vim /var/www/html/cacti/include/config.php

$url_path 修改为:

$url_path = '/';

再修改 Apache 的站点根目录:

vim /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html/cacti"

重启 Apache:

systemctl restart httpd

6. 配置轮询器和计划任务

6.1 配置计划任务

如果不配置轮询任务,Cacti 图形界面可能会显示:The Cacti Poller has not run yet

安装 crontab:

yum install crontabs -y

先手动测试轮询器:

/usr/bin/php /var/www/html/cacti/poller.php

正常情况下会返回类似以下内容:

OK u:0.00 s:0.01 r:1.02
OK u:0.00 s:0.01 r:1.04
SYSTEM STATS: Time:1.3197 Method:spine Processes:1 Threads:1 Hosts:1

编辑计划任务:

crontab -e

每五分钟执行一次:

*/5 * * * * /usr/bin/php /var/www/html/cacti/poller.php > /dev/null 2>&1

确认 crond 服务状态并设置开机自启:

systemctl status crond
systemctl enable crond

6.2 设置语言

重新登录 Cacti。如果界面仍是英文,可以进入“系统配置 → 设置 → 基本”,将语言改为中文,保存后重新登录。

6.3 将轮询器切换为 Spine

Spine 是 cmd.php 的替代方案,适合大规模设备轮询。进入 Cacti 的“系统配置 → 设置 → Poller”,将采集类型从 cmd.php 改为 spine,然后保存。

配置 Spine 轮询器

7. 查看监控图表

完成设备、数据源和轮询任务配置后,可以在图形页面查看监控结果。

Cacti 监控图表

后续可以继续围绕 Cacti 的设备接入、模板管理、告警配置和轮询性能优化展开实践。