[hobbit] Re: Monitoring and ESX host
Aaron Stranberg
aaron.stranberg at gmail.com
Thu Jul 5 17:54:37 CEST 2007
Thanks! That is very helpful information, would you be willing to share your
compiled rhel3 version of the hobbit client?
Thanks
-Aaron
On 7/4/07, chris brown <brown.crisn at gmail.com> wrote:
>
> I have written some checks for both esx 25x and esx3.
>
> These should probably be re-written at some stage, just haven't taken the
> time to yet, but I hope you get some ideas.
>
> For ESX 3.0.1 and up you can take the OO approach with VMPerl (See
> example one) [it's very slow]. I say use 3.0.1 because although the sdk
> manual says these methods are supported in esx 3.0.0 there seem to be some
> problems with VmPerl that are fixed in 3.0.1.
>
> Or you can do most of this stuff by parsing the /proc nodes (see example 2
> and 3 below)
>
> EX 1.
> use VMware::VmPerl;
> use VMware::VmPerl::VM;
> use VMware::VmPerl::ConnectParams;
> use strict;
>
> my @list_of_cfg = </proc/vmware/vm/*/names>; foreach (@list_of_cfg) {
> my $file_info = `cat $_`;
> my @get_vmx_info = split(/\s+/,$file_info);
> my $cfg_path = $get_vmx_info[2];
> $cfg_path =~ s/cfgFile.//g;
> $cfg_path =~ s/\"//g;
> #print "$cfg_path\n"; }
>
> my $connect_params = VMware::VmPerl::ConnectParams::new;
> my $vm = VMware::VmPerl::VM::new();
> my $i;
> if (!$vm->connect($connect_params, $cfg_path)) {
> my ($error_number, $error_string) = $vm->get_last_error();
> undef $vm;
> die "Could not connect to vm: Error $error_number:
> $error_string\n";
> }
>
> my $name1 = $vm->get_config('displayName');
> my $mem = $vm->get_config('memsize');
> my $OS = $vm->get_config('guestOS');
> my $mem_active = $vm->get_resource('mem.active');
> my $mem_ovhd = $vm->get_resource('mem.overhd');
> my $cpu = $vm->get_resource(' cpu.number');
> my $mem_swap_in = $vm->get_resource('mem.swapin');
> my $mem_shared = $vm->get_resource('mem.shared');
>
>
> print
> "\n---------------------------------------------------------------
> ------------\n";
> print "\tMachine Name is: $name1\n";
> print "\tMachine has: $mem MB RAM\n";
> print "\tOS: $OS\n";
> print "\tNum cpu's: $cpu CPU\n";
> print "\t--------------------stats--------------------\n";
> for($i=0; $i<$cpu; $i++) {
>
> my $usedsec = $vm->get_resource("cpu.${i}.usedsec");
>
> print "\tUsed vmkernel cpu time for cpu${i}: $usedsec (sec)\n";
>
> }
> print "\tMem swapped in: $mem_swap_in\n";
> print "\tMem active: $mem_active\n";
> print "\tMem overhead: $mem_ovhd\n";
> print "\tMem shared: $mem_shared\n"; }
>
> EX2 This gets the swapped/swptgt from /proc/vmware/sched/mem This should
> work for esx 25x and 3x. (haven't really experimented much though)
>
> open (INPUT, $proc_vmware_mem) || die "Could not open the file
> $proc_vmware_mem. Exiting";
>
> my @proc_mem_details=<INPUT>;
>
> close INPUT;
> my $lastline = $#proc_mem_details;
> $lastline--;
>
> #print "LAST_LINE=$lastline\n";
> # The data we're concerned with is located between line 16 and last
> line -1 my @vm_details=@proc_mem_details[16..$lastline];
>
> foreach my $vm_instance (@vm_details)
> {
> # We now need to break down the fields for each instance
> # Replace the space with a definable symbol
> $vm_instance=~s/\ +/-/g;
> $vm_instance=~s/\/-/:/g;
> $vm_instance=~s/\//:/g;
> $vm_instance=~s/:/-/g;
> my @vm_instance_details=split(/-/,$vm_instance);
>
> my $vm_id=$vm_instance_details[1];
> my $size=$vm_instance_details[5];
> my $sizetgt=$vm_instance_details[6];
> $sizetgt=~ s/\///g;
> my $memctl=$vm_instance_details[7];
> my $mctltgt=$vm_instance_details[8];
> $mctltgt=~ s/\///g;
> # We will get the actual name of the vmware instance
> referenced by vmid from
> my $vm_name_detail=`cat /proc/vmware/vm/$vm_id/names`;
> my @vm_name_details=split(/\ /,$vm_name_detail);
> my $vm_name=$vm_name_details[$#vm_name_details];
> $vm_name=~ s/\"//g;
> $vm_name=~ s/displayName\=//g;
> chomp $vm_name;
>
> my $percentage=($sizetgt/$size);
> $percentage=sprintf "%2d", 100 *$percentage;
>
> # Now check the stats
> if ($percentage > $paging_threshold){
> print "ERROR\t-\tThe VM $vm_name is exceeding the
> allocated paging threshold ($percentage\%/$paging_threshold\%)\n";
> $num_in_error++;
> }else{
> print "The VM $vm_name is within the allocated paging
> threshold ($percentage\%/$paging_threshold\%)\n";
>
> }
> }
>
> if ($num_in_error gt 0){
> exit(255);
> }else{
> exit(0);
> }
>
> EX3
> This takes a look at the disk q length to the luns(and some other info),
> sleeps for a defined interval, runs the check again and compares the values
>
> #!/usr/bin/perl -w
> use strict;
>
> my @vmhba_ar = < /proc/vmware/scsi/vmhba*/?:* >; my (@outer_vmfs_contents,
> @outer_vmhba_ar, @r1, @r2, @vmfs_subdirs); my @bigger = (\@r1, \@r2); my
> $counter=0; my $check_int=2; my $threshold=3; my $num_in_error;
>
> my $lastline_global = $#bigger;
>
> my $dir = "/vmfs/volumes";
> opendir(VMFS, $dir) || die "cant open $dir $!\n"; my @vmfs_contents =
> readdir VMFS; close VMFS; chdir $dir;
>
>
> foreach (@vmfs_contents) {
> if (-l $_ && ! m/^\./ ) {
> chomp;
> push @vmfs_subdirs, $_;
> my @smaller = `sudo /usr/sbin/vmkfstools -Ph $_`;
> push @outer_vmfs_contents, \@smaller; } }
>
> foreach (@bigger) {
> $counter++;
> foreach (@vmhba_ar) {
> my @get_name=split(/scsi/,$_);
> my $name=$get_name[1];
> $name =~ s/\//:/g;
> $name =~ s/^\://g;
>
> open(INPUT, $_) || die "cant open $_ $!\n";
> my @temp=<INPUT>;
> close INPUT;
> my $lastline = $#temp;
> my $line_of_interest = $temp[$lastline];
> chomp $line_of_interest;
> if ($counter le $lastline_global) {
> push @r1, $line_of_interest; }
> else {
> push @r2, $line_of_interest; }
>
> } if ($counter le $lastline_global) {
> sleep $check_int; }
> }
>
> # This wi
> grep {
> my @get_qd_r1=split(/\s+/,$r1[$_]);
> my $qd_r1=$get_qd_r1[3];
> my @get_qd_r2=split(/\s+/,$r2[$_]);
> my $qd_r2=$get_qd_r2[3];
> my $press = ($qd_r2 - $qd_r1);
> if ($press <= $threshold) {
> push @outer_vmhba_ar, $r2[$_]; }
> else { my $string = "WARNING - Q'D IO -> \t\t $r2[$_] \n" ;
> push @outer_vmhba_ar, $string;
> $num_in_error++ ; }
> } 0..$#r1;
>
> grep {
> print "\n", @{$outer_vmfs_contents[$_]}, $outer_vmhba_ar[$_],
> "\n\n"; } 0..$#outer_vmfs_contents;
>
> if ($num_in_error gt 0){
> exit(255);
> }else{
> exit(0);
> }
>
>
> I'll get round to cleaning these up and making them available at some
> stage. I've been very lazy though and just left them as is.
>
> Hope you get some ideas from these.
>
> Chris
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.xymon.com/pipermail/xymon/attachments/20070705/3716260e/attachment.html>
More information about the Xymon
mailing list