Quantcast
Channel: VMware Communities: Message List
Viewing all articles
Browse latest Browse all 49146

Re: Monitoring ESXI Performance Metrics over API

$
0
0

ok, so this script helped me a lot to understand the basics for make queries to the vsphere api through pyvmomi, have fun with it

 

import pyVmomi

import argparse

import atexit

import itertools

from pyVim import connect

from pyVmomi import vim, vmodl

from pyVim.connect import SmartConnect, Disconnect

import humanize

 

MBFACTOR = float(1 << 20)

 

printVM = True

printDatastore = True

printHost = True

 

 

def GetArgs():

 

    parser = argparse.ArgumentParser(

        description='Process args for retrieving all the Virtual Machines')

    parser.add_argument('-s', '--host', required=True, action='store',

                        help='Remote host to connect to')

    parser.add_argument('-o', '--port', type=int, default=443, action='store',

                        help='Port to connect on')

    parser.add_argument('-u', '--user', required=True, action='store',

                        help='User name to use when connecting to host')

    parser.add_argument('-p', '--password', required=False, action='store',

                        help='Password to use when connecting to host')

    args = parser.parse_args()

    return args

def printHostInformation(host):

    try:

        summary = host.summary

        stats = summary.quickStats

        hardware = host.hardware

        cpuCapacityMhz = (host.hardware.cpuInfo.hz * host.hardware.cpuInfo.numCpuCores) / 1000 / 1000

        cpuUsage = stats.overallCpuUsage

        memoryCapacity = hardware.memorySize

        memoryCapacityInMB = hardware.memorySize/MBFACTOR

        memoryUsage = stats.overallMemoryUsage

        freeMemoryPercentage = 100 - (

            (float(memoryUsage) / memoryCapacityInMB) * 100

        )

        print "--------------------------------------------------"

        print "Host name: ", host.name

        print "Host CPU capacity: ", cpuCapacityMhz, " Mhz"

        print "Host CPU usage: ", cpuUsage

        print "Host memory capacity: ", humanize.naturalsize(memoryCapacity,

                                                             binary=True)

        print "Host memory usage: ", memoryUsage / 1024, "GiB"

        print "Free memory percentage: " + str(freeMemoryPercentage) + "%"

        print "--------------------------------------------------"

    except Exception as error:

        print "Unable to access information for host: ", host.name

        print error

        pass

 

 

def printComputeResourceInformation(computeResource):

    try:

        hostList = computeResource.host

        for host in hostList:

            printHostInformation(host)

    except Exception as error:

        print "Unable to access information for compute resource: ",

        computeResource.name

        print error

        pass

 

def printDatastoreInformation(datastore):

    try:

        summary = datastore.summary

        capacity = summary.capacity

        freeSpace = summary.freeSpace

        uncommittedSpace = summary.uncommitted

        freeSpacePercentage = (float(freeSpace) / capacity) * 100

        print "##################################################"

        print "Datastore name: ", summary.name

        print "Capacity: ", humanize.naturalsize(capacity, binary=True)

        if uncommittedSpace is not None:

            provisionedSpace = (capacity - freeSpace) + uncommittedSpace

            print "Provisioned space: ", humanize.naturalsize(provisionedSpace,

                                                              binary=True)

        print "Free space: ", humanize.naturalsize(freeSpace, binary=True)

        print "Free space percentage: " + str(freeSpacePercentage) + "%"

        print "##################################################"

    except Exception as error:

        print "Unable to access summary for datastore: ", datastore.name

        print error

        pass

 

 

def main():

    args = GetArgs()

    try:

        si = connect.ConnectNoSSL(args.host, 443, args.user, args.password)

        atexit.register(Disconnect, si)

        content = si.RetrieveContent()

 

        for datacenter in content.rootFolder.childEntity:

            print "##################################################"

            print "##################################################"

            print "### datacenter : " + datacenter.name

            print "##################################################"

 

            if printDatastore:

                datastores = datacenter.datastore

                for ds in datastores:

                    printDatastoreInformation(ds)

 

            if printHost:

                if hasattr(datacenter.vmFolder, 'childEntity'):

                    hostFolder = datacenter.hostFolder

                    computeResourceList = hostFolder.childEntity

                    for computeResource in computeResourceList:

                        printComputeResourceInformation(computeResource)

    except vmodl.MethodFault as error:

        print "Caught vmodl fault : " + error.msg

        return -1

    return 0

 

if __name__ == "__main__":

    main()

 

I cut some lines that doesn't matter to me. I am working at an check plugin for esxi servers with an output to icinga2


Viewing all articles
Browse latest Browse all 49146

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>