Quickly graphing RRD data
Friday, December 10, 2010 8:00:00 AM
Still fiddling with RRD, and I'm about at the end of the tunnel
I finally collected a significant amount of data, and I have scripts to aggregate different sources. What I was missing was a quick way to generate graphs, so that I could visually check if my aggregated data "looks" OK.As usual, the syntax of
rrdtool graph is quite verbose and cryptic, not exactly what you hope when all you need is a quick one-shot graph of some RRD files.
As always, Perl comes to the rescue, this time with RRD::Simple. RRD::Simple is by default able to generate nice graphs with pre-loaded color schemes --if you suck at choosing colors like me, this is a really appreciable feature. It has a set of pre-defined graphs that it can generate, as well, but since it accepts native RRD options (beside its own set), it's actually easy to bend it at your need, and generating a graph just needs a one-liner:perl -MRRD::Simple -e 'RRD::Simple->graph("aggr_root_storage.rrd", destination => "/tmp", sources => [ qw{perc_used worst_perc_free} ], width => 1024, height => 768, start => 1288566000, end => 1291158000, periods => [ "daily" ] )'
Or, reindented:
perl -MRRD::Simple -e \
'RRD::Simple->graph("aggr_root_storage.rrd", \
destination => "/tmp", \
sources => [ qw{perc_used worst_perc_free} ], \
width => 1024, height => 768, \
start => 1288566000, end => 1291158000, \
periods => [ "daily" ] )'
The
periods options, in this case, has no purpose but to generate only one graph (otherwise you would get many graphs, all equal; why? go and find out yourself, if you really care 
And what about plotting a collection of RRDs? It could be something like:
$ for FILE in aggr*.rrd ; do export FILE ; perl -MRRD::Simple -e 'RRD::Simple->graph($ENV{FILE}, destination => "/tmp", width => 1024, height => 768, start => 1288566000, end => 1291158000, periods => [ "daily" ] )' ; done
or, clearer:
$ for FILE in aggr*.rrd ; \
do \
export FILE ; \
perl -MRRD::Simple -e \
'RRD::Simple->graph($ENV{FILE}, \
destination => "/tmp", \
width => 1024, height => 768, \
start => 1288566000, end => 1291158000, \
periods => [ "daily" ] )' ; \
done






