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