Easily parsable output from rrdtool

Morten Siebuhr picture Morten Siebuhr · Oct 18, 2011 · Viewed 11.5k times · Source

I'm working with a large bunch of RRD-files, where I have to query the data quite a lot - and mostly by reading all the data and pass it on.

Currently, I use rrdtool fetch <filename> CF --start XXX --end YYY, but as it only returns data for one CF at a time, I first have to do a separate query to find the CF's (= run and parse rrdtool info <filename>) and then run rrdtool fetch for each found CF. The output is trivial to parse, though.

Alternately, there is rrdtool xport DEF:XX=<filename>:RRA:CF ... XPORT:XX:XX ... with multiple "sets" of the latter commands for each thing I want. On the upside, this can give me all the data in one go, but I still need to have a fairly good idea about what data I want beforehand. Also, it only spits out XML (always a hassle to parse).

I have a feeling I'm missing something very obvious, as it simply can't be such a big hassle to get a list of timestamp → numbers out of a file... Any clues?

Answer

Morten Siebuhr picture Morten Siebuhr · Nov 15, 2011

While there are patches around for adding JSON-support, there is currently no way around:

  • Parsing at least two different output formats (rrdtool info's ASCII and then either XML from rrdtool xport or tabular data from rrdtool fetch).
  • Dumping the entire contents of the file to XML via rrdtool dump and then re-implementing quite a bit of librrd's internals.