VMware_Status Datasource update
We were running into an issue where disks were not consolidating properly following our backup completing, we are using Veeam with VMware. Since this wasn't included our of the box I have updated the default datasource to include a consolidationNeeded graph and datapoint.
consolidationNeeded - Whether any disk of the virtual machine requires consolidation. This can happen for example when a snapshot is deleted but its associated disk is not committed back to the base disk. (https://code.vmware.com/apis/358#/doc/vim.vm.RuntimeInfo.html) This can cause a problem with performance as it will require more IO and for database servers this can be damaging for high io solutions.
Since I am not able to attach XML files, I have copied the exported code below. If you want to do this manually, you will need to modify the active discovery script to the collector attributes script and then add the data point and graph.
In the active discovery script make the following changes:
In the props_hash def include a line for "'auto.runtime.consolidationNeeded' : vm?.runtime?.consolidationNeeded" make sure you include a comma to separate the values.
<span class="pln">def props_hash </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">'auto.config.alternate_guest_os_Name'</span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">config</span><span class="pun">?.</span><span class="pln">alternateGuestName</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.config.annotation'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">config</span><span class="pun">?.</span><span class="pln">annotation</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.config.firmware'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">config</span><span class="pun">?.</span><span class="pln">firmware</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.config.guest_os_full_Name'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">config</span><span class="pun">?.</span><span class="pln">guestFullName</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.config.guest_os_id'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">config</span><span class="pun">?.</span><span class="pln">guestId</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.config.managed_by'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">config</span><span class="pun">?.</span><span class="pln">managedBy</span><span class="pun">?.</span><span class="pln">type </span><span class="pun">?:</span><span class="pln"> </span><span class="str">"false"</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.config.modified'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">config</span><span class="pun">?.</span><span class="pln">modified</span><span class="pun">?.</span><span class="pln">getTime</span><span class="pun">(),</span><span class="pln">
</span><span class="str">'auto.config.template'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">config</span><span class="pun">?.</span><span class="pln">template</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.guest.guest_os_family'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">guest</span><span class="pun">?.</span><span class="pln">guestFamily</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.guest.guest_os_full_name'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">guest</span><span class="pun">?.</span><span class="pln">guestFullName</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.guest.guest_os_id'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">guest</span><span class="pun">?.</span><span class="pln">guestId</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.guest.hostname'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">guest</span><span class="pun">?.</span><span class="pln">hostName</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.guest.tools_version'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">guest</span><span class="pun">?.</span><span class="pln">toolsVersion</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.guest.tools_version_status'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">guest</span><span class="pun">?.</span><span class="pln">toolsVersionStatus2</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.hardware.memory_mb'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">config</span><span class="pun">?.</span><span class="pln">hardware</span><span class="pun">?.</span><span class="pln">memoryMB </span><span class="pun">?:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.hardware.num_cpu'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">config</span><span class="pun">?.</span><span class="pln">hardware</span><span class="pun">?.</span><span class="pln">numCPU </span><span class="pun">?:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.hardware.num_cores_per_socket'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">config</span><span class="pun">?.</span><span class="pln">hardware</span><span class="pun">?.</span><span class="pln">numCoresPerSocket </span><span class="pun">?:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.hardware.num_virtual_disks'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">summary</span><span class="pun">?.</span><span class="pln">config</span><span class="pun">?.</span><span class="pln">numVirtualDisks </span><span class="pun">?:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.hardware.num_ethernet_cards'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">summary</span><span class="pun">?.</span><span class="pln">config</span><span class="pun">?.</span><span class="pln">numEthernetCards </span><span class="pun">?:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.resource_pool'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">resourcePool</span><span class="pun">?.</span><span class="pln">name</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.resource_pool_full_path'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> resource_pool_array</span><span class="pun">.</span><span class="pln">reverse</span><span class="pun">().</span><span class="pln">join</span><span class="pun">(</span><span class="str">' -> '</span><span class="pun">),</span><span class="pln">
</span><span class="str">'auto.snapshot_count'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">layoutEx</span><span class="pun">?.</span><span class="pln">snapshot</span><span class="pun">?.</span><span class="pln">size</span><span class="pun">()</span><span class="pln"> </span><span class="pun">?:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.cluster'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> esxhost</span><span class="pun">?.</span><span class="pln">parent</span><span class="pun">?.</span><span class="pln">name</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.cluster_full_path'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> cluster_path_array</span><span class="pun">.</span><span class="pln">reverse</span><span class="pun">().</span><span class="pln">join</span><span class="pun">(</span><span class="str">' -> '</span><span class="pun">),</span><span class="pln">
</span><span class="str">'auto.runtime.host'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> esxhost</span><span class="pun">?.</span><span class="pln">name</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.runtime.connection_state'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">runtime</span><span class="pun">?.</span><span class="pln">connectionState</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.runtime.power_state'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">runtime</span><span class="pun">?.</span><span class="pln">powerState</span><span class="pun">,</span><span class="pln">
</span><span class="str">'auto.runtime.consolidationNeeded'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> vm</span><span class="pun">?.</span><span class="pln">runtime</span><span class="pun">?.</span><span class="pln">consolidationNeeded</span><span class="pun">]</span>Test the script against a vcenter server to make sure you are getting a true or false response from a server.
In the collector attributes script make the following changes
- Create a consolidation_states def, this will allow us to translate the value of the boolean to a 0 or 1
- In the Iteration of VMs section, add a line for the def consolidation_Needed value, this is where we are actually translating the value to 0 or 1 with a toString compare.
<span class="com">// iterate over vms</span><span class="pln">
vms</span><span class="pun">.</span><span class="pln">each
</span><span class="pun">{</span><span class="pln"> vm </span><span class="pun">-></span><span class="pln">
</span><span class="com">// Get AD info</span><span class="pln">
def wildvalue </span><span class="pun">=</span><span class="pln"> vm</span><span class="pun">.</span><span class="pln">MOR</span><span class="pun">.</span><span class="pln">val
def power_state </span><span class="pun">=</span><span class="pln"> power_states</span><span class="pun">[</span><span class="pln">vm</span><span class="pun">?.</span><span class="pln">runtime</span><span class="pun">?.</span><span class="pln">powerState</span><span class="pun">?.</span><span class="pln">val</span><span class="pun">]</span><span class="pln">
def consolidation_Needed </span><span class="pun">=</span><span class="pln"> consolidation_states</span><span class="pun">[</span><span class="pln">vm</span><span class="pun">?.</span><span class="pln">runtime</span><span class="pun">?.</span><span class="pln">consolidationNeeded</span><span class="pun">?.</span><span class="pln">toString</span><span class="pun">()]</span>- Finally, at the end, create a println to make the value go to standard out
Test the script against a vcenter server to make sure you are getting a 0 or 1 response from a server if you are getting a null something is misconfigured.
Once you get that working it is just a simple matter of adding a datapoint and graph
Datapoint
graph

Michael Rodrigues
·8 years agoHey @jrhoat, great addition, thanks for sharing, and keeping with the style!
I will put in a ticket to get this added to core offering.