Smokeping on Nginx

April 23, 2012

This blog post is *ancient*, and preserved only for historical record.

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 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

/opt/smokeping-2.6.8 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!

Profile picture

Written by Tom O'Connor, an AWS Technical Specialist, with background in DevOps and scalability. You should follow them on Twitter