Cacti
By The Cacti Group
Cacti is an open-source network graphing and monitoring tool that polls devices via SNMP or custom scripts and stores the results in RRDtool-backed round-robin databases for display as historical graphs. Built as a PHP-based front end over…
Definition
Cacti is an open-source network graphing and monitoring tool that polls devices via SNMP or custom scripts and stores the results in RRDtool-backed round-robin databases for display as historical graphs. Built as a PHP-based front end over RRDtool, it gives network administrators a template-driven way to visualize bandwidth, CPU load, and other time-series metrics without writing raw RRDtool commands by hand.
Overview
Before broader monitoring platforms existed, network administrators who wanted historical graphs of bandwidth and device performance had to work directly with RRDtool, a powerful but low-level command-line tool for round-robin time-series storage and graphing. Cacti was created to wrap that complexity in a web-based interface, letting administrators define data sources and graph templates once and then apply them across many devices without hand-crafting RRDtool commands for each one. Mechanically, Cacti defines data input methods, most commonly SNMP queries but also custom scripts, that specify what data to collect and how often. A poller process, typically run via a scheduled cron job, executes these data input methods against configured devices and writes the results into RRDtool round-robin database files, which store fixed-size historical data at decreasing resolution over time. Cacti's web interface then reads these RRD files to render graphs on demand, using graph templates that define how the underlying data should be displayed, such as stacked area charts for interface traffic split into inbound and outbound. Cacti differs from more full-featured monitoring platforms like LibreNMS or OpenNMS in that it traditionally centers on graphing rather than integrated discovery and alerting; historically, these capabilities required separate plugins such as Thold for thresholds or Spine for a faster, multithreaded poller. This makes Cacti lighter and simpler to reason about for teams whose primary need is historical graphing, but less turnkey for teams that also want auto-discovery and built-in alerting out of the box. In practice, Cacti is used by network administrators to graph interface bandwidth, device CPU and memory usage, and other SNMP-exposed metrics across switches, routers, and servers, often as a long-running historical record that predates a more modern monitoring stack layered on top. Its template system means new device types can be onboarded by importing community-contributed templates rather than defining data sources from scratch. Its main limitations are that RRDtool's fixed-size, downsampling storage model discards fine-grained historical detail over time by design, that its plugin-dependent alerting is less integrated than platforms with alerting built in natively, and that its PHP-based interface and polling architecture can require careful tuning to scale to very large device counts. Teams wanting integrated discovery and alerting alongside graphing often choose LibreNMS instead. Cacti's simplicity is also its appeal for smaller environments: a network administrator who just wants dependable historical bandwidth graphs without operating a heavier monitoring platform can stand up Cacti quickly and keep its footprint modest, which is why it has persisted in some networks for many years alongside newer tools introduced for alerting or discovery.
Key Features
- Web-based front end for defining RRDtool data sources and graphs
- SNMP and custom-script data input methods for flexible polling
- Round-robin database storage via RRDtool with automatic downsampling
- Template-driven graph and data source definitions for reuse
- Poller process runs on a schedule, typically via cron
- Plugin ecosystem adds thresholds, alerting, and faster polling
- Long-established tool with broad community device templates
- Lightweight footprint suited to focused historical graphing