ARM模板中AlertRule条件中的$ type

时间:2019-04-04 12:09:17

标签: azure templates azure-application-insights azure-resource-manager arm-template

我是ARM模板的新手,我正在研究一个模板,以将Web测试和警报规则部署到应用程序见解实例。应用洞察力是使用Terraform创建和维护的,但是Terraform中尚未正确支持警报规则和Web测试。我使用的是this Github issue中的示例,但是我们现在想将其分为Azure DevOps管道中的ARM步骤,因为我们需要获取Webhook警报的URL,而在Terraform脚本中我们很难做到这一点

我一直在整理来自本示例的内容,并使用this quickstart template作为参考点。但是,我在快速入门示例中注意到了一些示例中没有的内容,而且似乎也找不到任何信息。

在警报规则定义属性对象中,我们具有条件对象,该条件对象具有odata.type,而关联的dataSource具有一个odata.type,如下所示:

"properties": {
    "name": "[parameters('test').name]",
    "description": "[parameters('test').description]",
    "isEnabled": true,
    "condition": {
        "odata.type": "Microsoft.Azure.Management.Insights.Models.LocationThresholdRuleCondition",
        "dataSource": {
            "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleMetricDataSource",
            "resourceUri": "[resourceId('microsoft.insights/webtests/', parameters('test').name)]",
            "metricName": "GSMT_AvRaW"
         },
         "windowSize": "PT5M",
         "failedLocationCount": "[parameters('test').failedLocationCount]"
},

快速入门示例几乎相同,但是在odata.type条目之前是$type条目,如下所示:

"properties": {
    "name": "[parameters('tests')[copyIndex(1)].name]",
    "description": "[parameters('tests')[copyIndex(1)].description]",
    "isEnabled": true,
    "condition": {
      "$type": "Microsoft.WindowsAzure.Management.Monitoring.Alerts.Models.LocationThresholdRuleCondition, Microsoft.WindowsAzure.Management.Mon.Client",
      "odata.type": "Microsoft.Azure.Management.Insights.Models.LocationThresholdRuleCondition",
      "dataSource": {
        "$type": "Microsoft.WindowsAzure.Management.Monitoring.Alerts.Models.RuleMetricDataSource, Microsoft.WindowsAzure.Management.Mon.Client",
        "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleMetricDataSource",
        "resourceUri": "[resourceId('microsoft.insights/webtests/', parameters('tests')[copyIndex()].name)]",
        "metricName": "GSMT_AvRaW"
      },
      "windowSize": "PT15M",
      "failedLocationCount": "[parameters('tests')[copyIndex(1)].failedLocationCount]"
    },

我的模板似乎仍然可以工作,但是我应该包括$type属性吗?还是取决于用例?我没有找到任何有关此文档的成功。

1 个答案:

答案 0 :(得分:0)

我发现了一个可能的错误,如果它没有在操作中提及$ type并出现以下情况:

"condition": {
      "$type": "Microsoft.WindowsAzure.Management.Monitoring.Alerts.Models.ThresholdRuleCondition, Microsoft.WindowsAzure.Management.Mon.Client",
      "odata.type": "Microsoft.Azure.Management.Insights.Models.ThresholdRuleCondition",
      "dataSource": {
        "$type": "Microsoft.WindowsAzure.Management.Monitoring.Alerts.Models.RuleMetricDataSource, Microsoft.WindowsAzure.Management.Mon.Client",
        "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleMetricDataSource",
        "resourceUri": "[resourceId('microsoft.insights/components', variables('appInsName'))]",
        "metricName": "request.duration"
      },
      "threshold": "[parameters('responseTime')]",
      "windowSize": "PT5M"
    },
    "actions": [
      {
        "$type": "Microsoft.WindowsAzure.Management.Monitoring.Alerts.Models.RuleEmailAction, Microsoft.WindowsAzure.Management.Mon.Client",
        "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleEmailAction",
        "sendToServiceOwners": true,
        "customEmails": []
      }

运行此脚本时出错:

New-AzureRmResourceGroupDeployment -Verbose -ResourceGroupName rg.test.ARM -TemplateFile azuredeploy.json -TemplateParameterFile azuredeploy.parameters.json -DeploymentDebugLogLevel All

错误消息:错误-此警报CPU default-app-name-plan没有目标资源。

因此,理想情况下,应在条件和操作中指定$ type,以避免在从PowerShell / cli进行部署时出现此错误。

还有一个类似的问题here