我正在关注https://docs.microsoft.com/en-us/azure/azure-monitor/platform/alerts-log#managing-log-alerts-using-powershell上的文档,并且在调用New-AzScheduledQueryRule
时遇到了400。当我尝试通过将-Debug
传递给cmdlet进行故障排除时,我发现action.aznsAction.actionGroup
值肯定会是一个问题-它的值是[ "Microsoft.Azure.Commands.Insights.OutputClasses.PSActionGroupResource" ]
。
当然,从PUT API返回的错误集中在该元素上:
Body:
{
"error": {
"code": "LinkedInvalidPropertyId",
"message": "Property id 'Microsoft.Azure.Commands.Insights.OutputClasses.PSActionGroupResource' at path 'properties.action.aznsAction.actionGroup[0]' is invalid. Expect fully qualified resource Id that start with '/subscriptions/{subscriptionId}' or '/providers/{resourceProviderNamespace}/'."
}
}
最初,在运行脚本之前,我只有一个操作组和一个用于查询的kusto
文本文件;我通过cmdlet创建其他所有内容:
New-AzScheduledQueryRuleSource
,传递我的kusto
内容(效果很好)New-AzScheduleQueryRuleSchedule
(工作正常)New-AzScheduledQueryRuleAznsActionGroup
(为{}
输入我现有的ActionGroup名称-CustomWebhookPayload
-正常)New-AzScheduledQueryRuleLogMetricTrigger
(工作正常)New-AzScheduledQueryRuleTriggerCondition
-传递新的MetricTrigger(效果很好)New-AzScheduledQueryRuleAlertingAction
-从上方传递AznsActionGroup,再从上方传递TriggerCondition-效果很好。我将其传递给通话:
New-AzScheduledQueryRule -Location eastusn -Enabled $true -Action $alertingAction -Description $Description -Schedule $schedule -Source $source -name $Rulename -ResourceGroupName $resourceGroupName -Debug
传递了我先前创建的所有对象。在VS Code PS调试器中,一切看起来都很好。但是,action
输出中的-Debug
JSON看起来像这样,这对我来说似乎很奇怪:
"action": {
"odata.type": "Microsoft.WindowsAzure.Management.Monitoring.Alerts.Models.Microsoft.AppInsights.Nexus.DataContracts.Resources.ScheduledQueryRules.AlertingAction",
"severity": "1",
"aznsAction": {
"actionGroup": [
"Microsoft.Azure.Commands.Insights.OutputClasses.PSActionGroupResource"
],
"emailSubject": "my Subject",
"customWebhookPayload": "{}"
},
"throttlingInMin": 0,
"trigger": {
"thresholdOperator": "GreaterThan",
"threshold": 1.0,
"metricTrigger": {
"thresholdOperator": "GreaterThan",
"threshold": 1.0,
"metricTriggerType": "Consecutive",
"metricColumn": "Computer"
}
}
}
此cmdlet会让人们遇到麻烦吗?
答案 0 :(得分:0)
我不确定我是否想接受这个答案,但是确实可以使用它。如果您手动修改了$alertingAction = AzScheduledQueryRuleAlertingAction
的对象输出,即通过将属性$alertingAction.AznsAction.ActionGroup[0]
重新分配为$actionGroup Get-AzActionGroup -ResourceGroupName myRG -Name myActionGrp
的输出,则在此块中:
$alertingAction.AznsAction.ActionGroup[0] = $actionGroup.Id
然后然后调用New-AzScheduledQueryRule
,该cmdlet起作用,并且ScheduledQueryRule已正确创建。
这肯定像是New-AzScheduledQueryRule
中的错误。
答案 1 :(得分:0)
我只是有同样的事情。我认为这可能是混淆名称,文档以及New-AzScheduledQueryRuleAznsActionGroup cmdlet中缺乏验证的问题。
当我第一次看它的时候,我确实想知道它如何知道从哪个ResourceGroup那里获得ActionGroup。我不希望只传入ActionGroup的名称,而是传入resourceId,这是我认为的期望,但不清楚。
例如
$ actionGroupResource = Get-AzActionGroup-名称$ actionGroupName -ResourceGroupName $ myRg $ actionGroup = New-AzScheduledQueryRuleAznsActionGroup -ActionGroup $ actionGroupResource.Id
假设它只是您想要的一个ActionGroup。然后,您以后就不必再破解resourceId了。