At NoSQL Matters Dublin 2014, my colleague Richard and I gave a tutorial on handling time series data with OpenTSDB. Also at this conference was Sebastian who talked about InfluxDB. And I have to admit I was intrigued by InfluxDB:

It is written in Go without any dependencies; just install it — for example along with Grafana as dashboard — and start ingesting data.

InfluxDB offers a number of client libs from JavaScript over Python to Scala as well as integration points, such as a fluentd plugin.

In the cluster mode, InfluxDB uses Raft for synchronisation purposes — seems like all the kool kids are doing this these days; yes I’m looking at you etcd.

Most importantly, InfluxDB has a very powerful query language, allowing you to aggregate data points, merge & join time series as well as conditionally splitting one time series into many, called to fan out. Last but not least, continuos queries allow you to inspect series in real-time.

InfluxDB admin interface showing how to execute a query and built-in rendering of time series.

To give you an idea how powerful the InfluxDB query language is, let’s have a look at a concrete example:

select mean(value), percentile(90, value) as percentile_90

from /^stats.*/

group by time(10m)

into 10m.:series_name

With the above query you calculate the mean and 90% percentile of all time series starting with stats (first two lines), down-sample them (through group by) and finally fan them out into a respective number of time series (such as, say, 10m.stats_a, 10m.stats_b, etc.).

I wonder what it takes to port InfluxDB’s query language to OpenTSDB. I think it would be a very useful thing to do.