Reputation: 45
I am at the moment running the following Powershell scipt pull out metrics from Azure
` #login to azure and set context
$Resource = Get-AzResource -ResourceName <appservicename> -ResourceGroupName <resourcegroup> - ResourceType "Microsoft.Web/sites"
$ResourceID = $Resource.ResourceId
$MetricsDefinition = Get-AzMetricDefinition -ResourceId $ResourceID
$MetricsDefinitionHash = @{}
$MetricsDefinition | % {
$Name = $_.Name
$Unit = $_.Unit
$MetricsDefinitionHash.Add($Name,$Unit)
}
$TotalResult = @()
$Metrics = Get-AzMetric -ResourceId $ResourceID -StartTime (Get-date).AddHours(-24) -TimeGrain 00:01:00
$Metrics | % {
if($_.Data -ne $null)
{
$Calc, $metricName, $Result = $Null
$i=0;
$MetricName = $_.Name
$_.Data | % {
$calc += $_.Average
$i++
}
$Result = $Calc/$i
$MetricUnit = $MetricsDefinitionHash["$MetricName"]
$MetricResult = New-Object PSObject
$MetricResult | add-member Noteproperty MetricName $metricName
$MetricResult | add-member Noteproperty MetricValue $Result
$MetricResult | add-member Noteproperty MetricUnit $MetricUnit
$TotalResult += $MetricResult
}
}
`
I expected a result of
MetricName MetricValue MetricUnit
AverageResponseTime 0.7866443 Seconds
AverageMemoryWorkingSet 80747385.625 Bytes
MemoryWorkingSet
Http5xx
Http4xx
Http406
Http404
Http403
Http401
Http3xx 0
Http2xx 0
BytesSent 4699.123
BytesReceived 7.8
Requests 9.4444
CpuTime 0.1111
I have left some values empty , but you get the idea. The issue is im only getting CpuTime . Any ideas on why i would only be getting that ?
Upvotes: 0
Views: 687
Reputation: 10831
I have tried in my environments to get those metrics
$Resource = Get-AzResource -ResourceName “metricdemoapp” -ResourceGroupName “xxx” -ResourceType "Microsoft.Web/sites"
$ResourceID = $Resource.ResourceId
$Metrics = Get-AzMetric -ResourceId $ResourceID -StartTime (Get-date).AddHours(-24) -TimeGrain 00:01:00
The above returns variable $Metrics returns only metrics of CpuTime and its details like Id, name, type ,unit ,Data,timeseries as it is the first metric that appears
With Id : /subscriptions/xxxxxx23f/resourceGroups/xxxxx/providers/Microsoft.Web/sites/metricdemoapp/providers/Microsoft.Insights/metrics/CpuTime
After Checking the supported metrics in portal in my case , web app service
when tried with other metric name, got the units as required.
Where as below command for definition gives details of all metrics along with details one by one.
$MetricsDefinition = Get-AzMetricDefinition -ResourceId $ResourceID $MetricsDefinition
Powershell :
$Resource = Get-AzResource -ResourceName “metricdemoapp” -ResourceGroupName “xxx” -ResourceType "Microsoft.Web/sites"
$ResourceID = $Resource.ResourceId
$MetricsDefinition = Get-AzMetricDefinition -ResourceId $ResourceID
$MetricsDefinition
$i=0
foreach($metric in $MetricsDefinition)
{
$MetricName=$MetricsDefinition.Name.Value[$i]
$MetricDetails= Get-AzMetric -ResourceId $ResourceID -MetricName $MetricName
$MetricDataValue=$MetricDetails.Data
$Timestamp=$MetricDetails.Data.TimeStamp
$Average=$MetricDetails.Data.Average
$mCount=$MetricName.Value.Count
$count=$mCount-1
$MetricUnit=$metric.Unit
$MetricUnit
$MetricValue=$MetricName.Value
$MetricValue
$MetricResult = New-Object PSObject
$MetricResult | add-member Noteproperty MetricName $MetricName
$MetricResult | add-member Noteproperty MetricUnit $MetricUnit
$MetricResult | add-member Noteproperty MetricDetails $MetricDetails
$MetricResult | add-member Noteproperty MetricDataValue $MetricDataValue
$MetricResult | add-member Noteproperty TimeStamp $Timestamp
$MetricResult | add-member Noteproperty Average $Average
$MetricResult
$i++
}
Output:
Will be something like:
MetricName : CpuTime
MetricUnit : Seconds
MetricDetails : Microsoft.Azure.Commands.Insights.OutputClasses.PSMetricNoDetails
MetricDataValue : {Microsoft.Azure.Commands.Insights.OutputClasses.PSMetricValue, Microsoft.Azure.Commands.Insights.OutputClasses.PSMetricValue, Microsoft.Azure.Commands.Insights.OutputClasses.PSMetricValue,
Microsoft.Azure.Commands.Insights.OutputClasses.PSMetricValue…}
TimeStamp : {11/24/2022 6:23:00 AM, 11/24/2022 6:24:00 AM, 11/24/2022 6:25:00 AM, 11/24/2022 6:26:00 AM…}
Average : {$null, $null, $null, $null…}
And continues for every metric like below
Where AverageResponseTime is one of the metrics you can see
EDIT: 28/11/2022
Try adding aggregation type Average lie $MetricDetails= Get-AzMetric -ResourceId $ResourceID -MetricName $MetricName -AggregationType Average -TimeGrain 06:00:00
$MetricsDefinition = Get-AzMetricDefinition -ResourceId $ResourceID
$i=0
foreach($metric in $MetricsDefinition)
{
$MetricName=$MetricsDefinition.Name.Value[$i]
$MetricDetails= Get-AzMetric -ResourceId $ResourceID -MetricName $MetricName -AggregationType Average -TimeGrain 06:00:00
$MetricDataValue=$MetricDetails.Data
$Timestamp=$MetricDetails.Data.TimeStamp
$Average=$MetricDetails.Data.Average
$mCount=$MetricName.Value.Count
$count=$mCount-1
$MetricUnit=$metric.Unit
$MetricUnit
$MetricValue=$MetricName.Value
$MetricValue
$MetricResult = New-Object PSObject
$MetricResult | add-member Noteproperty MetricName $MetricName
$MetricResult | add-member Noteproperty MetricUnit $MetricUnit
$MetricResult | add-member Noteproperty MetricDetails $MetricDetails
$MetricResult | add-member Noteproperty MetricDataValue $MetricDataValue
$MetricResult | add-member Noteproperty TimeStamp $Timestamp
$MetricResult | add-member Noteproperty Average $Average
$MetricResult
$i++
}
Upvotes: 1