Using PowervROps cmdlets (part 2) – Retrieving metrics from objects
Introduction
This is the second in a series of posts about PowervROps and the available functions. This post will focus on the ability to query metric data from objects in vROps. Two functions are available to query the stats held for resources:
- getLatestStatsofResources
- getStatsForResources
The former returns just the latest value for the given resource IDs and metrics, whilst the latter allows a large degree of customisation over the time frame of metrics and rollup of data e.g. averages or maximums within specified time frames
getLatestStatsofResources
This is the simpler of the two functions available, but as a consequence only returns the latest data point for each metric. The example below shows the value for the metric ‘mem|guest_demand’ for the VM ‘esxi-04a’
import-module c:\users\taguser\documents\github\powervrops\powervrops.psm1 $resthost = 'vrops-01a.cloudkindergarten.local' $token = acquiretoken -resthost $resthost -username admin -password VMware1! -authsource local $object = getresources -resthost $resthost -token $token -resourceKind 'VirtualMachine' -name 'esxi-04a' $stats = getLatestStatsofResources -resthost $resthost -token $token -objectid $object.resourceList.identifier -statkey 'mem|guest_demand' $stats.values.'stat-list'.stat
The output of this script is as follows:
getStatsForResources
The getStatsForResources function can return a vast amount of data and perform transformation of that data in a similar manner available within vROps views. The function requires a body element that contains the query parameters.
The example below queries all virtual machines for a single metric; mem|guest_demand. The data returned in this example returns all data at five minute intervals for the last hour
import-module c:\users\taguser\documents\github\powervrops\powervrops.psm1 $resthost = 'vrops-01a.cloudkindergarten.local' $token = acquiretoken -resthost $resthost -username admin -password VMware1! -authsource local $allvms = getresources -resthost $resthost -token $token -resourceKind 'VirtualMachine' $resourcelist = @() $metricstoquery = @('mem|guest_demand') foreach ($vm in $allvms) { $resourcelist += $vm.resourcelist.identifier } $body = @{ 'resourceId' = $resourcelist 'statKey' = $metricstoquery 'begin' = (getTimeSinceEpoch -date ((get-date).AddHours(-1))) 'end' = (getTimeSinceEpoch) 'rollUpType' = 'LATEST' 'intervalType' = 'MINUTES' 'intervalQuantifier' = 5 'dt' = $false 'latestMaxSmaples' = 1 } | convertto-json -depth 10 $statsofresources = getStatsForResources -resthost $resthost -token $token -body $body foreach ($statentry in $statsofresources.values) { write-host '' write-host ("Virtual Machine: " + ($allvms.resourceList | where { $_.identifier -eq $statentry.resourceid }).resourcekey.name) foreach ($stat in $statentry.'stat-list') { write-host ('Metric: ' + $stat.stat.statkey.key) for ($i=0;$i -lt $stat.stat.timestamps.count;$i++) { write-host (((Get-Date '1/1/1970').AddMilliseconds($stat.stat.timestamps[$i])).datetime + ' | ' + $stat.stat.data[$i]) } } }
The example above outputs the data to the powershell session, but in practice once the data has been returned then it can be used in any way.
The data held in vROps can be queried and returned in a number of different ways. The relevant elements to modify are as follows:
'resourceId' = $resourcelist
An array of vROps identifiers
'statKey' = $metricstoquery
An array of metrics to query
'begin' = (getTimeSinceEpoch -date ((get-date).AddDays(-7))) 'end' = (getTimeSinceEpoch)
The start and end times for the queried data. In the example above all data from the current time and for the last seven days will be queried.
'rollUpType' = 'LATEST'
How the data will be transformed. Available options are as follows:
SUM – The sum of all datapoints in each interval period
AVG – The average of the datapoints in each interval period
MIN – The minimum value of the datapoints in each interval period
MAX – The maximum value of the datapoints in each interval period
LATEST – The most recent sample of the datapoints in each interval period (see the example for interval type below to better describe the data that will be returned)
COUNT – The number of samples within each interval period
Take care when using a large time frame with a small interval type and a large number of metrics and resources as it can take a long time for the data to be returned
'intervalType' = 'MINUTES' 'intervalQuantifier' = 5
The time interval between data points. Note that if using any interval period beyond hours then the values returned will have time stamps of the last second of each hour. They will not be for hour points directly preceding the time at which the query is executed. An example of this is shown below:
In this example, the data point for 21:59:59 is the last data point in the hour between 21:00:00 and 21:59:59 which in this case is actually 9:09:13 – the query was run at approximately 21:14:00. The data point for 20:59:59 is the last value between 20:00:00 and 21:59:59 which was actually at 21:59:13
Using PowervROps cmdlets (part 1) – Introduction
Using PowervROps cmdlets (part 2) – Retrieving metrics from objects
Using PowervROps cmdlets (part 3) – Adding metrics and properties to objects
Using PowervROps cmdlets (part 4) – Working with objects
Using PowervROps cmdlets (part 5) – Working with relationships
Using PowervROps cmdlets (part 6) – Working with custom groups
Using PowervROps cmdlets (part 7) – Working with supermetrics
Using PowervROps cmdlets (part 8) – Working with reports
Using PowervROps cmdlets (part 9) – Working with alerts