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/build-perl-modules.sh" that does all the hard work for you.

So all I basically did. 

mkdir smokeping_install
cd smokeping_install
wget http://oss.oetiker.ch/smokeping/pub/smokeping-2.6.8.tar.gz
wget http://oss.oetiker.ch/smokeping/pub/fping-2.4b2_to4-ipv6.tar.gz
tar xzvf smokeping-2.6.8.tar.gz
tar xzvf fping-2.4b2_to4-ipv6.tar.gz
cd fping-2.4b2_to4-ipv6
./configure
make
sudo make install
cd ~/smokeping_install/smokeping-2.6.8
./configure
make
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;
            proxy_pass http://127.0.0.1:10000/smokeping.cgi;
        }
        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)

host=127.0.0.1
port=10000
user=www-data
logfile=/var/log/thttpd.log
pidfile=/var/run/thttpd.pid
dir=/opt/smokeping-2.6.8/htdocs/
cgipat=**.cgi|**.pl

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

Sharing

Random String

Some say he can divide be zero; and he was the cause of the big bang.

Blogish RSS Feed

Links