Web 测试中未启用 Azure ARM 模板中的警报规则

Alert rule in Azure ARM template not enabled in web test

我正在使用 ARM 模板以编程方式创建 Application Insights Web 测试和警报规则。 ARM模板基于this article

web 测试和警报规则都已创建,但禁用了web 测试的Alerts 属性。警报规则列在 Alert rules blade,但不在 Webtests 部分,而是在 其他部分,见图:

为了在启用警报的情况下进行 Web 测试,我缺少什么?

ARM 模板(WebTest 属性 的值被 SO 删除):

{
  "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "webTestName": {
      "type": "string"
    },
    "appName": { "type": "string" }
  },
  "variables": {
    "url": "http://www.google.com",
    "testName": "[concat(parameters('webTestName'), '-', toLower(parameters('appName')))]",
    "alertRuleName": "[concat(parameters('webTestName'), '-', toLower(parameters('appName')), '-', subscription().subscriptionId)]"
  },
  "resources": [
    {
      "name": "[parameters('appName')]",
      "type": "Microsoft.Insights/components",
      "apiVersion": "2014-04-01",
      "kind": "web",
      "location": "Central US",
      "properties": {
        "Application_Type": "web",
        "Flow_Type": "Redfield",
        "Request_Source": "Unknown",
        "Name": "[parameters('appName')]",
        "PackageId": null,
        "ApplicationId": "[parameters('appName')]"
      },
      "tags": {
        "applicationType": "web"
      }
    },
    {
      "name": "[variables('testName')]",
      "apiVersion": "2014-04-01",
      "type": "microsoft.insights/webtests",
      "location": "Central US",
      "dependsOn": [
        "[resourceId('Microsoft.Insights/components', parameters('appName'))]"
      ],
      "tags": {
        "[concat('hidden-link:', resourceId('Microsoft.Insights/components', parameters('appName')))]": "Resource"
      },
      "properties": {
        "Name": "[parameters('webTestName')]",
        "Description": "description",
        "Enabled": true,
        "Frequency": 300,
        "Timeout": 120,
        "Kind": "ping",
        "RetryEnabled": true,
        "Locations": [
          {
            "Id": "us-il-ch1-azr"
          },
          {
            "Id": "emea-se-sto-edge"
          },
          {
            "Id": "emea-nl-ams-azr"
          }
        ],
        "Configuration": {
          "WebTest": "[concat('                                        ')]"
        },
        "SyntheticMonitorId": "[variables('testName')]"
      }
    },
    {
      "name": "[variables('alertRuleName')]",
      "apiVersion": "2014-04-01",
      "type": "Microsoft.Insights/alertrules",
      "location": "East US",
      "dependsOn": [
        "[resourceId('Microsoft.Insights/webtests', variables('testName'))]"
      ],
      "tags": {
        "[concat('hidden-link:', resourceId('microsoft.insights/components', parameters('appName')))]": "Resource",
        "[concat('hidden-link:', resourceId('microsoft.insights/webtests', variables('testName')))]": "Resource"
      },
      "properties": {
        "name": "[variables('alertRuleName')]",
        "description": "Alert for availability test",
        "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', variables('testName'))]",
            "metricName": "GSMT_AvRaW"
          },
          "windowSize": "PT5M",
          "failedLocationCount": 2
        },
        "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": []
          }
        ]
      }
    }
  ]
}

原来 resourceUri 的值是区分大小写的。解决方案:

"variables": {
    ...
    "testName": "[toLower(concat(parameters('webTestName'), '-', toLower(parameters('appName'))))]",
    "alertRuleName": "[toLower(concat(parameters('webTestName'), '-', toLower(parameters('appName')), '-', subscription().subscriptionId))]"
},