BadRequest调用New-AzScheduledQueryRule-从Cmdlet格式不正确的Action.aznsAction.actionGroup

时间:2019-06-17 21:12:06

标签: azure-application-insights azure-powershell azure-log-analytics

我正在关注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会让人们遇到麻烦吗?

2 个答案:

答案 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了。