diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
commit | 47e6e7c84f008a53061e661f31ae96629bc694ef (patch) | |
tree | 648a07f3b5b9d67ce19b0fd72e8caa1175c98f1a /src/pmdas/vmware | |
download | pcp-debian.tar.gz |
Debian 3.9.10debian/3.9.10debian
Diffstat (limited to 'src/pmdas/vmware')
-rw-r--r-- | src/pmdas/vmware/GNUmakefile | 54 | ||||
-rwxr-xr-x | src/pmdas/vmware/Install | 34 | ||||
-rwxr-xr-x | src/pmdas/vmware/Remove | 29 | ||||
-rw-r--r-- | src/pmdas/vmware/pmdavmware.pl | 456 |
4 files changed, 573 insertions, 0 deletions
diff --git a/src/pmdas/vmware/GNUmakefile b/src/pmdas/vmware/GNUmakefile new file mode 100644 index 0000000..d4cde6b --- /dev/null +++ b/src/pmdas/vmware/GNUmakefile @@ -0,0 +1,54 @@ +#!gmake +# +# Copyright (c) 2008 Aconex. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# + +TOPDIR = ../../.. +include $(TOPDIR)/src/include/builddefs + +IAM = vmware +DOMAIN = VMWARE +PMDADIR = $(PCP_PMDAS_DIR)/$(IAM) +LSRCFILES = Install Remove pmda$(IAM).pl + +ifneq ($(POD2MAN),) +MAN_SECTION = 1 +MAN_PAGES = pmda$(IAM).$(MAN_SECTION) +MAN_DEST = $(PCP_MAN_DIR)/man$(MAN_SECTION) +endif + +LDIRT = domain.h root pmns *.log $(MAN_PAGES) + +default: check_domain $(MAN_PAGES) + +pmda$(IAM).1: pmda$(IAM).pl + $(POD_MAKERULE) + +include $(BUILDRULES) + +install: default + $(INSTALL) -m 755 -d $(PMDADIR) + $(INSTALL) -m 755 Install Remove $(PMDADIR) + $(INSTALL) -m 644 pmda$(IAM).pl $(PMDADIR)/pmda$(IAM).pl + @$(INSTALL_MAN) + +default_pcp : default + +install_pcp : install + +check_domain: ../../pmns/stdpmid + $(DOMAIN_PERLRULE) diff --git a/src/pmdas/vmware/Install b/src/pmdas/vmware/Install new file mode 100755 index 0000000..e834b40 --- /dev/null +++ b/src/pmdas/vmware/Install @@ -0,0 +1,34 @@ +#!/bin/sh +# +# Copyright (c) 2008 Aconex. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# Install the VMware PMDA +# + +. $PCP_DIR/etc/pcp.env +. $PCP_SHARE_DIR/lib/pmdaproc.sh + +iam=vmware +perl_opt=true +daemon_opt=false +forced_restart=false + +perl -e "use VMware::VIRuntime" 2>/dev/null +if test $? -ne 0; then + echo "VMware Infrastructure Perl Toolkit is not installed" + exit 1 +fi + +pmdaSetup +pmdaInstall +exit 0 diff --git a/src/pmdas/vmware/Remove b/src/pmdas/vmware/Remove new file mode 100755 index 0000000..1291de4 --- /dev/null +++ b/src/pmdas/vmware/Remove @@ -0,0 +1,29 @@ +#! /bin/sh +# +# Copyright (c) 2008 Aconex. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# +# Remove the VMware PMDA +# + +. $PCP_DIR/etc/pcp.env +. $PCP_SHARE_DIR/lib/pmdaproc.sh + +iam=vmware + +pmdaSetup +pmdaRemove +exit 0 diff --git a/src/pmdas/vmware/pmdavmware.pl b/src/pmdas/vmware/pmdavmware.pl new file mode 100644 index 0000000..7e79924 --- /dev/null +++ b/src/pmdas/vmware/pmdavmware.pl @@ -0,0 +1,456 @@ +# +# Copyright (c) 2012 Red Hat. +# Copyright (c) 2008 Aconex. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# + +use strict; +use warnings; +use PCP::PMDA; +use VMware::VIRuntime; + +use vars qw( $host $server $username $password ); +use vars qw( $pmda $entity $view $interval $metric_info %metric_values ); + +# Configuration files for setting VMware host connection parameters +for my $file ( pmda_config('PCP_PMDAS_DIR') . '/vmware/vmware.conf', + './vmware.conf' ) { + eval `cat $file` unless ! -f $file; +} +die 'VMware host not setup, stopped' unless defined($host); +die 'VMware server not setup, stopped' unless defined($server); +die 'VMware username not setup, stopped' unless defined($username); +die 'VMware password not setup, stopped' unless defined($password); + +Opts::set_option('server' => $server); +Opts::set_option('username' => $username); +Opts::set_option('password' => $password); +Opts::parse(); + +sub vmware_connect +{ + $Util::script_version = '1.0'; + Util::connect(); + $entity = Vim::find_entity_view(view_type => 'HostSystem', + filter => {'name' => $host}); + return unless defined($entity); + + $view = Vim::get_view(mo_ref => Vim::get_service_content()->perfManager); + my $summary = $view->QueryPerfProviderSummary(entity => $entity); + $interval = $summary->refreshRate; # absolute, in seconds + $interval = 20 unless defined($interval); # the vmware default +} + +sub vmware_timer_callback +{ + return unless !defined($entity); + $pmda->log("Connecting to VMware services on $host ($server)"); + vmware_connect(); + return unless defined($entity); + $pmda->log("Successfully connected."); +} + +sub vmware_disconnect +{ + Util::disconnect(); +} + +sub vmware_metric_ids +{ + my @filtered_list; + my $counter_info = $view->perfCounter; + my $available_id = $view->QueryAvailablePerfMetric(entity => $entity); + + foreach (@$counter_info) { + my $key = $_->key; + $metric_info->{$key} = $_; + } + + foreach (@$available_id) { + my $id = $_->counterId; + if (defined $metric_info->{$id}) { + my $metric = PerfMetricId->new(counterId => $id, instance => ''); + push @filtered_list, $metric; + } + } + return \@filtered_list; +} + +sub vmware_fetch +{ + return unless defined($entity); + + my @metric_ids = vmware_metric_ids(); + my $query_spec = PerfQuerySpec->new(entity => $entity, + metricId => @metric_ids, + 'format' => 'normal', + intervalId => $interval, + maxSample => 1); + my $values; + eval { + $values = $view->QueryPerf(querySpec => $query_spec); + }; + if ($@) { + if (ref($@) eq 'SoapFault') { + if (ref($@->detail) eq 'InvalidArgument') { + $pmda->log('QueryPerf parameters are not correct'); + } else { + $pmda->log('QueryPerf failed - Soap protocol error'); + } + } else { + $pmda->log('QueryPerf failed - cause unknown - good luck!'); + } + } + elsif (!@$values) { + $pmda->log('VMware performance data unavailable'); + } + + foreach (@$values) { + my $value_array = $_->value; + foreach (@$value_array) { + my $counter_id = $_->id->counterId; + my $counter = $metric_info->{$counter_id}; + my $key = $counter->nameInfo->label; + $metric_values{$key} = $_; + # $pmda->log("Value found: $key maps to $counter_id\n"); + } + } +} + +sub vmware_fetch_callback +{ + my ($cluster, $item, $inst) = @_; + + if ($cluster == 0) { + if ($item == 0) { return ($host, 1); } + if ($item == 1) { return ($interval, 1); } + } + + return (PM_ERR_NOTCONN, 0) unless defined($entity); + + my $key = pmda_pmid_text($cluster, $item); + return (PM_ERR_PMID, 0) unless defined($key); + + # $pmda->log("vmware_fetch_callback $key $cluster:$item ($inst)\n"); + + my $pmvalue = $metric_values{$key}; + return (PM_ERR_AGAIN, 0) unless defined($pmvalue); + my $counters = ($pmvalue->value)[0]; + + if ($cluster == 0 && $item == 3) { + my $uptime = pmda_uptime($counters->[0]); + return ($uptime, 1); + } + return ($counters->[0], 1); +} + + +$pmda = PCP::PMDA->new('vmware', 90); + +$pmda->add_metric(pmda_pmid(0,0), PM_TYPE_STRING, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.sys.host', + 'Name of monitored VMware host', ''); +$pmda->add_metric(pmda_pmid(0,1), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,1,0,0,PM_TIME_SEC,0), + 'vmware.sys.interval', + 'Interval at which VMware internally refreshes values', ''); +$pmda->add_metric(pmda_pmid(0,2), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,1,0,0,PM_TIME_SEC,0), + 'vmware.sys.uptime', 'Uptime', + 'Total time elapsed since last startup'); +$pmda->add_metric(pmda_pmid(0,3), PM_TYPE_STRING, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.sys.uptime_s', 'Uptime', + 'Total time elapsed since last startup'); + +$pmda->add_metric(pmda_pmid(1,0), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,-1,0,PM_SPACE_KBYTE,PM_TIME_SEC,0), + 'vmware.net.usage', 'Network Usage (Average/Rate)', + 'Aggregated network performance statistics.'); + +$pmda->add_metric(pmda_pmid(2,0), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + pmda_units(1,-1,0,PM_SPACE_KBYTE,PM_TIME_SEC,0), + 'vmware.disk.usage', 'Disk Usage (Average/Rate)', + 'Aggregated storage performance statistics.'); + +$pmda->add_metric(pmda_pmid(3,0), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.mem.usage', 'Memory Usage (Average/Absolute)', + 'Memory usage as percentage of total configured or available memory'); +$pmda->add_metric(pmda_pmid(3,1), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_MBYTE,0,0), + 'vmware.mem.reserved_capacity', 'Memory Reserved Capacity', + 'Amount of memory reserved by the virtual machines'); +$pmda->add_metric(pmda_pmid(3,2), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_KBYTE,0,0), + 'vmware.mem.swap_in', 'Memory Swap In (Average/Absolute)', + 'Amount of memory that is swapped in'); +$pmda->add_metric(pmda_pmid(3,3), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_KBYTE,0,0), + 'vmware.mem.balloon', 'Memory Balloon (Average/Absolute)', + 'Amount of memory used by memory control'); +$pmda->add_metric(pmda_pmid(3,4), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_KBYTE,0,0), + 'vmware.mem.swap_out', 'Memory Swap Out (Average/Absolute)', + 'Amount of memory that is swapped out'); +$pmda->add_metric(pmda_pmid(3,5), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_KBYTE,0,0), + 'vmware.mem.unreserved', + 'Memory Unreserved (Average/Absolute)', + 'Amount of memory that is unreserved'); +$pmda->add_metric(pmda_pmid(3,6), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_KBYTE,0,0), + 'vmware.mem.heap', 'Memory Heap (Average/Absolute)', + 'Amount of memory allocated for heap'); +$pmda->add_metric(pmda_pmid(3,7), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_KBYTE,0,0), + 'vmware.mem.overhead', 'Memory Overhead (Average/Absolute)', + 'Amount of additional host memory allocated to the virtual machine'); +$pmda->add_metric(pmda_pmid(3,8), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_KBYTE,0,0), + 'vmware.mem.zeroed', 'Memory Zero (Average/Absolute)', + 'Amount of memory that is zeroed out'); +$pmda->add_metric(pmda_pmid(3,9), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_KBYTE,0,0), + 'vmware.mem.active', 'Memory Active (Average/Absolute)', + 'Amount of memory that is actively used'); +$pmda->add_metric(pmda_pmid(3,10), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_KBYTE,0,0), + 'vmware.mem.swap_used', 'Memory Swap Used (Average/Absolute)', + 'Amount of memory that is used by swap'); +$pmda->add_metric(pmda_pmid(3,11), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_KBYTE,0,0), + 'vmware.mem.shared', 'Memory Shared (Average/Absolute)', + 'Amount of memory that is shared'); +$pmda->add_metric(pmda_pmid(3,12), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_KBYTE,0,0), + 'vmware.mem.granted', 'Memory Granted (Average/Absolute)', + 'Amount of memory granted.'); +$pmda->add_metric(pmda_pmid(3,13), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_KBYTE,0,0), + 'vmware.mem.consumed', 'Memory Consumed (Average/Absolute)', + 'Amount of host memory consumed by the virtual machine for guest memory'); +$pmda->add_metric(pmda_pmid(3,14), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_KBYTE,0,0), + 'vmware.mem.heap_free', 'Memory Heap Free (Average/Absolute)', + 'Free space in memory heap'); +$pmda->add_metric(pmda_pmid(3,15), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_KBYTE,0,0), + 'vmware.mem.state', 'Memory State', + 'Memory State'); +$pmda->add_metric(pmda_pmid(3,16), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_KBYTE,0,0), + 'vmware.mem.shared_common', + 'Memory Shared Common (Average/Absolute)', + 'Amount of memory that is shared by common'); +$pmda->add_metric(pmda_pmid(3,17), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_KBYTE,0,0), + 'vmware.mem.vmkernel', 'Memory Used by vmkernel', + 'Amount of memory used by the vmkernel'); + +$pmda->add_metric(pmda_pmid(4,0), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,-1,1,0,PM_TIME_SEC,PM_COUNT_ONE), + 'vmware.cpu.usage', 'CPU Usage (Average/Rate)', + 'CPU usage as a percentage over the collected interval'); +$pmda->add_metric(pmda_pmid(4,1), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,-1,1,0,PM_TIME_SEC,PM_COUNT_ONE), + 'vmware.cpu.usage_mhz', 'CPU Usage in MHz (Average/Rate)', + 'CPU usage in MHz over the collected interval.'); +$pmda->add_metric(pmda_pmid(4,2), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,-1,1,0,PM_TIME_SEC,PM_COUNT_ONE), + 'vmware.cpu.reserved_capacity', 'CPU Reserved Capacity', + 'Total CPU capacity reserved by the virtual machines'); + +$pmda->add_metric(pmda_pmid(5,0), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.rescpu.throttled.one_min_average', + 'CPU Throttled (1 min. average)', + 'Amount of CPU resources over the limit that were refused, average over 1 minute'); +$pmda->add_metric(pmda_pmid(5,1), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.rescpu.throttled.five_min_average', + 'CPU Throttled (5 min. average)', + 'Amount of CPU resources over the limit that were refused, average over 5 minutes'); +$pmda->add_metric(pmda_pmid(5,2), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.rescpu.throttled.fifteen_min_average', + 'CPU Throttled (15 min. average)', + "Amount of CPU resources over the limit that were refused,\n" + . "average over 15 minutes\n"); +$pmda->add_metric(pmda_pmid(5,3), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.rescpu.running.one_min_peak', + 'CPU running peak over 1 minute', + ''); +$pmda->add_metric(pmda_pmid(5,4), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.rescpu.running.five_min_peak', + 'CPU running peak over 5 minutes', + ''); +$pmda->add_metric(pmda_pmid(5,5), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.rescpu.running.fifteen_min_peak', + 'CPU running peak over 15 minutes', + ''); +$pmda->add_metric(pmda_pmid(5,6), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_COUNTER, pmda_units(0,0,1,0,0,PM_COUNT_ONE), + 'vmware.rescpu.group_sample_count', + 'Group CPU Sample Count', 'Group CPU sample count'); +$pmda->add_metric(pmda_pmid(5,7), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.rescpu.active.one_min_peak', + 'CPU Active (1 min. peak)', + 'CPU active peak over 1 minute'); +$pmda->add_metric(pmda_pmid(5,8), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.rescpu.active.five_min_peak', + 'CPU Active (5 min. peak)', + 'CPU active peak over 5 minutes'); +$pmda->add_metric(pmda_pmid(5,9), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.rescpu.active.fifteen_min_peak', + 'CPU Active (15 min. peak)', + 'CPU active peak over 15 minutes'); +$pmda->add_metric(pmda_pmid(5,10), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.rescpu.running.one_min_average', + 'CPU Running (1 min. average)', + 'CPU running average over 1 minute'); +$pmda->add_metric(pmda_pmid(5,11), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.rescpu.running.five_min_average', + 'CPU Running (5 min. average)', + 'CPU running average over 5 minutes'); +$pmda->add_metric(pmda_pmid(5,12), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.rescpu.running.fifteen_min_average', + 'CPU Running (15 min. average)', + 'CPU running average over 15 minutes'); +$pmda->add_metric(pmda_pmid(5,13), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.rescpu.running.one_min_peak', + 'CPU Running (1 min. peak)', + 'CPU running peak over 1 minute'); +$pmda->add_metric(pmda_pmid(5,14), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.rescpu.running.five_min_peak', + 'CPU Running (5 min. peak)', + 'CPU running peak over 5 minutes'); +$pmda->add_metric(pmda_pmid(5,15), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.rescpu.running.fifteen_min_peak', + 'CPU Running (15 min. peak)', + 'CPU running peak over 15 minutes'); +$pmda->add_metric(pmda_pmid(5,16), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,1,0,0,PM_TIME_MSEC,0), + 'vmware.rescpu.group_sample_period', + 'Group CPU Sample Period', 'Group CPU sample period'); +$pmda->add_metric(pmda_pmid(5,17), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.rescpu.active.one_min_average', + 'CPU Active (1 min. average)', + 'CPU active average over 1 minute'); +$pmda->add_metric(pmda_pmid(5,18), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.rescpu.active.five_min_average', + 'CPU Active (5 min. average)', + 'CPU active average over 5 minutes'); +$pmda->add_metric(pmda_pmid(5,19), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0), + 'vmware.rescpu.active.fifteen_min_average', + 'CPU Active (15 min. average)', + 'CPU active average over 15 minutes'); + +$pmda->set_fetch(\&vmware_fetch); +$pmda->set_fetch_callback(\&vmware_fetch_callback); +$pmda->add_timer(5, \&vmware_timer_callback, 0); +$pmda->set_user('pcp'); +$pmda->run; +vmware_disconnect(); + +=pod + +=head1 NAME + +pmdavmware - VMware performance metrics domain agent (PMDA) + +=head1 DESCRIPTION + +B<pmdavmware> is a Performance Metrics Domain Agent (PMDA) which exports +metric values from a (possibly remote) VMware virtualisation host. + +This implementation uses the VMare Perl API (refer to the online +docs at http://www.vmware.com/support/developer/viperltoolkit). +VIPerl is a prerequisite for this PMDA, it needs to be installed +and configured before attempting to use this agent. It is highly +recommended that you test your VIPerl installation using the +demo programs that are shipped with VIPerl, before attempting to +use this PMDA. + +=head1 INSTALLATION + +In order to access performance data using the VIPerl API, it is +necessary to be able to login to the metrics source. Hence, a +valid VMware server name, user name and pass word are needed by +the PMDA. These can be passed in on the command line (via the +pmcd.conf file) or via a vmware.conf file in the PMDA directory. + + # cd $PCP_PMDAS_DIR/vmware + # [ edit vmware.conf ] + +This file should contain three lines, such as: + + $server = 'vm.server.net'; + $username = 'XXXX'; + $password = 'YYYY'; + +Once this is setup, you can access the names and values for the +vmware performance metrics by doing the following as root: + + # cd $PCP_PMDAS_DIR/vmware + # ./Install + +If you want to undo the installation, do the following as root: + + # cd $PCP_PMDAS_DIR/vmware + # ./Remove + +B<pmdavmware> is launched by pmcd(1) and should never be executed +directly. The Install and Remove scripts notify pmcd(1) when +the agent is installed or removed. + +=head1 FILES + +=over + +=item $PCP_PMDAS_DIR/vmware/vmware.conf + +configuration file for the B<pmdavmware> agent + +=item $PCP_PMDAS_DIR/vmware/Install + +installation script for the B<pmdavmware> agent + +=item $PCP_PMDAS_DIR/vmware/Remove + +undo installation script for the B<pmdavmware> agent + +=item $PCP_LOG_DIR/pmcd/vmware.log + +default log file for error messages from B<pmdavmware> + +=back + +=head1 SEE ALSO + +pmcd(1). |