2

I am going nuts here. How in the world can I create a new alert rule in Azure using PowerShell?

With Azure CLI it's as easy as this

# Retrieve id for scope parameter
az vm show -n vm1 -o tsv --query id 

# Create action group
az monitor action-group create -n action-group1 -g rg-training --action email admin [email protected]

# Create alert
az monitor metrics alert create -n alert2 -g rg-training --scopes "/subscriptions/<guid>/resourceGroups/rg-training/providers/Microsoft.Compute/virtualMachines/vm1" --condition "avg Percentage CPU > 90" --window-size 5m --evaluation-frequency 1m --action action-group1 --description "High CPU"

This is what my PowerShell attempts look like

Import-Module Az.Monitor

# Create a new condition
$condition = New-AzMetricAlertRuleV2Criteria -MetricName "Percentage CPU" -MetricNameSpace "Microsoft.Compute/virtualMachines" -TimeAggregation Average -Operator GreaterThan -Threshold 5

# Create new action group and receiver
$receiver = New-AzActionGroupReceiver -Name "Admin" -EmailReceiver -EmailAddress "[email protected]"
Set-AzActionGroup -Name "my-action-group" -ShortName "ActionGroup1" -ResourceGroupName "rg-training" -Receiver $receiver

# Retrieve resource id from vm1
$resourceID = get-azresource -name vm1 | Select-Object resourceid

# Finally add the alert rule that will trigger when for more then 5 min CPU percentage is more then 10%
Add-AzMetricAlertRuleV2 -Name "metricRule2" -ResourceGroupName "rg-training" -WindowSize 00:05:00 -Frequency 00:01:00 -TargetResourceId $resourceID -Condition $condition -ActionGroupId "my-action-group" -Severity 4

Which results in

> Add-AzMetricAlertRuleV2 : Exception type: ErrorResponseException,
> Message: Null/Empty, Code: Null, Status code:BadRequest, Reason
> phrase: Bad Request At C:\Temp\03 Create and test alerts.ps1:17 char:1
> + Add-AzMetricAlertRuleV2 -Name "metricRule2" -ResourceGroupName "rg-tr ...
> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> + CategoryInfo          : CloseError: (:) [Add-AzMetricAlertRuleV2], PSInvalidOperationException
> + FullyQualifiedErrorId : Microsoft.Azure.Commands.Insights.Alerts.AddAzureRmMetricAlertRuleV2Command

What am I doing wrong here?

3
  • Which version of azure cli are you using? Commented May 9, 2020 at 19:06
  • Thx for replying. Don't know why this would be relevant, but here you go 2.5.1 Commented May 9, 2020 at 19:09
  • You are right, I meant az powershell version - Get-InstalledModule -name az according to this thread: github.com/Azure/azure-powershell/issues/… This bug have fixed for version 3.X Commented May 9, 2020 at 19:16

1 Answer 1

4

I have figured it out in the meantime... the culprit was the way I retrieved $targetResourceId. The following worked for me...

# TypeName: Microsoft.Azure.Commands.Insights.OutputClasses.PSActionGroupResource
$actionGroup = Get-AzActionGroup -Name "my-action-group" -ResourceGroupName "rg-training" 

# TypeName: Microsoft.Azure.Management.Monitor.Management.Models.ActivityLogAlertActionGroup
$actionGroupId = New-AzActionGroup -ActionGroupId $actionGroup.Id

# TypeName: System.TimeSpan
$windowSize = New-TimeSpan -Minutes 1

# TypeName: System.TimeSpan
$frequency = New-TimeSpan -Minutes 1 

# TypeName: Microsoft.Azure.Commands.Insights.OutputClasses.PSMetricCriteria
$condition = New-AzMetricAlertRuleV2Criteria -MetricName "Percentage CPU" -TimeAggregation Average -Operator GreaterThan -Threshold 0.1

# TypeName: System.String
$targetResourceId = (Get-AzResource -Name VM1).ResourceId

# TypeName: Microsoft.Azure.Commands.Profile.Models.Core.PSAzureContext
$context = Get-AzContext

Add-AzMetricAlertRuleV2 -Name "metricRule" -ResourceGroupName "rg-training" -WindowSize $windowSize -Frequency $frequency -TargetResourceId $targetResourceId -Condition $condition -ActionGroup $actionGroupId -Severity 3

You can read more about it here

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.