Cacti在Debian/Ubuntu中安装及其使用

以下是 Cacti(最新稳定版 1.2.30 或更高,2025--2026 年主流做法)的详细安装步骤,以 Ubuntu 24.04 LTS(或 Debian/Ubuntu 系列)为例,这是目前最常见、最稳定的安装环境。整个过程基于官方文档(docs.cacti.net

适用环境:Ubuntu 22.04 / 24.04、Debian 12 等(LAMP 栈服务器)。 预计时间:30--60 分钟(不含下载)。 前提:服务器已联网、防火墙允许 80/443 端口(生产环境建议用 HTTPS)。 注意:Cacti 依赖 LAMP(Apache + MariaDB/MySQL + PHP) + SNMP + RRDTool。安装前备份数据。

如果cacti官网访问不了,网盘里有各个版本的cacti自行下载

下载地址:夸克盘

步骤 1:更新系统 & 安装依赖包

Bash

复制代码
sudo apt update && sudo apt upgrade -y
sudo apt install -y apache2 mariadb-server php php-mysql php-snmp php-gd php-xml php-mbstring php-curl php-ldap php-json php-intl php-zip php-imagick php-rrd php-cli php-common php-cgi php-fpm rrdtool snmp snmpd unzip wget curl

详细说明

  • 这个步骤确保系统是最新的,并安装 Cacti 所需的所有软件包,包括 Web 服务器(Apache)、数据库(MariaDB)、PHP 运行时及其扩展、RRDTool(绘图工具)、SNMP(采集协议)等。
  • 运行时,系统会自动从 Ubuntu 仓库下载并安装。如果你的网络慢,可以先运行 sudo apt update 单独更新仓库列表。
  • 生产环境建议使用 LTS 版本(如 24.04),避免使用 beta 仓库。

可能报错 & 解决办法

  • 报错:E: Unable to locate package xxx(如 php-rrd) 原因:仓库未更新或缺少 universe/multiverse 仓库。 解决:运行 sudo add-apt-repository universe 和 sudo apt update,然后重试安装。
  • 报错:The following packages have unmet dependencies(依赖冲突) 原因:PHP 版本不匹配或旧包残留。 解决:运行 sudo apt --fix-broken install 修复,或指定 PHP 版本如 sudo apt install php8.2-rrd(替换 8.2 为你的版本)。
  • 报错:Could not connect to archive.ubuntu.com(网络问题) 原因:DNS 或网络故障。 解决:检查网络,临时换 DNS sudo nano /etc/resolv.conf 加 nameserver 8.8.8.8,或用镜像源如阿里云:编辑 /etc/apt/sources.list 替换为 mirrors.aliyun.com/ubuntu。
  • 截图描述(终端画面): 如上所述,正常结束显示安装统计,无红色错误行。如果有错误,会在中间出现红色 E: 开头的行。

步骤 2:安全配置 MariaDB

Bash

复制代码
sudo mysql_secure_installation

详细说明

  • 这个脚本会引导你设置 root 密码,并移除不安全功能(如匿名用户、测试数据库)。
  • 运行前,确保 MariaDB 服务已启动(sudo systemctl status mariadb 检查,如果未启动:sudo systemctl start mariadb)。
  • 如果你已经设置过 root 密码,这里会要求输入它。

可能报错 & 解决办法

  • 报错:ERROR 1698 (28000): Access denied for user 'root'@'localhost' 原因:MariaDB 默认使用 unix_socket 认证,无密码。 解决:直接按 Enter 跳过密码提示,继续脚本;或先设置密码:sudo mysql → ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass'; FLUSH PRIVILEGES;。
  • 报错:Command not found 原因:MariaDB 未正确安装。 解决:重跑步骤 1 的安装命令,或检查 which mysql_secure_installation(应在 /usr/bin/)。
  • 脚本卡住或无响应 原因:服务未启动。 解决:sudo systemctl restart mariadb,重试。
  • 截图描述(交互式终端): 如上,脚本会逐行提问 Y/n,默认 Y。结束时显示 Thanks for using MariaDB!。

步骤 3:创建 Cacti 数据库和用户

Bash

复制代码
sudo mysql -u root -p

输入密码后,进入 mysql> 提示符,逐行输入 SQL:

SQL

复制代码
CREATE DATABASE cacti CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'cactiuser'@'localhost' IDENTIFIED BY '你的强密码123!';
GRANT ALL PRIVILEGES ON cacti.* TO 'cactiuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

详细说明

  • utf8mb4 编码支持 emoji 和多字节字符,避免后期乱码。
  • 用户 'cactiuser' 只限本地访问,提高安全。
  • 如果是远程访问 Cacti,改成 'cactiuser'@'%'。

可能报错 & 解决办法

  • 报错:ERROR 1044 (42000): Access denied for user 'root'@'localhost' 原因:root 权限不足。 解决:用 sudo mysql 进入,确保步骤 2 已设置密码;或检查 /etc/mysql/mariadb.conf.d/50-server.cnf 中的 bind-address = 127.0.0.1。
  • 报错:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 原因:密码太弱(MariaDB 默认策略要求复杂密码)。 解决:用更强密码(至少 8 位,包含大小写、数字、符号);或临时禁用策略:SET GLOBAL validate_password.policy = LOW;。
  • 报错:ERROR 1007 (HY000): Can't create database 'cacti'; database exists 原因:数据库已存在。 解决:先删除 DROP DATABASE cacti; 再创建。
  • 截图描述(MySQL 终端): 每条命令后显示 Query OK,无红色 ERROR 开头。

步骤 4:下载并解压 Cacti

Bash

复制代码
cd /var/www/html
sudo wget https://files.cacti.net/cacti/linux/cacti-1.2.30.tar.gz
sudo tar -xzvf cacti-1.2.30.tar.gz
sudo mv cacti-1.2.30 cacti
sudo chown -R www-data:www-data cacti
sudo chmod -R 755 cacti

详细说明

  • wget 从官方镜像下载,确保版本号正确(检查官网最新)。
  • chown 赋予 Apache 用户权限,避免后期写日志/缓存失败。
  • 如果空间不足,检查 /var/www/html 磁盘使用 df -h。

可能报错 & 解决办法

  • 报错:wget: unable to resolve host address 原因:DNS 问题。 解决:如步骤 1,换 DNS 或用 curl 代替:sudo curl -O https://files.cacti.net/...。
  • 报错:No space left on device 原因:磁盘满。 解决:清理日志 sudo apt autoremove 或扩展磁盘。
  • 报错:Permission denied 原因:当前用户无权限。 解决:用 sudo 执行所有命令。
  • 截图描述(终端): wget 进度 100%,tar 输出文件列表,无 ERROR。

步骤 5:导入 Cacti 表结构

Bash

复制代码
sudo mysql -u cactiuser -p cacti < /var/www/html/cacti/cacti.sql

详细说明

  • 这会导入 100+ 张表和初始数据。
  • 如果 sql 文件不存在,检查解压路径。

可能报错 & 解决办法

  • 报错:ERROR 1044 (42000) at line xx: Access denied 原因:cactiuser 权限不足。 解决:重新运行 GRANT 命令,或用 root 导入:sudo mysql -u root -p cacti < cacti.sql。
  • 报错:No such file or directory 原因:路径错。 解决:cd 到 cacti 目录,确认 cacti.sql 存在(ls)。
  • 报错:ERROR 1071 (42000): Specified key was too long 原因:MariaDB 版本问题或编码冲突。 解决:编辑 my.cnf 加 innodb_large_prefix=1、innodb_file_format=Barracuda,然后重启 MariaDB。
  • 截图描述: 正常无输出;失败时显示 ERROR 行号 + 具体问题。

步骤 6:修改 config.php

如上所述,复制并编辑。

详细说明

  • 这个文件定义数据库连接,错一个参数就会连不上。
  • 如果用远程 DB,改 hostname 为 IP。

可能报错 & 解决办法

  • 报错:No such file(复制时) 原因:dist 文件不存在。 解决:检查解压目录。
  • 后期 Web 报错:Database connection failed 原因:config.php 参数错。 解决:检查拼写、密码、端口。
  • 截图描述: nano 中显示修改后的 $database_password 等行。

步骤 7:调整 PHP 配置

如上所述。

详细说明

  • memory_limit 800M 适合中型 Cacti,避免内存耗尽。
  • 时区设置防止日志时间错乱。

可能报错 & 解决办法

  • 报错:apache2: Syntax error on line xx(重启时) 原因:php.ini 语法错。 解决:检查编辑的行,无多余分号或空格;用 php -l /etc/php/8.2/apache2/php.ini 验证。
  • 截图描述: nano 显示修改值,重启无错误。

步骤 8:配置 SNMP

如上所述。

详细说明

  • rocommunity public 是默认社区字符串,生产环境改成自定义。

可能报错 & 解决办法

  • 报错:snmpwalk: No response from localhost 原因:SNMP 未开启或防火墙挡。 解决:sudo ufw allow 161/udp,重启 snmpd;或检查 conf 文件是否有语法错。
  • 截图描述: snmpwalk 输出多行 SNMP 值,无 Timeout 错误。

步骤 9:设置 Cron 定时任务

如上所述。

详细说明

  • Cron 确保每 5 分钟自动采集数据。
  • 用 www-data 用户运行,避免权限问题。

可能报错 & 解决办法

  • 报错:crontab: no crontab for www-data 原因:首次编辑。 解决:正常,继续添加行。
  • 后期无数据:Cron 未执行。 解决:检查日志 grep CRON /var/log/syslog,或手动跑 php /var/www/html/cacti/poller.php 测试。
  • 截图描述: nano 显示 */5 * * * * 行。

步骤 10:浏览器打开安装向导

如上所述。

详细说明

  • 如果用域名,需配置 Apache vhost。
  • 向导会自动检测所有依赖。

可能报错 & 解决办法

  • 报错:403 Forbidden 原因:权限错。 解决:重跑 chown/chmod。
  • 向导红字:PHP module xxx not found 原因:缺少 PHP 扩展。 解决:安装对应包如 sudo apt install php8.2-gd,重启 Apache。
  • 向导红字:RRDTool not found 原因:路径错。 解决:sudo apt install rrdtool,或设置 PATH。
  • 截图描述: 向导页面如上,绿色通过,红色需修复。

步骤 11:首次登录 & 修改密码

如上所述。

详细说明

  • 改密码后,检查 Console → Graphs 是否有 Localhost 默认图(需等 5--10 分钟第一次采集)。

可能报错 & 解决办法

  • 报错:Invalid credentials 原因:默认 admin/admin 错。 解决:检查大小写,或重置密码(数据库中改 user_auth 表)。
  • 无图表:采集未跑。 解决:手动运行 poller.php,检查 log/cacti.log。
  • 截图描述: 登录后主界面显示欢迎信息和空图表区。

添加设备监控指南

  • 登录 Cacti(http://你的IP/cacti
  • 左侧菜单看到 "Console" 和 "Graphs"
  • 本机(localhost)可能已有默认图表(如果没有,也没关系)

总体流程概述

  1. 添加一台设备(Device)
  2. 为设备创建数据源(Data Sources,通常自动生成)
  3. 创建图表(Graphs)
  4. 查看图表 & 等待采集(Poller 每5分钟跑一次)

步骤 1:进入设备管理页面

  1. 登录 Cacti 后,点击左侧 Console(控制台)
  2. 在 Console 菜单下,展开 Management (管理) → 点击 Devices(设备)

预期画面

  • 页面标题:Devices
  • 中间是一个表格,目前可能是空的,或只有 "Localhost" 一台
  • 右上角有绿色按钮:+ Add(添加设备)

步骤 2:点击添加设备

  1. 点击右上角的 + Add 按钮
  2. 进入 "Add Device" 页面

填写关键字段(其他保持默认即可):

  • Description(描述):填写一个容易识别的名字,例如 "My Ubuntu Server" 或 "台北核心路由器"
  • Hostname(主机名):填写设备的 IP 地址或域名,例如 192.168.1.100 或 router.company.com
  • Host Template (主机模板):选择一个合适的模板(强烈推荐使用模板,避免手动配置)
    • 常见选项:
      • Local Linux Machine(本机 Linux)
      • Generic SNMP Device(通用 SNMP 设备)
      • Cisco Router(思科路由器)
      • Windows 2008/2012 Server(Windows 服务器)
    • 如果没有合适的,先选 Generic SNMP Device,后面再改
  • SNMP Version:选择 v2(最常用)或 v1(旧设备),很少用 v3(配置复杂)
  • SNMP Community:填写设备的 SNMP 社区字符串,默认是 public(生产环境建议改成自定义字符串,如 MySecretCom2026)
  • SNMP Port:默认 161(UDP),除非设备改过
  • SNMP Timeout:默认 500ms,可调到 1000--2000ms(如果设备响应慢)
  • Max OID's Per Get Request:默认 10--30,建议 10(避免设备崩溃)

其他字段:

  • Availability/Reachability Options :勾选 Ping and SNMP Uptime(推荐)
  • Ping Method:ICMP Ping(最准)

点击页面底部 Create(创建)按钮。

成功后画面

  • 页面刷新,显示 "Device 你的描述 新建"
  • 顶部出现绿色提示:Device Saved

常见报错 & 解决

  • SNMP Information: ERROR: Timeout 原因:设备未开启 SNMP 或防火墙挡了 161/udp 端口 解决:
    1. 在被监控设备上开启 SNMP(Ubuntu 示例:sudo apt install snmpd,编辑 /etc/snmp/snmpd.conf 加 rocommunity public 你的Cacti服务器IP)
    2. 重启 snmpd:sudo systemctl restart snmpd
    3. 检查防火墙:sudo ufw allow from 你的Cacti服务器IP to any port 161 proto udp
    4. 测试:从 Cacti 服务器运行 snmpwalk -v2c -c public 设备IP system
  • Device is Down(设备显示红色 Down) 原因:Ping 或 SNMP 都失败 解决:检查网络连通性、Ping 是否允许、SNMP 配置

步骤 3:创建图表(Graphs)

  1. 返回设备列表,找到刚添加的设备,点击它名称进入详情页
  2. 在设备详情页,找到 Associated Data Queries(关联数据查询)区域
  3. 常见数据查询会自动出现,例如:
    • SNMP - Interface Statistics(网络接口流量)
    • SNMP - CPU Statistics(CPU 使用率)
    • SNMP - Memory Statistics(内存)
    • Unix - Get Mounted Partitions(磁盘分区)
  4. 对于每个你想监控的查询,点击 Add Graphs for this Host (为这个主机添加图表)
    • 进入选择界面,勾选你想要的监控项(如 eth0 接口、CPU、内存分区等)
    • 点击 Create Graphs for this Host(创建图表)

成功后画面

  • 提示:Graphs Created Successfully
  • 返回设备详情页,Associated Graphs(关联图表)区域会出现新创建的图表名称

步骤 4:查看图表 & 等待数据

  1. 点击左侧菜单 Graphs (图表) → Graph Trees(图表树)
  2. 默认会有 Default Tree,点击展开 → 找到你的设备 → 点击设备名称
  3. 进入图表浏览页面,展开你创建的图表

预期画面

  • 左侧树状结构显示设备
  • 右侧显示曲线图(刚创建的前几次可能为空白)
  • 等待 5--15 分钟(取决于你的 Poller 间隔),刷新页面后就会看到数据曲线

如果图表一直是空的

  • 检查 Poller 是否运行:Console → Utilities → System → 查看 Poller Status(应显示 Running)
  • 手动触发一次采集:Console → Utilities → Poller → Run Poller(或在服务器终端运行 php /var/www/html/cacti/poller.php)
  • 查看日志:Console → Utilities → Log → 查看是否有 SNMP 超时或权限错误
  • 确认设备状态为绿色 Up

步骤 5:批量添加设备 & 模板优化(进阶)

  1. 使用模板批量创建
    • Console → Templates → Device Templates → 复制一个现有模板(如 Generic SNMP Device)
    • 修改后保存为新模板(如 "My Company Server Template")
    • 添加新设备时直接选这个模板,自动带入常用监控项
  2. 自动发现(可选)
    • Console → Management → Discovery Rules → 创建规则(扫描网段,自动添加设备)
    • 适合大量设备环境
  3. 添加阈值告警 (推荐插件):
    • Console → Plugin Management → 安装 Thold 插件
    • 然后在设备图表上设置阈值(CPU > 90% 告警)

常见问题速查表

问题描述 可能原因 快速解决方法
SNMP ERROR: Timeout 设备未开 SNMP 或防火墙挡 开启 snmpd,ufw allow 161/udp
Device Down (红色) Ping/SNMP 都失败 测试 ping + snmpwalk
图表空白 Poller 未跑或间隔太长 手动跑 poller.php,检查 cron
权限错误(无法写 RRD) 目录权限不对 chown -R www-data:www-data /var/www/html/cacti/rra
采集慢或卡住 设备太多,cmd.php 单线程 切换到 Spine 采集器(安装 cacti-spine)

添加完第一台设备后,建议先观察 1--2 小时,确保图表正常出数据,再批量添加。

相关推荐
乘云数字DATABUFF2 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--4 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森4 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜4 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB5 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode7 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220707 天前
如何搭建本地yum源(上)
运维
大树8810 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠10 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质10 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务