source: MondoRescue/branches/stable/sar2rrd/io2rrd.pl@ 1030

Last change on this file since 1030 was 1030, checked in by Bruno Cornec, 17 years ago

Creation of a pet project sar2rrd (put under subversion for ease of dev)
Not related to mondorescue

  • Property svn:executable set to *
File size: 3.5 KB
Line 
1#!/usr/bin/perl -w #-d
2#
3# iostat graphing tool based on rrdtool
4# (c) 2004 B. Cornec HP <bruno.cornec@hp.com>
5# Licensed under the GPL or Artistic License
6#
7# Original Charter: Monitor CPU/Load/Net_eth0|2 (io/s)/Disk (io/s)
8# 1 mesure par 20 seconde
9# So the script has been developped first with that context in mind
10# trying to be generic enough to be expandable later on
11# More work needs to be done, some code factorized, ...
12#
13use strict; # Always :-)
14use English; # for $UID
15use Data::Dumper; # for debug
16use Time::Local; # for timestamp
17use Date::Manip; # for timestamp
18use File::Basename; # for file manageemnt
19use Storable; # for data exchange
20use Config::Auto; # for config file
21use sario2rrd qw(create_attr create_gauge update_gauge);
22 # local common functions
23
24# Avoid localisation problems in sar
25$ENV{LANG}="C";
26
27#
28# Begin of configuration options
29#
30my $dir = "sar2rrd"; # Place under the html dir of user apache
31 # Under that directory you should have one
32 # directory per machine and in it all the
33 # files resulting form the sar and iostat
34 # commands (saxx and ioxx). Look at the
35 # cron file and related script
36
37my ($l,$p,$uid,$gid,$q,$c,$gc,$apache,$empty) = getpwnam("apache") or die "apache not in passwd file";
38my $base = "$apache/html/$dir";
39my $config = Config::Auto::parse("$base/$dir.conf");
40my @machines = @{$config->{machines}};
41my $shot = $config->{shot};
42
43#
44# End of configuration options
45#
46my $debug = 0;
47foreach my $a (@ARGV) {
48 $debug++ if ($a =~ /-v/);
49 $| = 1; # Flush STDOUT
50}
51#
52my @day;
53my %t;
54my %attr;
55
56print Dumper($config) if ($debug > 1);
57mkdir $base,0755 if (not (-d $base));
58chown $uid, $gid, $base || warn "Unable to chown $base to $uid" if ($UID == 0);
59#
60# data struct: hash per machine and per timestamp pointing to sar
61# and iostat values and a hash containing the attributes
62#
63
64foreach my $m (@machines) {
65 # Clean the table
66 foreach my $ts (keys %t) {
67 delete $t{$ts};
68 }
69 $attr{$m}{nbfields} = 0;
70 #
71 # The iostat file has to be the result of iostat -x -d
72 # This stores the iostat file content in the %t datastructure
73 #
74 print "Getting iostat info for $m ( " if ($debug > 0);
75 foreach my $d (<$base/$m/io[0-9][0-9]>) {
76 print basename($d)." " if ($debug > 0);
77 my $tmst = "";
78 open(IOSTAT,"$d") || die "Unable to open $d";
79 while (<IOSTAT>) {
80 s/ +/ /g;
81 my ($dev,$rrqm,$wrqm,$r,$w,$rsec,$wsec,$rkb,$wkb,$rqsz,$qusz,$await,$svctm,$util) = split / /;
82 chomp($util) if defined($util);
83 #
84 # This line gives the day
85 #
86 if ($dev =~ /^Linux/) {
87 chomp($r);
88 $r =~ s/\t//g;
89 @day = split(/\//,$r);
90 print "Day:".Dumper(@day) if ($debug > 3);
91 next;
92 }
93 next if ($dev =~ /^Device:/);
94 next if ($dev =~ /^$/);
95 #
96 # This line gives the timestamp
97 #
98 if ($dev =~ /^Time:/) {
99 $tmst = timelocal(reverse(split(/:/,$rrqm)),$day[1],$day[0]-1,$day[2]+2000);
100 print "tmst: $tmst\n" if ($debug > 3);
101 next;
102 }
103 $dev =~ s|^/dev/||;
104 next if (($dev =~ /[0-9]$/) && ($dev !~ /cciss/));
105 next if (($dev =~ /p[0-9]$/) && ($dev =~ /cciss/));
106 $t{$tmst}{$dev."-in"} = $r;
107 $t{$tmst}{$dev."-out"} = $w;
108 }
109 close(IOSTAT);
110 }
111 print ")\n" if ($debug > 0);
112
113 #
114 # Then create hash attributes + rrd base + update it
115 #
116 create_attr(\%t,\%attr,$m,$shot,$debug);
117 create_gauge(\%t,\%attr,$config->{step},"$base/$m/$config->{rrdio}",$uid,$gid,$m,$debug);
118 update_gauge(\%t,\%attr,"$base/$m/$config->{rrdio}",$m,$debug);
119}
120store (\%attr,"$base/$config->{svgio}") || die "Unable to store attr structure: $!";
121print "Please launch sar2html now to get graphs in HTML pages\n" if ($debug > 0);
Note: See TracBrowser for help on using the repository browser.