我是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
属性吗?还是取决于用例?我没有找到任何有关此文档的成功。
答案 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。