Monday 23rd April, 2012

Smokeping is one of my favourite diagnostic tools for tracking down sporadic network issues.

You install it, configure it with a list of hosts, and it pings them regularly, and keeps track of the round-trip times, latency, packetloss, and so on.

The web frontend is a Perl CGI script, and as a result, it's a bit of a bugger to make it work on Nginx.

I wasn't gonna install Apache just for this one thing...

Firstly, my server I'm doing this on is ancient, so I installed Smokeping from source.  If you're running a more modern OS, and one where apt-get doesn't return 404 for the package files, I suggest you use vendor provided packages (or community provided PPAs).

Let's get to it.

I downloaded Smokeping 2.6.8 from here.  These installation instructions are great.  I already have rrdtool installed as it's a dependency of Munin (another firm favourite of mine) too.

Fping I downloaded from here , and shamefully built from source too.

The recommended webserver is Apache, but as I'm using Nginx already, and prefer it over Apache for performance and scalability, I decided it couldn't be that hard to do it without Apache.

I had to install a bunch of prerequesite Perl modules.  Fortunately, once you've extracted the smokeping distribution archive, there's a script "setup/" that does all the hard work for you.

So all I basically did. 

mkdir smokeping_install
cd smokeping_install
tar xzvf smokeping-2.6.8.tar.gz
tar xzvf fping-2.4b2_to4-ipv6.tar.gz
cd fping-2.4b2_to4-ipv6
sudo make install
cd ~/smokeping_install/smokeping-2.6.8
sudo make install

Which puts the fping binary in /usr/local/sbin/fping

and smokeping itself in 


Things I had to do by hand:

mkdir /opt/smokeping-2.6.8/cache
chmod a+w /opt/smokeping-2.6.8/cache

and of course, the Nginx config.

I wanted to tack smokeping onto my Munin vhost, so I just added a couple of sections to the bottom of that vhost configuration

        location /smokeping {
            include proxy.conf;
        location /smokeping/ {
            alias /opt/smokeping-2.6.8/htdocs;

Nginx can't serve CGI scripts by itself, so it requires a CGI server bound to localhost in order to make those accessible.  I'm using Thttpd, as suggested here.

I downloaded thttpd from here.

It's insanely easy to build, same old combo of ./configure && make && make install.

The Nginx wiki article about Thttpd CGI serving suggests a patch to thttpd for adding the X-Forwarded-For header. 

Patching the file is *easy*.  Just save the patch file, and drop into the thttpd-2.25 source directory, and run

patch < thttpd.patch

Then make and install as per usual.

Here's my thttpd.conf file (in /etc/thttpd.conf)


Once smokeping is running, it will generate rrd files that can be examined by the CGI scripts to produce html output. 

Ta da!


Site Search


Random String

Tom can slam a revolving door.

Blogish RSS Feed