Team, In case others find this of value -- I reworked the VMware plugin submitted by Edward Muller: http://mailman.verplant.org/pipermail/collectd/2010-November/004268.html
Thank you Edward for your original submission. Changes: * As Florian suggested I changed 'counter_t' to 'derive_t', and added 'type' / 'type instance' grouping of similar counters together. * I removed the VMware Guest SDK counters that don't work on ESX 4.X. (I'm not sure if they worked on Workstation, ESX 3.X, or other.) I understand that this will not get merged in to the mainline due to the associated VMware licensing. Lastly -- I'm a hack when it comes to c. It's been working find for me but use at your own risk. :-) Regards, Keith diff -Nur a/configure b/configure --- a/configure 1970-01-01 00:00:00.000000000 +0000 +++ b/configure 1970-01-01 00:00:00.000000000 +0000 @@ -1980,6 +1980,7 @@ --enable-users User statistics --enable-uuid UUID as hostname plugin --enable-vmem Virtual memory statistics + --enable-vmware VMware client statistics --enable-vserver Linux VServer statistics --enable-wireless Wireless statistics --enable-write_http HTTP output plugin @@ -45332,6 +45333,7 @@ plugin_users="no" plugin_uptime="no" plugin_vmem="no" +plugin_vmware="no" plugin_vserver="no" plugin_wireless="no" plugin_zfs_arc="no" @@ -45360,6 +45362,7 @@ plugin_thermal="yes" plugin_uptime="yes" plugin_vmem="yes" + plugin_vmware="yes" plugin_vserver="yes" plugin_wireless="yes" @@ -51612,6 +51615,69 @@ enable_plugin="no" force="no" + # Check whether --enable-vmware was given. +if test "${enable_vmware+set}" = set; then + enableval=$enable_vmware; + if test "x$enableval" = "xyes" + then + enable_plugin="yes" + else if test "x$enableval" = "xforce" + then + enable_plugin="yes" + force="yes" + else + enable_plugin="no (disabled on command line)" + fi; fi + +else + + if test "x$enable_all_plugins" = "xauto" + then + if test "x$plugin_vmware" = "xyes" + then + enable_plugin="yes" + else + enable_plugin="no" + fi + else + enable_plugin="$enable_all_plugins" + fi + +fi + + if test "x$enable_plugin" = "xyes" + then + if test "x$plugin_vmware" = "xyes" || test "x$force" = "xyes" + then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_PLUGIN_VMWARE 1 +_ACEOF + + if test "x$plugin_vmware" != "xyes" + then + dependency_warning="yes" + fi + else # User passed "yes" but dependency checking yielded "no" => Dependency problem. + dependency_error="yes" + enable_plugin="no (dependency error)" + fi + fi + +if test "x$enable_plugin" = "xyes"; then + BUILD_PLUGIN_VMWARE_TRUE= + BUILD_PLUGIN_VMWARE_FALSE='#' +else + BUILD_PLUGIN_VMWARE_TRUE='#' + BUILD_PLUGIN_VMWARE_FALSE= +fi + + enable_vmware="$enable_plugin" + + + + enable_plugin="no" + force="no" # Check whether --enable-wireless was given. if test "${enable_wireless+set}" = set; then enableval=$enable_wireless; @@ -55321,6 +55387,7 @@ users . . . . . . . . $enable_users uuid . . . . . . . . $enable_uuid vmem . . . . . . . . $enable_vmem + vmware . . . . . . . $enable_vmware vserver . . . . . . . $enable_vserver wireless . . . . . . $enable_wireless write_http . . . . . $enable_write_http diff -Nur a/configure.in b/configure.in --- a/configure.in 1970-01-01 00:00:00.000000000 +0000 +++ b/configure.in 1970-01-01 00:00:00.000000000 +0000 @@ -3997,6 +3997,7 @@ plugin_users="no" plugin_uptime="no" plugin_vmem="no" +plugin_vmware="no" plugin_vserver="no" plugin_wireless="no" plugin_zfs_arc="no" @@ -4025,6 +4026,7 @@ plugin_thermal="yes" plugin_uptime="yes" plugin_vmem="yes" + plugin_vmware="yes" plugin_vserver="yes" plugin_wireless="yes" @@ -4350,6 +4352,7 @@ AC_PLUGIN([users], [$plugin_users], [User statistics]) AC_PLUGIN([uuid], [yes], [UUID as hostname plugin]) AC_PLUGIN([vmem], [$plugin_vmem], [Virtual memory statistics]) +AC_PLUGIN([vmware], [$plugin_vmware], [VMware client statistics]) AC_PLUGIN([vserver], [$plugin_vserver], [Linux VServer statistics]) AC_PLUGIN([wireless], [$plugin_wireless], [Wireless statistics]) AC_PLUGIN([write_http], [$with_libcurl], [HTTP output plugin]) @@ -4666,6 +4669,7 @@ users . . . . . . . . $enable_users uuid . . . . . . . . $enable_uuid vmem . . . . . . . . $enable_vmem + vmware . . . . . . . $enable_vmware vserver . . . . . . . $enable_vserver wireless . . . . . . $enable_wireless write_http . . . . . $enable_write_http diff -Nur a/src/config.h.in b/src/config.h.in --- a/src/config.h.in 1970-01-01 00:00:00.000000000 +0000 +++ b/src/config.h.in 1970-01-01 00:00:00.000000000 +0000 @@ -774,6 +774,9 @@ /* Define to 1 if the vmem plugin is enabled. */ #undef HAVE_PLUGIN_VMEM +/* Define to 1 if the vmware plugin is enabled. */ +#undef HAVE_PLUGIN_VMWARE + /* Define to 1 if the vserver plugin is enabled. */ #undef HAVE_PLUGIN_VSERVER diff -Nur a/src/collectd.conf.in b/src/collectd.conf.in --- a/src/collectd.conf.in 1970-01-01 00:00:00.000000000 +0000 +++ b/src/collectd.conf.in 1970-01-01 00:00:00.000000000 +0000 @@ -134,6 +134,7 @@ #@BUILD_PLUGIN_USERS_TRUE@LoadPlugin users #@BUILD_PLUGIN_UUID_TRUE@LoadPlugin uuid #@BUILD_PLUGIN_VMEM_TRUE@LoadPlugin vmem +#@BUILD_PLUGIN_VMWARE_TRUE@LoadPlugin vmware #@BUILD_PLUGIN_VSERVER_TRUE@LoadPlugin vserver #@BUILD_PLUGIN_WIRELESS_TRUE@LoadPlugin wireless #@BUILD_PLUGIN_WRITE_HTTP_TRUE@LoadPlugin write_http diff -Nur a/src/Makefile.am b/src/Makefile.am --- a/src/Makefile.am 1970-01-01 00:00:00.000000000 +0000 +++ b/src/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -156,6 +156,17 @@ collectd_DEPENDENCIES += ascent.la endif +if BUILD_PLUGIN_VMWARE +pkglib_LTLIBRARIES += vmware.la +vmware_la_SOURCES = vmware.c +vmware_la_LDFLAGS = -module -avoid-version +vmware_la_CFLAGS = $(AM_CFLAGS) \ + $(BUILD_WITH_LIBCURL_CFLAGS) $(BUILD_WITH_LIBXML2_CFLAGS) +vmware_la_LIBADD = $(BUILD_WITH_LIBCURL_LIBS) $(BUILD_WITH_LIBXML2_LIBS) +collectd_LDADD += "-dlopen" vmware.la +collectd_DEPENDENCIES += vmware.la +endif + if BUILD_PLUGIN_BATTERY pkglib_LTLIBRARIES += battery.la battery_la_SOURCES = battery.c diff -Nur a/src/types.db b/src/types.db --- a/src/types.db 1970-01-01 00:00:00.000000000 +0000 +++ b/src/types.db 1970-01-01 00:00:00.000000000 +0000 @@ -150,6 +151,7 @@ threads value:GAUGE:0:U time_dispersion value:GAUGE:-1000000:1000000 timeleft value:GAUGE:0:3600 +time value:DERIVE:0:U time_offset value:GAUGE:-1000000:1000000 total_bytes value:DERIVE:0:U total_connections value:DERIVE:0:U @@ -168,6 +170,8 @@ vmpage_faults minflt:DERIVE:0:U, majflt:DERIVE:0:U vmpage_io in:DERIVE:0:U, out:DERIVE:0:U vmpage_number value:GAUGE:0:4294967295 +vmware_qos value:GAUGE:0:U +vmware_host_cpu value:GAUGE:0:U volatile_changes value:GAUGE:0:U voltage_threshold value:GAUGE:U:U, threshold:GAUGE:U:U voltage value:GAUGE:U:U diff -Nur a/src/vmware.c b/src/vmware.c --- a/src/vmware.c 2011-05-22 02:15:32.179086658 +0000 +++ b/src/vmware.c 2011-05-22 02:12:35.340762567 +0000 @@ -0,0 +1,395 @@ +#include <stdlib.h> +#include <stdarg.h> +#include <stdio.h> +#include <dlfcn.h> +#include "collectd.h" +#include "common.h" +#include "plugin.h" + +#include "vmGuestLib.h" + +/* functions to dynamically load from the GuestLib library */ +char const * (*GuestLib_GetErrorText)(VMGuestLibError); +VMGuestLibError (*GuestLib_OpenHandle)(VMGuestLibHandle*); +VMGuestLibError (*GuestLib_CloseHandle)(VMGuestLibHandle); +VMGuestLibError (*GuestLib_UpdateInfo)(VMGuestLibHandle handle); +VMGuestLibError (*GuestLib_GetSessionId)(VMGuestLibHandle handle, VMSessionId *id); + +/* time */ +VMGuestLibError (*GuestLib_GetElapsedMs)(VMGuestLibHandle handle, uint64 *elapsedMs); + +/* cpu */ +VMGuestLibError (*GuestLib_GetCpuUsedMs)(VMGuestLibHandle handle, uint64 *cpuUsedMs); +VMGuestLibError (*GuestLib_GetCpuStolenMs)(VMGuestLibHandle handle, uint64 *cpuStolenMs); + +/* cpu_qos */ +VMGuestLibError (*GuestLib_GetCpuReservationMHz)(VMGuestLibHandle handle, uint32 *cpuReservationMHz); +VMGuestLibError (*GuestLib_GetCpuLimitMHz)(VMGuestLibHandle handle, uint32 *cpuLimitMHz); +VMGuestLibError (*GuestLib_GetCpuShares)(VMGuestLibHandle handle, uint32 *cpuShares); + +/* cpu_host */ +VMGuestLibError (*GuestLib_GetHostProcessorSpeed)(VMGuestLibHandle handle, uint32 *mhz); + +/* memory */ +VMGuestLibError (*GuestLib_GetMemUsedMB)(VMGuestLibHandle handle, uint32 *memUsedMB); +VMGuestLibError (*GuestLib_GetMemMappedMB)(VMGuestLibHandle handle, uint32 *memMappedMB); +VMGuestLibError (*GuestLib_GetMemActiveMB)(VMGuestLibHandle handle, uint32 *memActiveMB); +VMGuestLibError (*GuestLib_GetMemTargetSizeMB)(VMGuestLibHandle handle, uint64 *memTargetSizeMB); +VMGuestLibError (*GuestLib_GetMemOverheadMB)(VMGuestLibHandle handle, uint32 *memOverheadMB); +VMGuestLibError (*GuestLib_GetMemSharedMB)(VMGuestLibHandle handle, uint32 *memSharedMB); +VMGuestLibError (*GuestLib_GetMemSharedSavedMB)(VMGuestLibHandle handle, uint32 *memSharedSavedMB); +VMGuestLibError (*GuestLib_GetMemBalloonedMB)(VMGuestLibHandle handle, uint32 *memBalloonedMB); +VMGuestLibError (*GuestLib_GetMemSwappedMB)(VMGuestLibHandle handle, uint32 *memSwappedMB); + +/* memory_qos */ +VMGuestLibError (*GuestLib_GetMemReservationMB)(VMGuestLibHandle handle, uint32 *memReservationMB); +VMGuestLibError (*GuestLib_GetMemLimitMB)(VMGuestLibHandle handle, uint32 *memLimitMB); +VMGuestLibError (*GuestLib_GetMemShares)(VMGuestLibHandle handle, uint32 *memShares); + +/* handle for use with shared library */ +void *dlHandle = NULL; +VMGuestLibHandle glHandle; +VMGuestLibError glError; + +/* macro to load a single GuestLib function from the shared library */ +#define LOAD_ONE_FUNC(funcname) \ + do { \ + funcname = dlsym(dlHandle, "VM" #funcname); \ + if ((dlErrStr = dlerror()) != NULL) { \ + printf("Failed to load \'%s\': \'%s\'\n", \ + #funcname, dlErrStr); \ + return FALSE; \ + } \ + } while (0) + +Bool +LoadFunctions(void) +{ + /* first try to load the shared library */ + char const *dlErrStr; + + dlHandle = dlopen("libvmGuestLib.so", RTLD_NOW); + if (!dlHandle) { + dlErrStr = dlerror(); + printf("dlopen failed: \'%s\'\n", dlErrStr); + return FALSE; + } + + /* Load all the individual library functions */ + LOAD_ONE_FUNC(GuestLib_GetErrorText); + LOAD_ONE_FUNC(GuestLib_OpenHandle); + LOAD_ONE_FUNC(GuestLib_CloseHandle); + LOAD_ONE_FUNC(GuestLib_UpdateInfo); + LOAD_ONE_FUNC(GuestLib_GetSessionId); + LOAD_ONE_FUNC(GuestLib_GetElapsedMs); + LOAD_ONE_FUNC(GuestLib_GetCpuStolenMs); + LOAD_ONE_FUNC(GuestLib_GetCpuUsedMs); + LOAD_ONE_FUNC(GuestLib_GetCpuReservationMHz); + LOAD_ONE_FUNC(GuestLib_GetCpuLimitMHz); + LOAD_ONE_FUNC(GuestLib_GetCpuShares); + LOAD_ONE_FUNC(GuestLib_GetHostProcessorSpeed); + LOAD_ONE_FUNC(GuestLib_GetMemReservationMB); + LOAD_ONE_FUNC(GuestLib_GetMemLimitMB); + LOAD_ONE_FUNC(GuestLib_GetMemShares); + LOAD_ONE_FUNC(GuestLib_GetMemMappedMB); + LOAD_ONE_FUNC(GuestLib_GetMemActiveMB); + LOAD_ONE_FUNC(GuestLib_GetMemOverheadMB); + LOAD_ONE_FUNC(GuestLib_GetMemBalloonedMB); + LOAD_ONE_FUNC(GuestLib_GetMemSwappedMB); + LOAD_ONE_FUNC(GuestLib_GetMemSharedMB); + LOAD_ONE_FUNC(GuestLib_GetMemSharedSavedMB); + LOAD_ONE_FUNC(GuestLib_GetMemUsedMB); + LOAD_ONE_FUNC(GuestLib_GetMemTargetSizeMB); + + return TRUE; +} + +static int vmware_init (void) +{ + if (!LoadFunctions()) { + ERROR ("vmware guest plugin: Unable to load GuistLib functions"); + return (-1); + } + + /* try to load the library */ + glError = GuestLib_OpenHandle(&glHandle); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + ERROR ("OpenHandle failed: %s", GuestLib_GetErrorText(glError)); + return (-1); + } + + return (0); +} + +static void submit_vmw_counter (const char *type, const char *type_inst, + derive_t value) +{ + value_t values[1]; + value_list_t vl = VALUE_LIST_INIT; + + values[0].derive = value; + + vl.values = values; + vl.values_len = 1; + + sstrncpy (vl.host, hostname_g, sizeof (vl.host)); + sstrncpy (vl.plugin, "vmware", sizeof (vl.plugin)); + sstrncpy (vl.type, type, sizeof (vl.type)); + sstrncpy (vl.type_instance, type_inst, sizeof (vl.type_instance)); + + plugin_dispatch_values (&vl); +} + +static void submit_vmw_gauge (const char *type, const char *type_inst, + gauge_t value) +{ + value_t values[1]; + value_list_t vl = VALUE_LIST_INIT; + + values[0].gauge = value; + + vl.values = values; + vl.values_len = 1; + + sstrncpy (vl.host, hostname_g, sizeof (vl.host)); + sstrncpy (vl.plugin, "vmware", sizeof (vl.plugin)); + sstrncpy (vl.type, type, sizeof (vl.type)); + sstrncpy (vl.type_instance, type_inst, sizeof (vl.type_instance)); + + plugin_dispatch_values (&vl); +} + +static int vmware_read (void) +{ + + derive_t value; + + /* time */ + uint64 elapsedMs = 0; + + /* cpu */ + uint64 cpuUsedMs = 0; + uint64 cpuStolenMs = 0; + + /* cpu_qos */ + uint32 cpuReservationMHz = 0; + uint32 cpuLimitMHz = 0; + uint32 cpuShares = 0; + + /* cpu_host */ + uint32 hostMHz = 0; + + /* memory */ + uint64 memTargetSizeMB = 0; + uint32 memUsedMB = 0; + uint32 memMappedMB = 0; + uint32 memActiveMB = 0; + uint32 memOverheadMB = 0; + uint32 memSharedMB = 0; + uint32 memSharedSavedMB = 0; + uint32 memBalloonedMB = 0; + uint32 memSwappedMB = 0; + + /* memory_qos */ + uint32 memReservationMB = 0; + uint32 memLimitMB = 0; + uint32 memShares = 0; + + VMSessionId sessionId = 0; + + /* attempt to retrieve info from the host */ + VMSessionId tmpSession; + + glError = GuestLib_UpdateInfo(glHandle); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + ERROR ("UpdateInfo failed: %s", GuestLib_GetErrorText(glError)); + return (-1); + } + + /* retrieve and check the session ID */ + glError = GuestLib_GetSessionId(glHandle, &tmpSession); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + ERROR ("Failed to get session ID: %s", GuestLib_GetErrorText(glError)); + return (-1); + } + + if (tmpSession == 0) { + ERROR ("Error: Got zero sessionId from GuestLib"); + return (-1); + } + + if (sessionId == 0) { + sessionId = tmpSession; + DEBUG ("Initial session ID is 0x%"FMT64"x", sessionId); + } else if (tmpSession != sessionId) { + sessionId = tmpSession; + DEBUG ("SESSION CHANGED: New session ID is 0x%"FMT64"x\n", sessionId); + } + + /* GetElapsedMs */ + glError = GuestLib_GetElapsedMs(glHandle, &elapsedMs); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + DEBUG ("Failed to get elapsed ms: %s\n", GuestLib_GetErrorText(glError)); + } + value = (derive_t) elapsedMs; + submit_vmw_counter ("time", "elapsed_ms", value); + + /* GetCpuUsedMs */ + glError = GuestLib_GetCpuUsedMs(glHandle, &cpuUsedMs); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + DEBUG ("Failed to get used ms: %s\n", GuestLib_GetErrorText(glError)); + } + value = (derive_t) cpuUsedMs; + submit_vmw_counter ("cpu", "used_ms", value); + + /* GetCpuStolenMs */ + glError = GuestLib_GetCpuStolenMs(glHandle, &cpuStolenMs); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + DEBUG ("Failed to get CPU stolen: %s\n", GuestLib_GetErrorText(glError)); + if (glError == VMGUESTLIB_ERROR_UNSUPPORTED_VERSION) { + cpuStolenMs = 0; + } + } + value = (derive_t) cpuStolenMs; + submit_vmw_counter ("cpu", "stolen_ms", value); + + /* GetCpuReservationMHz */ + glError = GuestLib_GetCpuReservationMHz(glHandle, &cpuReservationMHz); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + DEBUG ("Failed to get CPU reservation: %s\n", GuestLib_GetErrorText(glError)); + } + value = (gauge_t) cpuReservationMHz; + submit_vmw_gauge ("vmware_qos", "reservation_mhz", value); + + /* GetCpuLimitMHz */ + glError = GuestLib_GetCpuLimitMHz(glHandle, &cpuLimitMHz); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + DEBUG ("Failed to get CPU limit: %s\n", GuestLib_GetErrorText(glError)); + } + value = (gauge_t) cpuLimitMHz; + submit_vmw_gauge ("vmware_qos", "limit_mhz", value); + + /* GetCpuShares */ + glError = GuestLib_GetCpuShares(glHandle, &cpuShares); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + DEBUG ("Failed to get cpu shares: %s\n", GuestLib_GetErrorText(glError)); + } + value = (gauge_t) cpuShares; + submit_vmw_gauge ("vmware_qos", "shares", value); + + /* GetHostProcessorSpeed */ + glError = GuestLib_GetHostProcessorSpeed(glHandle, &hostMHz); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + DEBUG ("Failed to get host proc speed: %s\n", GuestLib_GetErrorText(glError)); + } + value = (gauge_t) hostMHz; + submit_vmw_gauge ("vmware_host_cpu", "clock_speed_mhz", value); + + /* GetMemTargetSizeMB */ + glError = GuestLib_GetMemTargetSizeMB(glHandle, &memTargetSizeMB); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + DEBUG ("Failed to get target mem size: %s\n", GuestLib_GetErrorText(glError)); + if (glError == VMGUESTLIB_ERROR_UNSUPPORTED_VERSION) { + memTargetSizeMB = 0; + } + } + value = (gauge_t) memTargetSizeMB; + submit_vmw_gauge ("memory", "target_mb", value); + + /* GetMemUsedMB */ + glError = GuestLib_GetMemUsedMB(glHandle, &memUsedMB); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + DEBUG ("Failed to get used mem: %s\n", GuestLib_GetErrorText(glError)); + } + value = (gauge_t) memUsedMB; + submit_vmw_gauge ("memory", "used_mb", value); + + /* GetMemMappedMB */ + glError = GuestLib_GetMemMappedMB(glHandle, &memMappedMB); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + DEBUG ("Failed to get mapped mem: %s\n", GuestLib_GetErrorText(glError)); + } + value = (gauge_t) memMappedMB; + submit_vmw_gauge ("memory", "mapped_mb", value); + + /* GetMemActiveMB */ + glError = GuestLib_GetMemActiveMB(glHandle, &memActiveMB); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + DEBUG ("Failed to get active mem: %s\n", GuestLib_GetErrorText(glError)); + } + value = (gauge_t) memActiveMB; + submit_vmw_gauge ("memory", "active_mb", value); + + /* GetMemOverheadMB */ + glError = GuestLib_GetMemOverheadMB(glHandle, &memOverheadMB); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + DEBUG ("Failed to get overhead mem: %s\n", GuestLib_GetErrorText(glError)); + } + value = (gauge_t) memOverheadMB; + submit_vmw_gauge ("memory", "overhead_mb", value); + + /* GetMemSharedMB */ + glError = GuestLib_GetMemSharedMB(glHandle, &memSharedMB); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + DEBUG ("Failed to get shared mem: %s\n", GuestLib_GetErrorText(glError)); + } + value = (gauge_t) memSharedMB; + submit_vmw_gauge ("memory", "shared_mb", value); + + /* GetMemSharedSavedMB */ + glError = GuestLib_GetMemSharedSavedMB(glHandle, &memSharedSavedMB); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + DEBUG ("Failed to get shared saved mem: %s\n", GuestLib_GetErrorText(glError)); + } + value = (gauge_t) memSharedSavedMB; + submit_vmw_gauge ("memory", "shared_saved_mb", value); + + /* GetMemBalloonedMB */ + glError = GuestLib_GetMemBalloonedMB(glHandle, &memBalloonedMB); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + DEBUG ("Failed to get ballooned mem: %s\n", GuestLib_GetErrorText(glError)); + } + value = (gauge_t) memBalloonedMB; + submit_vmw_gauge ("memory", "ballooned_mb", value); + + /* GetMemSwappedMB */ + glError = GuestLib_GetMemSwappedMB(glHandle, &memSwappedMB); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + DEBUG ("Failed to get swapped mem: %s\n", GuestLib_GetErrorText(glError)); + } + value = (gauge_t) memSwappedMB; + submit_vmw_gauge ("memory", "swapped_mb", value); + + /* GetMemReservationMB */ + glError = GuestLib_GetMemReservationMB(glHandle, &memReservationMB); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + DEBUG ("Failed to get mem reservation: %s\n", GuestLib_GetErrorText(glError)); + } + value = (gauge_t) memReservationMB; + submit_vmw_gauge ("vmware_qos", "reservation_mb", value); + + /* GetMemLimitMB */ + glError = GuestLib_GetMemLimitMB(glHandle, &memLimitMB); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + DEBUG ("Failed to get mem limit: %s\n", GuestLib_GetErrorText(glError)); + } + value = (gauge_t) memLimitMB; + submit_vmw_gauge ("vmware_qos", "limit_mb", value); + + /* GetMemShares */ + glError = GuestLib_GetMemShares(glHandle, &memShares); + if (glError != VMGUESTLIB_ERROR_SUCCESS) { + DEBUG ("Failed to get mem shares: %s\n", GuestLib_GetErrorText(glError)); + memShares = 0; + } + value = (gauge_t) memShares; + submit_vmw_gauge ("vmware_qos", "shares", value); + + return (0); +} + +void module_register (void) +{ + plugin_register_init ("vmware", vmware_init); + plugin_register_read ("vmware", vmware_read); +} _______________________________________________ collectd mailing list collectd@verplant.org http://mailman.verplant.org/listinfo/collectd