Projet

Général

Profil

Paste
Télécharger au format
Statistiques
| Branche: | Révision:

root / plugins / other / openvz-load-avg @ 389b5970

Historique | Voir | Annoter | Télécharger (3,55 ko)

1
#!/usr/bin/perl
2
# 
3
# Copyright (c) 2008, Maxime Besson
4
# Copyright (c) 2011, David Bernard
5
# 
6
# Permission to use, copy, modify, and/or distribute this software for any
7
# purpose with or without fee is hereby granted, provided that the above
8
# copyright notice and this permission notice appear in all copies.
9
# 
10
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
#
18
# 
19
# Graph VE load averages on an OpenVZ server
20
#
21
# This plugin needs root privileges to call vzlist, so add this :
22
#
23
# [openvz_loadavg]
24
# user root
25
#
26
# to your munin config (or use sudo)
27
#
28
# Changelog
29
# version 0.1 - 2008 September 17
30
# Maxime Besson <mabes@smile.fr>
31
# - Script creation
32
# version 0.2 - 2011 July 18
33
# Bernard David <daber@smile.fr>
34
# - Script improvements : multigraph
35

    
36
use strict;
37
my $arg=shift(@ARGV);
38

    
39
# Various tests
40
if ( ! -d "/proc/vz" ) {
41
	print "This server does not seem to run OpenVZ\n";
42
	exit(1);
43
}
44

    
45
if ( $> ne "0" ) {
46
	print "Must run as root\n";
47
	exit(1);
48
}
49

    
50
# Autoconfig
51
if ( $arg eq "autoconf" ) {
52
	print "yes\n";
53
} elsif ( $arg eq "config" ) {
54
        print "multigraph openvz_loadavg\n";
55
        print "graph_title loadavg of VE\n";
56
        print "graph_args --base 1000 -l 0 -N\n";
57
        print "graph_scale no\n";
58
        print "graph_vlabel loadavg\n";
59
        print "graph_info Shows 5-minute load average per VE\n";
60
        print "graph_category OpenVZ\n";
61

    
62
	# Dynamic config
63
	my @result=`/usr/sbin/vzlist -H -a -s veid -o veid,name`;
64
	my $A=0; # draw an area only under the first line
65
        
66
	for (@result ) {
67
		( my $veid,my $label ) = /^\s*(\d+)\s*([\w\-]+)\s*$/ ;
68
		my $name = $label;
69
                $name =~ s/\W/_/g;
70

    
71
                print "$name.label $label: load average\n";
72
                print "$name.min 0\n";
73
                if ($A==0) {
74
                        print "$name.draw AREA\n";
75
                        $A=1;
76
                }else{
77
                        print "$name.draw STACK\n";
78
                }
79
        }
80

    
81
	for (@result ) {
82
		( my $veid,my $label ) = /^\s*(\d+)\s*([\w\-]+)\s*$/ ;
83
		my $name = $label;
84
                $name =~ s/\W/_/g;
85

    
86
                print "multigraph openvz_loadavg.$name\n";
87
                print "graph_title loadavg of VE\n";
88
                print "graph_vlabel loadavg\n";
89
		print "$name.label $label: load average\n";
90
		print "$name.info Average load on $label for the past 5 minutes\n";
91
                print "$name.min 0\n";
92
       		print "$name.draw AREA\n";
93
	}
94
} else {
95
        # Getting the values
96
	my @result=`/usr/sbin/vzlist -H -s veid -o veid,name,laverage`;
97
	my $A=0;
98
        print "multigraph openvz_loadavg\n";
99
        print "graph_title loadavg of VE\n";
100
        print "graph_vlabel loadavg\n";
101
        print "graph_category OpenVZ\n";
102

    
103
	for (@result ) {
104
		if (( my $veid,my $label, my $laverage ) = /^\s*(\d+)\s+([\w\-]+)\s+[\d\.]+\/([\d\.]+)\/[\d\.]+\s*$/) {
105
			my $name = $label;
106
			$name =~ s/\W/_/g;
107
                        print "$name.label $name\n";
108
                        print "$name.min 0\n";
109
                        if ($A==0) { print "$name.draw AREA\n"; $A=1; } else { print "$name.draw STACK\n"; }
110
                        print "$name.value $laverage\n"
111
                }
112
        }
113

    
114
}