2010
Creating a Cacti Alternative
I want to replace cacti. I love graphs and information collation as much as the next guy, but I want something more and at the same time, something much less.
I have recently finished my second year of a Computer Science course at the University of Nottingham, and thus it is time to start thinking about a subject for my dissertation.
What is Cacti
Cacti "is a complete network graphing solution designed to harness the power of RRDTool's data storage and graphing functionality". It sports a web interface written in PHP and has a plugin type architecture.

I love what cacti can do, which is graphing the goings on of devices on your network. Cacti uses SNMP to retrieve this data, meaning anything SNMP can tell you about, cacti can track - and ultimately graph.
What's Wrong With Cacti?
Cacti's official website explains that "all of this is wrapped in an intuitive, easy to use interface". This is where issues begin to arise. Of course Cacti is a huge step up (interaction wise) from controlling RRDTool via the command line, however it is not what I would like it to be in terms of ease of use, and pure excitement factor.
Making graphs is one of the most exciting things you can do with a network of computers, and one of my favourite features is in fact the plugin Weathermap which has the potential to create fantastic diagrams of your network.
However I feel that cacti was developed in some sense for people who knew a lot about SNMP and RRDTool, and who just needed some help to manage their graphs. If you are like me, you see something which looks amazing and then learn how to do it, and Cacti does not make me welcome.
The Proposal
I want to construct a Cacti like contender from scratch using Django and it has to do several things differently:
- Users do not have to understand SNMP or RRDTool
- Graphs are not images, but generated from memcached (or similar) data using jQuery and a lovely json API (Django Piston)
- We make user interface decisions to keep a simple first glance
- Advanced users with SNMP knowledge should not be restricted by our assumptions
- Usage mindset should be about the devices and not RRDTool
Using Django
Django will help - as is its strength - to speed along with the generic development. However there are some interesting points to consider:
Do I have to use RRDTool?
MySQL does not have the ability to store data in the way RRD files do, thus there are two options.
- Represent all time series data (which would be multiple files in the RRD format) as a single table in the database.
- Keep a reference to all RRD files in a table to provide an interface only.
People have tried to tackle this conflict before such as Graphite and their Whisper RRDTool replacement. And then there is also RRS which is more like the hybrid I am looking for.
My initial idea is to create a Django app which can represent an RRD file as an object which provides an interface to the file. There are a few python RRDTool libraries out their which could help achieve this, but I would be interested to know if anyone else had thought about this kind of integration - that of Django and RRDTool.