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 小时,确保图表正常出数据,再批量添加。

相关推荐
碳基沙盒5 小时前
OpenClaw 多 Agent 配置实战指南
运维
蝎子莱莱爱打怪3 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
DianSan_ERP4 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅4 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
不是二师兄的八戒4 天前
Linux服务器挂载OSS存储的完整实践指南
linux·运维·服务器
欧云服务器4 天前
怎么让脚本命令可以同时在centos、debian、ubuntu执行?
ubuntu·centos·debian
智渊AI4 天前
Ubuntu 20.04/22.04 下通过 NVM 安装 Node.js 22(LTS 稳定版)
ubuntu·node.js·vim
zhangfeng11334 天前
趋动云 如何ssh登录 服务区 项目server
运维·人工智能·ssh
ZeroNews内网穿透4 天前
谷歌封杀OpenClaw背后:本地部署或是出路
运维·服务器·数据库·安全
失重外太空啦4 天前
nginx
运维·nginx