2016-06-01 8 views
6

У меня проблема с цыпленком и яйцом, развертывающая приложение Insights с моим веб-приложением Azure. В шаблоне ARM модуль Application Insights зависит от веб-сайта для идентификатора приложения (см. Зависимости в шаблонах ARM ниже). С другой стороны, для того, чтобы полностью измерить веб-приложение, мне нужен ключ инструментария из модуля Insight. Как обойти это?Зависимости шаблонов ресурсов Azure/Статистика приложений

Применение Insights View От ARM Шаблон портала

Application Insights module in the portal

для Web App

Web App ARM Template

ARM Шаблон для применения Insights

app insights arm template

+0

Видели [этот шаблон] (https://github.com/sjkp/azure-arm-multiregion- сайт-шаблон/BLOB/Master/лазурь-нарукавные Мультирегион-сайт-шаблон/Шаблоны/WebSite.json)? –

+1

Самым полезным примером заканчивал тем, что они: http://stackoverflow.com/a/27625607/188474 и refrenced шаблон GitHub: https://github.com/davidebbo/AzureWebsitesSamples/blob/3ab2e9ff14c66719271a62c1ba8213c5258c7a6e/ARMTemplates/ WebSiteManyFeatures.json # L96-L108 – Brett

ответ

11

Решение иметь строки подключения и настройки приложения, созданные как вложенные дочерние ресурсы веб-сайта. Используя стратегию дочерних ресурсов, вы можете сделать настройки приложения зависимыми как от веб-сайта , так и от. Это позволяет инициализация происходит в следующем порядке:

  1. Веб-сайт конфигурации
  2. Применение Insights
  3. Веб-сайт/AppSettings

Следующие два ответа были полезны. Первый иллюстрирует, как вытащить ключ инструментария. Второй иллюстрирует, как устанавливать параметры приложения и строки подключения в качестве дочерних ресурсов веб-сайта.

How to pull the instrumentation key

How to nest app settings as child resources

Вот мой окончательный шаблон:

{ 
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", 
    "contentVersion": "1.0.0.0", 
    "parameters": { 
    "webSiteName": { 
     "type": "string" 
    }, 
    "aadTenant": { 
     "type": "string" 
    }, 
    "aadAudience": { 
     "type": "string" 
    }, 
    "endpoints": { 
     "type": "string", 
     "defaultValue": "n/a" 
    }, 
    "apiEndpoint": { 
     "type": "string", 
     "defaultValue": "n/a" 
    }, 
    "sqlConnStrName": { 
     "type": "string" 
    }, 
    "sqlConnStrValue": { 
     "type": "string" 
    }, 
    "skuName": { 
     "type": "string", 
     "defaultValue": "F1", 
     "allowedValues": [ 
     "F1", 
     "D1", 
     "B1", 
     "B2", 
     "B3", 
     "S1", 
     "S2", 
     "S3", 
     "P1", 
     "P2", 
     "P3", 
     "P4" 
     ], 
     "metadata": { 
     "description": "Describes plan's pricing tier and instance size. Check details at https://azure.microsoft.com/en-us/pricing/details/app-service/" 
     } 
    }, 
    "skuCapacity": { 
     "type": "int", 
     "defaultValue": 1, 
     "minValue": 1, 
     "metadata": { 
     "description": "Describes plan's instance count" 
     } 
    } 
    }, 
    "variables": { 
    "hostingPlanName": "[concat(parameters('webSiteName'), '-hostingplan')]" 
    }, 
    "resources": [ 
    { 
     "apiVersion": "2015-08-01", 
     "name": "[variables('hostingPlanName')]", 
     "type": "Microsoft.Web/serverfarms", 
     "location": "[resourceGroup().location]", 
     "tags": { 
     "displayName": "HostingPlan" 
     }, 
     "sku": { 
     "name": "[parameters('skuName')]", 
     "capacity": "[parameters('skuCapacity')]" 
     }, 
     "properties": { 
     "name": "[variables('hostingPlanName')]" 
     } 
    }, 
    { 
     "apiVersion": "2015-08-01", 
     "name": "[parameters('webSiteName')]", 
     "type": "Microsoft.Web/sites", 
     "location": "[resourceGroup().location]", 
     "dependsOn": [ 
     "[variables('hostingPlanName')]" 
     ], 
     "tags": { 
     "[concat('hidden-related:', resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName')))]": "empty", 
     "displayName": "Website" 
     }, 
     "properties": { 
     "name": "[parameters('webSiteName')]", 
     "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]" 
     }, 
     "resources": [ 
     { 
      "apiVersion": "2015-08-01", 
      "name": "appsettings", 
      "type": "config", 
      "dependsOn": [ 
      "[parameters('webSiteName')]", 
      "[concat('AppInsights', parameters('webSiteName'))]" 
      ], 
      "properties": { 
      "ida:Tenant": "[parameters('aadTenant')]", 
      "ida:Audience": "[parameters('aadAudience')]", 
      "endpoints": "[parameters('endpoints')]", 
      "apiEndpoint": "[parameters('apiEndpoint')]", 
      "applicationInsightsInstrumentationKey": "[reference(resourceId('Microsoft.Insights/components', concat('AppInsights', parameters('webSiteName'))), '2014-04-01').InstrumentationKey]" 
      } 
     }, 
     { 
      "apiVersion": "2015-08-01", 
      "type": "config", 
      "name": "connectionstrings", 
      "dependsOn": [ 
      "[parameters('webSiteName')]" 
      ], 
      "properties": { 
      "[parameters('sqlConnStrName')]": { 
       "value": "[parameters('sqlConnStrValue')]", 
       "type": "SQLServer" 
      } 
      } 
     }, 
     { 
      "apiVersion": "2015-08-01", 
      "name": "logs", 
      "type": "config", 
      "dependsOn": [ 
      "[parameters('webSiteName')]" 
      ], 
      "properties": { 
      "applicationLogs": { 
       "fileSystem": { 
       "level": "Off" 
       }, 
       "azureTableStorage": { 
       "level": "Off", 
       "sasUrl": null 
       }, 
       "azureBlobStorage": { 
       "level": "Information", 
       "sasUrl": "TO DO: pass in a SAS Url", 
       "retentionInDays": null 
       } 
      }, 
      "httpLogs": { 
       "fileSystem": { 
       "retentionInMb": 40, 
       "enabled": true 
       } 
      }, 
      "failedRequestsTracing": { 
       "enabled": true 
      }, 
      "detailedErrorMessages": { 
       "enabled": true 
      } 
      } 
     } 
     ] 
    }, 
    { 
     "apiVersion": "2014-04-01", 
     "name": "[concat(variables('hostingPlanName'), '-', resourceGroup().name)]", 
     "type": "Microsoft.Insights/autoscalesettings", 
     "location": "[resourceGroup().location]", 
     "tags": { 
     "[concat('hidden-link:', resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName')))]": "Resource", 
     "displayName": "AutoScaleSettings" 
     }, 
     "dependsOn": [ 
     "[variables('hostingPlanName')]" 
     ], 
     "properties": { 
     "profiles": [ 
      { 
      "name": "Default", 
      "capacity": { 
       "minimum": 1, 
       "maximum": 2, 
       "default": 1 
      }, 
      "rules": [ 
       { 
       "metricTrigger": { 
        "metricName": "CpuPercentage", 
        "metricResourceUri": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]", 
        "timeGrain": "PT1M", 
        "statistic": "Average", 
        "timeWindow": "PT10M", 
        "timeAggregation": "Average", 
        "operator": "GreaterThan", 
        "threshold": 80.0 
       }, 
       "scaleAction": { 
        "direction": "Increase", 
        "type": "ChangeCount", 
        "value": 1, 
        "cooldown": "PT10M" 
       } 
       }, 
       { 
       "metricTrigger": { 
        "metricName": "CpuPercentage", 
        "metricResourceUri": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]", 
        "timeGrain": "PT1M", 
        "statistic": "Average", 
        "timeWindow": "PT1H", 
        "timeAggregation": "Average", 
        "operator": "LessThan", 
        "threshold": 60.0 
       }, 
       "scaleAction": { 
        "direction": "Decrease", 
        "type": "ChangeCount", 
        "value": 1, 
        "cooldown": "PT1H" 
       } 
       } 
      ] 
      } 
     ], 
     "enabled": false, 
     "name": "[concat(variables('hostingPlanName'), '-', resourceGroup().name)]", 
     "targetResourceUri": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]" 
     } 
    }, 
    { 
     "apiVersion": "2014-04-01", 
     "name": "[concat('ServerErrors ', parameters('webSiteName'))]", 
     "type": "Microsoft.Insights/alertrules", 
     "location": "[resourceGroup().location]", 
     "dependsOn": [ 
     "[parameters('webSiteName')]" 
     ], 
     "tags": { 
     "[concat('hidden-link:', resourceId('Microsoft.Web/sites', parameters('webSiteName')))]": "Resource", 
     "displayName": "ServerErrorsAlertRule" 
     }, 
     "properties": { 
     "name": "[concat('ServerErrors ', parameters('webSiteName'))]", 
     "description": "[concat(parameters('webSiteName'), ' has some server errors, status code 5xx.')]", 
     "isEnabled": true, 
     "condition": { 
      "odata.type": "Microsoft.Azure.Management.Insights.Models.ThresholdRuleCondition", 
      "dataSource": { 
      "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleMetricDataSource", 
      "resourceUri": "[resourceId('Microsoft.Web/sites', parameters('webSiteName'))]", 
      "metricName": "Http5xx" 
      }, 
      "operator": "GreaterThan", 
      "threshold": 5.0, 
      "windowSize": "PT5M" 
     }, 
     "action": { 
      "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleEmailAction", 
      "sendToServiceOwners": true, 
      "customEmails": ["[email protected]"] 
     } 
     } 
    }, 
    { 
     "apiVersion": "2014-04-01", 
     "name": "[concat('ForbiddenRequests ', parameters('webSiteName'))]", 
     "type": "Microsoft.Insights/alertrules", 
     "location": "[resourceGroup().location]", 
     "dependsOn": [ 
     "[parameters('webSiteName')]" 
     ], 
     "tags": { 
     "[concat('hidden-link:', resourceId('Microsoft.Web/sites', parameters('webSiteName')))]": "Resource", 
     "displayName": "ForbiddenRequestsAlertRule" 
     }, 
     "properties": { 
     "name": "[concat('ForbiddenRequests ', parameters('webSiteName'))]", 
     "description": "[concat(parameters('webSiteName'), ' has some requests that are forbidden, status code 403.')]", 
     "isEnabled": true, 
     "condition": { 
      "odata.type": "Microsoft.Azure.Management.Insights.Models.ThresholdRuleCondition", 
      "dataSource": { 
      "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleMetricDataSource", 
      "resourceUri": "[resourceId('Microsoft.Web/sites', parameters('webSiteName'))]", 
      "metricName": "Http403" 
      }, 
      "operator": "GreaterThan", 
      "threshold": 5, 
      "windowSize": "PT5M" 
     }, 
     "action": { 
      "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleEmailAction", 
      "sendToServiceOwners": true, 
      "customEmails": [ ] 
     } 
     } 
    }, 
    { 
     "apiVersion": "2014-04-01", 
     "name": "[concat('CPUHigh ', variables('hostingPlanName'))]", 
     "type": "Microsoft.Insights/alertrules", 
     "location": "[resourceGroup().location]", 
     "dependsOn": [ 
     "[variables('hostingPlanName')]" 
     ], 
     "tags": { 
     "[concat('hidden-link:', resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName')))]": "Resource", 
     "displayName": "CPUHighAlertRule" 
     }, 
     "properties": { 
     "name": "[concat('CPUHigh ', variables('hostingPlanName'))]", 
     "description": "[concat('The average CPU is high across all the instances of ', variables('hostingPlanName'))]", 
     "isEnabled": false, 
     "condition": { 
      "odata.type": "Microsoft.Azure.Management.Insights.Models.ThresholdRuleCondition", 
      "dataSource": { 
      "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleMetricDataSource", 
      "resourceUri": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]", 
      "metricName": "CpuPercentage" 
      }, 
      "operator": "GreaterThan", 
      "threshold": 90, 
      "windowSize": "PT15M" 
     }, 
     "action": { 
      "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleEmailAction", 
      "sendToServiceOwners": true, 
      "customEmails": [ ] 
     } 
     } 
    }, 
    { 
     "apiVersion": "2014-04-01", 
     "name": "[concat('LongHttpQueue ', variables('hostingPlanName'))]", 
     "type": "Microsoft.Insights/alertrules", 
     "location": "[resourceGroup().location]", 
     "dependsOn": [ 
     "[variables('hostingPlanName')]" 
     ], 
     "tags": { 
     "[concat('hidden-link:', resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName')))]": "Resource", 
     "displayName": "AutoScaleSettings" 
     }, 
     "properties": { 
     "name": "[concat('LongHttpQueue ', variables('hostingPlanName'))]", 
     "description": "[concat('The HTTP queue for the instances of ', variables('hostingPlanName'), ' has a large number of pending requests.')]", 
     "isEnabled": false, 
     "condition": { 
      "odata.type": "Microsoft.Azure.Management.Insights.Models.ThresholdRuleCondition", 
      "dataSource": { 
      "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleMetricDataSource", 
      "resourceUri": "[concat(resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', variables('hostingPlanName'))]", 
      "metricName": "HttpQueueLength" 
      }, 
      "operator": "GreaterThan", 
      "threshold": 100.0, 
      "windowSize": "PT5M" 
     }, 
     "action": { 
      "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleEmailAction", 
      "sendToServiceOwners": true, 
      "customEmails": [ ] 
     } 
     } 
    }, 
    { 
     "apiVersion": "2014-04-01", 
     "name": "[concat('AppInsights', parameters('webSiteName'))]", 
     "type": "Microsoft.Insights/components", 
     "location": "Central US", 
     "dependsOn": [ 
     "[parameters('webSiteName')]" 
     ], 
     "tags": { 
     "[concat('hidden-link:', resourceId('Microsoft.Web/sites', parameters('webSiteName')))]": "Resource", 
     "displayName": "AppInsightsComponent" 
     }, 
     "properties": { 
     "ApplicationId": "[parameters('webSiteName')]" 
     } 
    } 
    ], 
    "outputs": { 
    "siteUri": { 
     "type": "string", 
     "value": "[reference(concat('Microsoft.Web/sites/', parameters('webSiteName')), '2015-08-01').hostnames[0]]" 
    } 
    } 

} 
+0

Чтобы сделать эту работу для цикла на веб-сайтах, мне пришлось удалить зависимость 'dependOn'' Microsoft.Insights/component на веб-сайтах. – rcabr

+0

(В противном случае вы получите ошибку CircularDependency). – rcabr