我是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
属性吗?或者他们是否依赖于用例?我在寻找任何相关文档方面都没有取得多大成功。
我发现了一个可能的错误,如果它没有在Action中提及$ 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也有类似的问题。