[smokeping-users] Adding InfluxDB support to smokeping

Adrian Popa adrian_gh.popa at telekom.ro
Fri Oct 4 09:20:26 CEST 2019

Hello all!

I know the list is mostly idle/shutting down, but I'm following the 
recommendation on github (HACKING) to discuss new potentially disruptive 
changes on the mailing list. If I get no replies I will open a ticket on 

We're using smokeping to do some automated network parameter 
measurements to check on the perceived service quality we offer our end 
customers. We're using remote probes/slaves to do measurements from 
different points in the network and aggregating the data on the master. 
I've also created some plugins in the past few years, so we want to 
stick with smokeping for the measurements.

However, the web GUI is not really suitable for large scale data 
analysis. It's ok for historical analysis only. So, I'm planning on 
making a few (hopefully small) changes to smokeping to add support to 
write the measurements in an influxdb database, in addition to storing 
them as RRD. I hope to be able to push the changes (once they're 
working) to the main Smokeping branch. Having data in influxdb allows 
easier automated analysis (e.g. using an sql-like language to get the 
latest measurements for a destination from all the slaves, without 
having to parse the RRD files). It also opens up the possibility to have 
views exposed in Grafana and other more modern data visualization tools.

Here's what I'm planning:

1. Allow the addition of custom configuration options to the config file 
so that those options can be mapped to influxdb tags (so that they are 
easily searchable in influxdb). For instance, something like this:

+ Hosts_in_region_A

menu = Hosts in region A

title = Hosts in region A

++ client1

host =

probe = fping

influx_download = 100Mbps

influx_upload = 10Mbps

influx_service_type = FTTB

For now, when I try to add configuration options that are not defined, I 
get the error:

ERROR: /opt/smokeping/bin/../etc/config, line 144: unknown variable 

I'm guessing I need to bypass or extend the parser so that such errors 
are ignored, or become warnings. Or, better yet, if I stick with the 
prefix influx_ I can make it accept any influx_ parameter, but complain 
on other typos (which is useful). I'll need to do some reading on the 
Grammar module...

2. Add a new config section that defines connectivity to influxdb (URL, 
user, password)

3. Add a hook inside update_rrds() to intercept the data before being 
written to the RRD (before or after the call to RRDs::update). Push the 
raw data to influxdb (either inline for efficiency, or with a new 
function call for readability).

I'm not 100% certain that the update_rrds() from Smokeping.pm gets 
called for slave updates as well, or there is an equivalent in the CGI 
interface. I'm guessing it's the same, but I will do some tests when I 
get there.

So - what are your thoughts on this? Are there better/easier ways of 
doing it?


More information about the smokeping-users mailing list