Cacti: Using Cacti to monitor web page loading - Part 1
In my current project, I’ve been looking into website performance and measuring how long it takes for webpages to be composed. Although there are plenty of tools both commercial and non-commercial which is available to do just that, they either cost too much or is a one-time data capture tool (which would be quite laborious if we have to constantly trigger it every 5 mins manually).
Instead I investigated on Cacti to see if this commonly used tool by Network/System Admin folks for monitoring network devices and systems can be reworked to let me monitor webpage loading time.
And it did wonderfully…
Cacti is a great application written in PHP, which wraps around the rrdtool. I’m not going to go into what rrdtool is, you can find out more at the rrdtool website.
What I liked about using Cacti and rrdtool is scalability and performance. If I’m going to be polling for readings every 5 mins, I would want a database which will be able to handle the large number of data points. Also, Cacti provides a means to allow me to create my own custom monitoring agents. With this feature, I can pretty much create any kind of monitoring agents I like.
This post will be split into 2 3 parts. Part 1 will walk through the php agent script which you can download from here, and how to test that it’s usable for you. In Part 2, I will cover how to configure Cacti to use the agent script, and to start collecting the data into an rra file. In Part 3, I will cover how to create a graph from the data collected in Part 2 and to draw nice looking graphs like this..

To begin with…
Needless to say, you need to have a copy of Cacti running in your own environment. In my case, I have Ubuntu 8.04 and I just used the Synaptic Package Manager to install a copy. For more installation options, check out the Cacti website.
Next, go grab my script files from here. Inside you should find 2 php scripts - class.pageload.php and pageload-agent.php. I’ve commented both files so hopefully they should be quite self-explanatory.
pageload-agent.php is the agent file, and it takes in 1 parameter, namely the url to your page you want to monitor. class.pageload.php is where the script logic resides. It uses php CURL library functions to make calls to the url you specified and to return with the timing information.
Install the scripts.
Remember, these scripts are meant to be command line executed, so you don’t need them to be in your apache web directories. Just install them in directories which are accessible by Cacti. In my case, I just placed them into my user home directory, in a directory called ‘pageload’.
~$ mkdir pageload ~$ cd pageload ~/pageload$
Next, you need to make pageload-agent.php executable. To do this, just do:
~$ chmod +x pageload-agent.php
Testing the scripts
To test the script is very easy. Decide on the url you want to monitor, in my case I will use AskAboutPHP’s homepage url, and just execute the script like so:
~/pageload$ ./pageload-agent.php http://www.askaboutphp.com/
You should get something like this as the output:
dns:0.004425 con:0.006053 pre:0.006063 str:0.117481 ttl:0.180139 sze:30507 spd:169352
This is the format that Cacti is expecting as its data source. Cacti will read these numbers in and store them in the rrd archive files. So what do they mean?
dns: is the time in seconds until name resolving was complete con: is the time in seconds it took to establish the connection pre: is the time in seconds from start until just before file transfer begins str: is the time in seconds until the first byte is about to be transferred ttl: is the total transaction time in seconds for last transfer sze: is the total number of bytes downloaded spd: is the average download speed
This concludes Part 1. In Part 2, I will step through how to get Cacti setup to start using these scripts to collect the webpage loading time.
- Cacti: Using Cacti to monitor web page loading - Part 2
- Cacti: Using Cacti to monitor web page loading - Part 3
- Cacti: Ubuntu 8.04 Cacti Plugin - Invalid PHP_SELF Path problem
- Writing your first PHP script
- How to get started with PHP?






Hey, thanks- this looks great. Looking forward to part two.
I get this error when testing your script.
“PHP Notice: Undefined offset: 0 in /root/pageload/pageload-agent.php on line 37″
Any Ideas? Your work looks excellent and I have a real use for this!
Hi Joe
Regarding your error. It probably means that getPageLoadStats() at line 29 is not returning any valid results.
Can you check your php environment to see if you are able to use the cURL library has been enabled?
do you know where I can find php script that loads complete web page, including java scripts and images and measures loading time?
Best regards