Projet

Général

Profil

Révision 332c74d7

ID332c74d72025f9a2b51e0852125a484902f83f80
Parent 8fbe0ebe
Enfant e1f060df

Ajouté par ivan il y a presque 13 ans

CPU usage graph, skip list, some cleanup

- xenskip option to skip graph types
env.xenskip "<space separated module list>"
Modules: cput, cpup, mem, disk, net
- CPU percentage graph added

Voir les différences:

plugins/virtualization/xen-multi
19 19

  
20 20
 [xen-multi]
21 21
 user root
22
 env.xenskip "<space separated module list>"
23

  
24
Modules: cput, cpup, mem, disk, net
22 25

  
23 26
Then restart munin-node and you're done.
24 27

  
......
34 37
both graphs show its entry all the same, so each domain can keep its own color
35 38
along the different graphs.
36 39

  
37
=head2 CPU usage
40
=head2 CPU time
38 41

  
39 42
This graph shows a percentage of the CPU time used by each domain.
40 43

  
44
=head2 CPU usage
45

  
46
This graph shows a percentage of the CPU percentage used by each domain.
47

  
41 48
=head2 Memory usage
42 49

  
43 50
This graph shows the amount of memory (in bytes) used by each domain.
......
66 73
=head1 AUTHOR
67 74

  
68 75
Raphael HALIMI <raphael.halimi@gmail.com>
76
Modified by Krisztian IVANCSO <github-ivan@ivancso.net>
69 77

  
70 78
=head1 LICENSE
71 79

  
......
76 84
use strict;
77 85
use Munin::Plugin;
78 86

  
87
my $XEN_SKIP = $ENV{xenskip} || "";
88

  
79 89
# autoconf - quite simple
80 90
if ($ARGV[0] eq "autoconf") {
81 91
  if (`which xentop`) {
......
101 111

  
102 112
sub trim_label {
103 113
  my ($type, $label) = @_; my $data_characters;
104
  my ($graph_width, $graph_border_width, $padding_characters, $pixels_per_character) = (400,97,10,6);
114
  my ($graph_width, $graph_border_width, $padding_characters, $pixels_per_character) = (497,3,5,6);
105 115
  if ($type eq 'pos') {$data_characters = 32;} elsif ($type eq 'neg') {$data_characters = 64;} else {return $label;}
106 116

  
107 117
  my $available_characters = abs(($graph_width+$graph_border_width)/$pixels_per_character)-$padding_characters-$data_characters;
......
117 127
}
118 128

  
119 129
# Global variables
120
my (%domains,$domain,$munindomain,$cpusecs,$memk,$nettxk,$netrxk,$vbdrd,$vbdwr);
130
my (%domains,$domain,@domainlist,$munindomain,$cpusecs,$cpupercent,$memk,$nettxk,$netrxk,$vbdrd,$vbdwr);
121 131

  
122
open (XENTOP,"xentop -b -f -i1 |") or die "Could not execute xentop, $!";
132
open (XENTOP,"xentop -b -f -i2 |") or die "Could not execute xentop, $!";
123 133

  
124 134
# Now we build a hash of hashes to store information
125 135
while (<XENTOP>) {
......
129 139
  next if /^NAME/;
130 140

  
131 141
  # We define only what we need
132
  ($domain,undef,$cpusecs,undef,$memk,undef,undef,undef,undef,undef,$nettxk,$netrxk,undef,undef,$vbdrd,$vbdwr,undef,undef,undef) = split(/\s+/);
142
  ($domain,undef,$cpusecs,$cpupercent,$memk,undef,undef,undef,undef,undef,$nettxk,$netrxk,undef,undef,$vbdrd,$vbdwr,undef,undef,undef) = split(/\s+/);
133 143

  
134 144
  # We have to store the sanitised domain name in a separate variable
135 145
  $domains{$domain}{'munindomain'} = clean_fieldname($domain);
......
137 147
  # We need the remaining data only for a normal run
138 148
  if ($ARGV[0] eq "") {
139 149
    $domains{$domain}{'cpusecs'} = $cpusecs;
150
    $domains{$domain}{'cpupercent'} = $cpupercent;
140 151
    $domains{$domain}{'mem'} = $memk;
141 152
    $domains{$domain}{'nettx'} = $nettxk;
142 153
    $domains{$domain}{'netrx'} = $netrxk;
......
145 156
  }
146 157
}
147 158

  
159
@domainlist = sort(keys(%domains));
148 160

  
149 161
#
150 162
# config - quite simple, too
151 163
#
152 164

  
153 165
if ($ARGV[0] eq "config") {
154
  print "multigraph xen_cpu_time\n";
155
  print "graph_title Xen domains CPU time\n";
156
  print "graph_args --base 1000 -l 0\n";
157
  print "graph_vlabel %\n";
158
  print "graph_scale no\n";
159
  print "graph_category xen\n";
160
  print "graph_info This graph shows CPU time for each Xen domain.\n";
161
  for $domain (sort(keys(%domains))) {
162
    print "$domains{$domain}{'munindomain'}_cpu_time.label ".trim_label('pos',$domain)."\n";
163
    print "$domains{$domain}{'munindomain'}_cpu_time.type DERIVE\n";
164
    print "$domains{$domain}{'munindomain'}_cpu_time.cdef $domains{$domain}{'munindomain'}_cpu_time,100,*\n";
165
    print "$domains{$domain}{'munindomain'}_cpu_time.min 0\n";
166
    print "$domains{$domain}{'munindomain'}_cpu_time.draw AREASTACK\n";
166
  if ($XEN_SKIP !~ /cput/) {
167
		print "multigraph xen_cpu_time\n";
168
		print "graph_title Xen domains CPU time\n";
169
		print "graph_args --base 1000 -l 0\n";
170
		print "graph_vlabel cpu seconds\n";
171
		print "graph_scale no\n";
172
		print "graph_category xen\n";
173
		print "graph_info This graph shows CPU time for each Xen domain.\n";
174
		for $domain (@domainlist) {
175
			print "$domains{$domain}{'munindomain'}_cpu_time.label ".trim_label('pos',$domain)."\n";
176
			print "$domains{$domain}{'munindomain'}_cpu_time.type DERIVE\n";
177
			print "$domains{$domain}{'munindomain'}_cpu_time.cdef $domains{$domain}{'munindomain'}_cpu_time,100,*\n";
178
			print "$domains{$domain}{'munindomain'}_cpu_time.min 0\n";
179
			print "$domains{$domain}{'munindomain'}_cpu_time.draw AREASTACK\n";
180
		}
167 181
  }
168 182

  
169
  print "\nmultigraph xen_mem\n";
170
  print "graph_title Xen domains memory usage\n";
171
  print "graph_args --base 1024 -l 0\n";
172
  print "graph_vlabel bytes\n";
173
  print "graph_category xen\n";
174
  print "graph_info This graph shows memory usage for each Xen domain.\n";
175
  for $domain (sort(keys(%domains))) {
176
    print "$domains{$domain}{'munindomain'}_mem.label ".trim_label('pos',$domain)."\n";
177
    print "$domains{$domain}{'munindomain'}_mem.cdef $domains{$domain}{'munindomain'}_mem,1024,*\n";
178
    print "$domains{$domain}{'munindomain'}_mem.draw AREASTACK\n";
183
  if ($XEN_SKIP !~ /cpup/) {
184
		print "\nmultigraph xen_cpu\n";
185
		print "graph_title Xen domains CPU utilization\n";
186
		print "graph_args --base 1000 -l 0 --upper-limit 100\n";
187
		print "graph_vlabel %\n";
188
		print "graph_scale no\n";
189
		print "graph_category xen\n";
190
		print "graph_info This graph shows CPU utilization for each Xen domain.\n";
191
		for $domain (@domainlist) {
192
			print "$domains{$domain}{'munindomain'}_cpu.label ".trim_label('pos',$domain)."\n";
193
			print "$domains{$domain}{'munindomain'}_cpu.draw AREASTACK\n"
194
		}
179 195
  }
180 196

  
181
  print "\nmultigraph xen_net\n";
182
  print "graph_title Xen domains network traffic\n";
183
  print "graph_args --base 1000\n";
184
  print "graph_vlabel bits per \${graph_period} in (-) / out (+)\n";
185
  print "graph_category xen\n";
186
  print "graph_info This graph shows network traffic for each Xen domain.\n";
187
  for $domain (sort(keys(%domains))) {
188
    print "$domains{$domain}{'munindomain'}_netrx.label none\n";
189
    print "$domains{$domain}{'munindomain'}_netrx.cdef $domains{$domain}{'munindomain'}_netrx,8192,*\n";
190
    print "$domains{$domain}{'munindomain'}_netrx.type COUNTER\n";
191
    print "$domains{$domain}{'munindomain'}_netrx.graph no\n";
192
    print "$domains{$domain}{'munindomain'}_nettx.label ".trim_label('neg',$domain)."\n";
193
    print "$domains{$domain}{'munindomain'}_nettx.cdef $domains{$domain}{'munindomain'}_nettx,8192,*\n";
194
    print "$domains{$domain}{'munindomain'}_nettx.type COUNTER\n";
195
    print "$domains{$domain}{'munindomain'}_nettx.draw AREASTACK\n";
196
    print "$domains{$domain}{'munindomain'}_nettx.negative $domains{$domain}{'munindomain'}_netrx\n";
197
  if ($XEN_SKIP !~ /mem/) {
198
		print "\nmultigraph xen_mem\n";
199
		print "graph_title Xen domains memory usage\n";
200
		print "graph_args --base 1024 -l 0\n";
201
		print "graph_vlabel bytes\n";
202
		print "graph_category xen\n";
203
		print "graph_info This graph shows memory usage for each Xen domain.\n";
204
		for $domain (@domainlist) {
205
			print "$domains{$domain}{'munindomain'}_mem.label ".trim_label('pos',$domain)."\n";
206
			print "$domains{$domain}{'munindomain'}_mem.cdef $domains{$domain}{'munindomain'}_mem,1024,*\n";
207
			print "$domains{$domain}{'munindomain'}_mem.draw AREASTACK\n";
208
		}
197 209
  }
198 210

  
199
  print "\nmultigraph xen_disk\n";
200
  print "graph_title Xen domains disk IOs\n";
201
  print "graph_args --base 1000\n";
202
  print "graph_vlabel IOs per \${graph_period} read (-) / write (+)\n";
203
  print "graph_category xen\n";
204
  print "graph_info This graph shows disk IOs for each Xen domain.\n";
205
  for $domain (sort(keys(%domains))) {
206
    print "$domains{$domain}{'munindomain'}_vbdrd.label none\n";
207
    print "$domains{$domain}{'munindomain'}_vbdrd.type COUNTER\n";
208
    print "$domains{$domain}{'munindomain'}_vbdrd.graph no\n";
209
    print "$domains{$domain}{'munindomain'}_vbdwr.label ".trim_label('neg',$domain)."\n";
210
    print "$domains{$domain}{'munindomain'}_vbdwr.type COUNTER\n";
211
    print "$domains{$domain}{'munindomain'}_vbdwr.draw AREASTACK\n";
212
    print "$domains{$domain}{'munindomain'}_vbdwr.negative $domains{$domain}{'munindomain'}_vbdrd\n";
211
  if ($XEN_SKIP !~ /net/) {
212
		print "\nmultigraph xen_net\n";
213
		print "graph_title Xen domains network traffic\n";
214
		print "graph_args --base 1000\n";
215
		print "graph_vlabel bits per \${graph_period} in (-) / out (+)\n";
216
		print "graph_category xen\n";
217
		print "graph_info This graph shows network traffic for each Xen domain.\n";
218
		for $domain (@domainlist) {
219
			print "$domains{$domain}{'munindomain'}_netrx.label none\n";
220
			print "$domains{$domain}{'munindomain'}_netrx.cdef $domains{$domain}{'munindomain'}_netrx,8192,*\n";
221
			print "$domains{$domain}{'munindomain'}_netrx.type COUNTER\n";
222
			print "$domains{$domain}{'munindomain'}_netrx.graph no\n";
223
			print "$domains{$domain}{'munindomain'}_nettx.label ".trim_label('neg',$domain)."\n";
224
			print "$domains{$domain}{'munindomain'}_nettx.cdef $domains{$domain}{'munindomain'}_nettx,8192,*\n";
225
			print "$domains{$domain}{'munindomain'}_nettx.type COUNTER\n";
226
			print "$domains{$domain}{'munindomain'}_nettx.draw AREASTACK\n";
227
			print "$domains{$domain}{'munindomain'}_nettx.negative $domains{$domain}{'munindomain'}_netrx\n";
228
		}
229
  }
230

  
231
  if ($XEN_SKIP !~ /disk/) {
232
		print "\nmultigraph xen_disk\n";
233
		print "graph_title Xen domains disk IOs\n";
234
		print "graph_args --base 1000\n";
235
		print "graph_vlabel IOs per \${graph_period} read (-) / write (+)\n";
236
		print "graph_category xen\n";
237
		print "graph_info This graph shows disk IOs for each Xen domain.\n";
238
		for $domain (@domainlist) {
239
			print "$domains{$domain}{'munindomain'}_vbdrd.label none\n";
240
			print "$domains{$domain}{'munindomain'}_vbdrd.type COUNTER\n";
241
			print "$domains{$domain}{'munindomain'}_vbdrd.graph no\n";
242
			print "$domains{$domain}{'munindomain'}_vbdwr.label ".trim_label('neg',$domain)."\n";
243
			print "$domains{$domain}{'munindomain'}_vbdwr.type COUNTER\n";
244
			print "$domains{$domain}{'munindomain'}_vbdwr.draw AREASTACK\n";
245
			print "$domains{$domain}{'munindomain'}_vbdwr.negative $domains{$domain}{'munindomain'}_vbdrd\n";
246
		}
213 247
  }
214 248

  
215 249
  exit 0;
......
220 254
# Normal run
221 255
#
222 256

  
223
print "multigraph xen_cpu_time\n";
224
for $domain (sort(keys(%domains))) {
225
  print "$domains{$domain}{'munindomain'}_cpu_time.value $domains{$domain}{'cpusecs'}\n";
257
if ($XEN_SKIP !~ /cput/) {
258
	print "multigraph xen_cpu_time\n";
259
	for $domain (@domainlist) {
260
		print "$domains{$domain}{'munindomain'}_cpu_time.value $domains{$domain}{'cpusecs'}\n";
261
	}
226 262
}
227 263

  
228
print "\nmultigraph xen_mem\n";
229
for $domain (sort(keys(%domains))) {
230
  print "$domains{$domain}{'munindomain'}_mem.value $domains{$domain}{'mem'}\n";
264
if ($XEN_SKIP !~ /cpup/) {
265
	print "\nmultigraph xen_cpu\n";
266
	for $domain (@domainlist) {
267
		print "$domains{$domain}{'munindomain'}_cpu.value $domains{$domain}{'cpupercent'}\n";
268
	}
231 269
}
232 270

  
233
print "\nmultigraph xen_net\n";
234
for $domain (sort(keys(%domains))) {
235
  print "$domains{$domain}{'munindomain'}_nettx.value $domains{$domain}{'nettx'}\n";
236
  print "$domains{$domain}{'munindomain'}_netrx.value $domains{$domain}{'netrx'}\n";
271
if ($XEN_SKIP !~ /mem/) {
272
	print "\nmultigraph xen_mem\n";
273
	for $domain (@domainlist) {
274
		print "$domains{$domain}{'munindomain'}_mem.value $domains{$domain}{'mem'}\n";
275
	}
237 276
}
238 277

  
239
print "\nmultigraph xen_disk\n";
240
for $domain (sort(keys(%domains))) {
241
  print "$domains{$domain}{'munindomain'}_vbdrd.value $domains{$domain}{'vbdrd'}\n";
242
  print "$domains{$domain}{'munindomain'}_vbdwr.value $domains{$domain}{'vbdwr'}\n";
278
if ($XEN_SKIP !~ /net/) {
279
	print "\nmultigraph xen_net\n";
280
	for $domain (@domainlist) {
281
		print "$domains{$domain}{'munindomain'}_nettx.value $domains{$domain}{'nettx'}\n";
282
		print "$domains{$domain}{'munindomain'}_netrx.value $domains{$domain}{'netrx'}\n";
283
	}
243 284
}
285

  
286
if ($XEN_SKIP !~ /disk/) {
287
	print "\nmultigraph xen_disk\n";
288
	for $domain (@domainlist) {
289
		print "$domains{$domain}{'munindomain'}_vbdrd.value $domains{$domain}{'vbdrd'}\n";
290
		print "$domains{$domain}{'munindomain'}_vbdwr.value $domains{$domain}{'vbdwr'}\n";
291
	}
292
}
293

  

Formats disponibles : Unified diff