📦Cacti / cacti
← 返回首页
Cacti ™
⚖️ GPL-2.0#cacti#graph#cacti-community#rrdtool#php🌐 www.cacti.net📅 创建于 2015-01-19🔄 更新于 2026-11-01

📄 仓库 README

在 GitHub 查看 ↗
来自 GitHub 仓库自述文件 · 版权归原作者所有

Cacti

Cacti Commit Audit Project Status Translation Status Average issue resolution time Open issues


Overview

Cacti is an open-source network monitoring and graphing platform built on RRDtool.

It provides a scalable framework to collect, store, and visualize time-series data from network devices, servers, and applications.

Core capabilities include:

  • Automated device discovery
  • Local and remote data collection
  • Graph, data source, and RRA templating
  • SNMP polling (v1/v2/v3) and IPv6 support
  • Role-based access control (RBAC)
  • Plugin framework
  • Dynamic graph viewing and export options

Release Branches

Cacti maintains two primary branches:

Branch Purpose
1.2.x Stable long-lived release series
develop Active development toward Cacti 1.3.x

For the latest published version, see GitHub Releases.


System Requirements

Minimum supported dependencies by branch:

Dependency Cacti 1.2.x Cacti develop (1.3.x)
MariaDB 10.5+ 10.11+
MySQL 8.0+ 8.4+
PHP 8.2+ 8.3+
RRDtool 1.7+ 1.8+
Net-SNMP 5.9+ 5.9+

Notes:

  • RRDtool 1.9+ is recommended for newer dynamic graph features in 1.3.x.
  • A web server with PHP support is required.
  • PHP should be available as CLI or CGI for scheduled polling and maintenance scripts.
  • php-snmp is now fully supported. When both php-snmp and the Net-SNMP binaries are available, php-snmp is used by default; to force the Net-SNMP binaries, set $php_snmp_support = false; in include/config.php.
  • Full support for the upcoming PHP 8.6 release is planned, which brings significant performance improvements that speed up data collection in Script and Script Server data input methods.

Operating system guidance:

  • 1.2.x: RHEL/Rocky/Alma 8+ (or equivalent) is a common baseline.
  • 1.3.x: RHEL/Rocky/Alma 9+ or CentOS Stream 9+ is preferred for modern PHP packaging.
  • Debian and Ubuntu are also well supported.

Installation (Source Checkout)

Clone the repository:

git clone https://github.com/Cacti/cacti.git
cd cacti

Dependency management:

  • For a source checkout on both 1.2.x and develop, install dependencies with Composer before serving Cacti. Composer-managed packages under include/vendor are generated and intentionally not committed; the remaining legacy libraries in that directory are not Composer-managed and remain in the repository.
  • On develop, composer install uses the committed lock file resolved against Cacti's PHP 8.3 floor.
  • Use composer update only in an intentional dependency-update change, and commit the resulting composer.lock update.
  • Release packages must build include/vendor from the lock with composer install --no-dev and verify the real build host with composer check-platform-reqs --no-dev.
  • Tags under release/* build a deterministic archive, SHA-256 checksum, CycloneDX SBOM, and GitHub provenance attestation through the release-artifact workflow.

Install dependencies:

composer install

Windows users may need:

composer install --ignore-platform-req=ext-pcntl --ignore-platform-req=ext-posix

For a source checkout, install the locked browser dependencies before configuring the web server. Node.js is required for this build; release archives already contain the generated assets. Run this command as the owner of the Cacti files:

npm ci

Then configure your database and web server, and complete setup using the official docs:

https://github.com/Cacti/documentation


Database Upgrades and Schema Checks

When running from source (especially develop), schema updates may be required after pulling changes.

Upgrade the database schema:

sudo -u cacti php -q cli/upgrade_database.php --forcever=`cat include/cacti_version`

If needed, force a re-upgrade from an earlier version:

php -q cli/upgrade_database.php --forcever=<older_version>

Audit schema consistency:

php cli/audit_database.php --report

Data Collection and Polling

Cacti collects data through data sources, which can use:

  • SNMP
  • Scripts
  • Command output
  • Databases
  • Custom input methods

Polling engines:

Poller Description
PHP Poller Built-in polling engine
Spine High-performance C-based poller

Spine supports SNMPv1/v2 and SNMPv3 with IPv6, with some advanced protocol support depending on how Net-SNMP is compiled on your platform.


Features

  • Device discovery and automation workflows
  • Reusable templates for graphs and data sources
  • Distributed remote data collectors
  • Plugin architecture for extensibility
  • Dynamic graph interactions (time navigation, realtime view, CSV export)
  • Fine-grained user and group permissions using RBAC
  • Broad RRDtool graphing support (including VDEFs and stacked lines)

Documentation

Official documentation is maintained in a separate repository:

https://github.com/Cacti/documentation


Development and Validation

Install the locked Composer dependencies before running PHP contracts. From the repository root:

composer install
include/vendor/bin/pest --configuration=tests/phpunit.xml --testsuite=Unit,Integration
composer run-script phpstan -- --memory-limit=2G

Coverage reports for the PRs checked on October 14, 2026 measure changed first-party executable statements. Applicable changes exceed 80%; this is not whole-project coverage. Formatting-only PHP changes are checked for equivalent syntax trees. Documentation, workflow definitions, lockfiles and generated vendor bundles are outside this execution metric. The validation snapshot records the measured counts and scope.

Run the disposable browser and SQL/RRD profile with Docker and mise installed:

bash tests/performance/profile.sh

The runner selects Node 22 and Python 3.12 through mise and seeds 500 disabled devices and 50 deterministic RRD graphs. It profiles all shipped themes, AJAX navigation, realtime responses, and graph rendering with Boost enabled and disabled. Containers are removed after the run; the printed results directory retains traces, CPU and memory measurements, SQL counts and Callgrind profiles. See profiling instructions and the measured rendering change. The October 14 profile found 400 redundant option-array loads across 200 graph renders. Removing those loads reduced median warm PHP CPU use by 70.7% without Boost and 46.6% with Boost in the equally instrumented fixture. Browser profiles still show retained DOM growth and expensive Midwinter styling.

Timings include Xdebug overhead and use synthetic data; they do not measure live SNMP, collector throughput or production fleet capacity. The current fixture uses RRDtool 1.7.2 for basic rendering; it does not exercise newer RRDtool features.


Contributing

Contributions are welcome.

  1. Fork this repository.
  2. Create a branch for your change.
  3. Submit a pull request.

You can also help improve docs in:

https://github.com/Cacti/documentation


Community

Community support is available on the Cacti forums:

https://forums.cacti.net


Contributors

Thanks go to these wonderful people (emoji key):

Ian Berry
Ian Berry

💻🛡️📖🎨
Reinhard Scheck
Reinhard Scheck

💻🛡️📖
Tony Roman
Tony Roman

💻🛡️📖🌍⚠️🎨
Andy Blyler
Andy Blyler

💻
Larry Adams
Larry Adams

💻🛡️📖🚇🌍⚠️🎨🚧👀
Mark Brugnoli-Vinten
Mark Brugnoli-Vinten

💻🛡️📖🚇🌍⚠️🎨🚧👀

📈 近 7 天 Star 趋势

每日新增 Star(柱)与累计 Star(线)· 数据来自 GitHub

🏆 排名变化趋势

在各榜单中的排名历史(数字越小越靠前)

📋 历史上榜记录

每次快照的详细数据
日期 榜单 排名 周期新增 总 STAR