Я подозреваю, что невозможно выполнить то, что я ищу, но это стоит попробовать!
У меня есть конвейер для подготовки правил оповещения запросов журнала Azure.Отдельные правила оповещения определяются как файлы параметров ARM, и я использую общий файл шаблона ARM для их развертывания.
Вот урезанная версия файла моего шаблона с пропущенными большинством параметров.
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"logQuery": {
"type": "string",
"minLength": 1,
"metadata": {
"description": "Query to execute against the AI resource"
}
}
},
"variables": {
"appInsightsResourceId": "[concat(resourceGroup().id,'/providers/','microsoft.insights/components/', parameters('appInsightsResourceName'))]",
"actionGroupId": "[concat(resourceGroup().id,'/providers/','microsoft.insights/actionGroups/', parameters('actionGroupName'))]",
"linkToAiResource" : "[concat('hidden-link:', variables('appInsightsResourceId'))]"
},
"resources":[{
"name":"[parameters('alertName')]",
"type":"Microsoft.Insights/scheduledQueryRules",
"location": "northeurope",
"apiVersion": "2018-04-16",
"tags": {
"[variables('linkToAiResource')]": "Resource"
},
"properties":{
"description": "[parameters('alertDescription')]",
"enabled": "[parameters('isEnabled')]",
"source": {
"query": "[parameters('logQuery')]",
"dataSourceId": "[variables('appInsightsResourceId')]",
"queryType":"[parameters('logQueryType')]"
},
"schedule":{
"frequencyInMinutes": "[parameters('alertSchedule').Frequency]",
"timeWindowInMinutes": "[parameters('alertSchedule').Time]"
},
"action":{
"odata.type": "Microsoft.WindowsAzure.Management.Monitoring.Alerts.Models.Microsoft.AppInsights.Nexus.DataContracts.Resources.ScheduledQueryRules.AlertingAction",
"severity": "[parameters('alertSeverity')]",
"aznsAction":{
"actionGroup":"[array(variables('actionGroupId'))]"
},
"trigger":{
"thresholdOperator":"[parameters('alertTrigger').Operator]",
"threshold":"[parameters('alertTrigger').Threshold]"
}
}
}
}
]
}
Вы можете видеть, как я предоставляю запрос App Insights в качестве параметра, поэтому мои параметрыФайл может выглядеть примерно так:
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"logQuery": {
"value": "requests | where resultCode >= 500"
}
}
}
Однако эти запросы могут быть очень длинными и трудными для понимания при просмотре в виде неразрывной строки JSON.Поэтому я хочу параметризовать этот параметр (если вы знаете, что я имею в виду), чтобы ключевые переменные определялись и поставлялись отдельно.Я думал об изменении параметров на что-то вроде этого, ввод нового параметра, содержащего массив замен заполнителей для параметризованного запроса ...
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"logQueryVariables": [
{ "{minCode}": "500" }
],
"logQuery": {
"value": "requests | where resultCode >= {minCode}"
}
}
}
... и затем поиск способа перебора переменныхмассив и заменить заполнители в параметре logQuery
, я подумал, может быть, я мог бы использовать функцию ARM или что-то.Но я боюсь признать, что застрял с этой частью.Можно ли использовать синтаксис copy
, чтобы сделать что-то подобное?