RRD::Simple::Examples(3) Examples using RRD::Simple

EXAMPLES

Example 1: Basic Data Gathering Using vmstat

 use strict;
 use RRD::Simple;
 
 my $cmd = "/usr/bin/vmstat 2 3";
 my $rrdfile = "vmstat-cpu.rrd";
 my $rrd = RRD::Simple->new( file => $rrdfile );
 
 my @keys = ();
 my %update = ();
 open(PH,"-|",$cmd) or die qq{Unable to open file handle PH for command "$cmd": $!};
 while (local $_ = <PH>) {
     next if /---/;
     s/^\s+|\s+$//g;
     if (/\d+/ && @keys) {
         @update{@keys} = split(/\s+/,$_);
     } else { @keys = split(/\s+/,$_); }
 }
 close(PH) or die qq{Unable to close file handle PH for command "$cmd": $!};
 
 my @cpukeys = splice(@keys,-4,4);
 my %labels = (wa => "IO wait", id => "Idle", sy => "System", us => "User");
 
 $rrd->create(map { ($_ => "GAUGE") } @cpukeys) unless -f $rrdfile;
 $rrd->update(map { ($_ => $update{$_}) } @cpukeys);

Example 2: Setting Minimum and Maximum Value Limits

This example shows how to set the minimum value to zero on a datasource using the RRDs::tune function. Use "-i" or "--minimum" to set the minimum value, and "-a" or "--maximum" to set the maximum value.

See <http://www.rrdtool.org/rrdtool/doc/rrdtune.en.html>.

 use strict;
 use RRD::Simple;
 use RRDs;
 my %update = ();
 my $cmd = "/usr/bin/iostat -k";
 
 open(PH,"-|",$cmd) or die qq{Unable to open file handle PH for command "$cmd": $!};
 while (local $_ = <PH>) {
     if (my ($dev,$r,$w) = $_ =~ /^([\w\d]+)\s+\S+\s+\S+\s+\S+\s+(\d+)\s+(\d+)$/) {
         $update{$dev} = { "read" => $r, "write" => $w };
     }
 }
 close(PH) or die qq{Unable to close file handle PH for command "$cmd": $!};
 for my $dev (keys %update) {
     my $rrdfile = "iostat-$dev.rrd";
     my $rrd = RRD::Simple->new( file => $rrdfile );
 
     unless (-f $rrdfile) {
         $rrd->create(
                 map { ($_ => "DERIVE") } sort keys %{$update{$dev}}
             );
         RRDs::tune($rrdfile, "-i", "$_:0") for keys %{$update{$dev}};
     }
 
     $rrd->update(%{$update{$dev}});
 }

Example 3: Creating RRDs with Different Data Retention Periods

The second (optional) parameter to the create method is the data retention period. Valid values are ``day'', ``week'', ``month'', ``year'', ``3years'' and ``mrtg''. The default value is ``mrtg''.

The ``mrtg'' data retention period uses a data stepping resolution of 300 seconds (5 minutes) and heartbeat of 600 seconds (10 minutes), whereas all the other data retention periods use a data stepping resolution of 60 seconds (1 minute) and heartbeat of 120 seconds (2 minutes).

 use strict;
 use RRD::Simple;
 
 my $rrd = RRD::Simple->new( file => "myfile.rrd" );
 my @period = qw(day week month year 3years mrtg);
 $rrd->create($period[1],
         datasource1 => "GAUGE",
         datasource2 => "GAUGE",
         datasource3 => "GAUGE",
     );

Example 4: Drawing an Average Value Horizonal Rule on a Graph

Graph parameters are preserved and should be passed through to RRDs correctly: VDEF, CDEF, DEF, GPRINT, PRINT, COMMENT, HRULE, VRULE, LINE, AREA, TICK, SHIFT and STACK. Use the VDEF and HRULE parameters to draw a horizontal rule on your graph.

 use strict;
 use RRD::Simple;
 
 my $rrd = RRD::Simple->new( file => "frequency.rrd" );
 $rrd->create("day",
         Frequency => "GAUGE",
     );
 
 my $end = time();
 my $start = $end - (60 * 60 * 24);
 my $i = 0;
 my $rand = int(rand(100));
 
 for (my $t = $start; $t <= $end; $t += 60) {
     $rrd->update($t,
             Frequency => ( cos($i += 0.01) * 100 ) + $rand,
         );
 }
 
 $rrd->graph(
         sources => [ qw(Frequency) ],
         "VDEF:FrequencyAVERAGE=Frequency,AVERAGE" => "",
         "HRULE:FrequencyAVERAGE#00ff77:Average" => "",
     );

Example 5: Drawing a Fixed Height Stacked Graph

 use strict;
 use RRD::Simple;
 
 my $rrdfile = "vmstat-cpu.rrd";
 my $rrd = RRD::Simple->new( file => $rrdfile );
 
 $rrd->graph(
         title => "CPU Utilisation",
         vertical_label => "% percent",
         upper_limit => 100,
         lower_limit => 0,
         rigid => "",
         sources => [ qw(sy us wa id) ],
         source_drawtypes => [ qw(AREA STACK STACK STACK) ],
         extended_legend => 1,
     );

Example 6: Setting Custom Graph Colours

The "color" parameter can be used to override the default colours for standard elements of the graph. Valid elements are: BACK, CANVAS, SHADEA, SHADEB, GRID, MGRID, FONT, AXIS, FRAME and ARROW. See <http://oss.oetiker.ch/rrdtool/doc/rrdgraph.en.html> for further information.

 use strict;
 use RRD::Simple;
 
 my $rrd = RRD::Simple->new( file => "vmstat-cpu.rrd" );
 
 $rrd->graph(
         title => "CPU Utilisation",
         source_colors => {
                 sy => "ff0000",
                 us => "00ff00",
                 wa => "0000ff",
                 id => "ffffff",
             },
         color => [ ( "BACK#F5F5FF", "SHADEA#C8C8FF",
                      "SHADEB#9696BE", "ARROW#61B51B",
                      "GRID#404852", "MGRID#67C6DE" ) ],
     );

Example 7: Capacity Planning Predictions

 use strict;
 use RRD::Simple 1.44;
 
 my $rrd = RRD::Simple->new( file => "memory_usage.rrd" );
 
 $rrd->graph(
         periods => [ qw(week month) ],
         title => "Memory Utilisation",
         base => 1024,
         vertical_label => "bytes",
         sources => [ qw(Total Used) ],
         source_drawtypes => [ qw(AREA LINE) ],
         source_colors => [ qw(dddddd 0000dd) ],
         lower_limit => 0,
         rigid => "",
         "VDEF:D=Used,LSLSLOPE" => "",
         "VDEF:H=Used,LSLINT" => "",
         "VDEF:F=Used,LSLCORREL" => "",
         "CDEF:Proj=Used,POP,D,COUNT,*,H,+" => "",
         "LINE2:Proj#800000: Projection" => "",
     );

COPYRIGHT

Copyright 2005,2006,2007,2008 Nicola Worthington.

This software is licensed under The Apache Software License, Version 2.0.

<http://www.apache.org/licenses/LICENSE-2.0>