extract disk and network from running kvm instances
[gnt-info] / gnt-monitor
1 #!/usr/bin/perl
2 use warnings;
3 use strict;
4 use autodie;
5
6 my $DEBUG = $ENV{DEBUG} || 0;
7 my $INFLUX = 'http://10.60.0.89:8186/write';
8
9 my $hostname = `hostname -s`;
10 chomp $hostname;
11
12 use Data::Dump;
13 sub XXX { $DEBUG ? warn "XXX ",Data::Dump::dump( @_ ) : {} };
14
15 my $stat;
16
17 foreach my $glob ( glob '/var/run/ganeti/instance-disks/*' ) {
18         my ( $instance, $disk ) = split(/:/,$glob,2);
19         my $dev = readlink $glob;
20         $instance =~ s{^.*/}{};
21         $dev =~ s{^.*dev/}{};
22         $stat->{$instance}->{disk}->[$disk]->{dev} = $dev;
23         open( my $fh, '<', "/sys/class/block/$dev/stat" );
24         my $v = <$fh>; chomp $v; $v =~ s/^\s+//;
25         my @s = split(/\s+/, $v );
26         # https://www.kernel.org/doc/Documentation/block/stat.txt
27         $stat->{$instance}->{disk}->[$disk]->{read_io} = $s[0];
28         $stat->{$instance}->{disk}->[$disk]->{read_bytes} = $s[2] * 512;
29         $stat->{$instance}->{disk}->[$disk]->{read_wait} = $s[3];
30         $stat->{$instance}->{disk}->[$disk]->{write_io} = $s[4];
31         $stat->{$instance}->{disk}->[$disk]->{write_bytes} = $s[6] * 512;
32         $stat->{$instance}->{disk}->[$disk]->{write_wait} = $s[7];
33 }
34
35 foreach my $instance ( glob '/var/run/ganeti/kvm-hypervisor/nic/*' ) {
36         foreach my $nic ( glob "$instance/*" ) {
37                 open(my $fh, '<', "$nic");
38                 my $dev = <$fh>;
39                 $nic =~ s{^.*/}{};
40 XXX $nic;
41                 $instance =~ s{^.*/}{};
42                 $stat->{$instance}->{nic}->[$nic]->{dev} = $dev;
43                 my $vlan = readlink "/sys/class/net/$dev/master";
44                 $vlan =~ s/^.*br//;
45                 $stat->{$instance}->{nic}->[$nic]->{vlan} = $vlan;
46                 foreach my $f (qw( rx_bytes tx_bytes rx_packets tx_packets )) {
47                         open( my $fh, '<', "/sys/class/net/$dev/statistics/$f" );
48                         my $v = <$fh>; chomp $v;
49                         $stat->{$instance}->{nic}->[$nic]->{$f} = $v;
50                 }
51         }
52 }
53
54 XXX $stat;
55