The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

RRD::Simple::Examples - Examples using RRD::Simple

EXAMPLES

Example 1: Basic Data Gathering Using vmstat

 use strict;
 use RRD::Simple;
 
 my $rrdfile = "vmstat-cpu.rrd";
 my $rrd = new 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 trhgouh to RRDs correctly: VDEF, CDEF, DEF, GPRINT, PRINT, COMMENT, HRULE, VRULE, LINE, AREA, TICK, SHIFT and STACK. Use the HRULE parameter 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) ],
         "HRULE:FrequencyAVERAGE#00ff77:Average" => "",
     );

Example 5: Drawing a Fixed Height Stacked Graph

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

COPYRIGHT

Copyright 2005,2006,2007 Nicola Worthington.

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

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