RRD::Simple::Examples.3pm

Langue: en

Autres versions - même langue

Version: 2010-05-06 (fedora - 01/12/10)

Section: 3 (Bibliothèques de fonctions)

NAME

RRD::Simple::Examples - 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 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 <http://www.apache.org/licenses/LICENSE-2.0>