2016-06-01 1 views
6

J'ai rencontré un problème de poule et d'oeuf qui a déployé Application Insights avec mon application Web dans Azure. Dans le modèle ARM, le module Application Insights dépend du site Web de l'ID de l'application (voir les dépendances dans les modèles ARM ci-dessous). D'un autre côté, pour instrumenter complètement l'application web, j'ai besoin de la clé d'instrumentation du module Application Insights. Comment peut-on contourner cela?Dépendances d'un modèle de ressources Azure/Insights d'application

Insights application Vue depuis le Portail

Application Insights module in the portal

modèle ARM pour le Web App

Web App ARM Template

ARM Modèle pour l'application Insights

app insights arm template

+0

Avez-vous vu [ce modèle] (https://github.com/sjkp/azure-arm-multiregion- site-template/blob/maître/azure-arm-multiregion-site-template/Templates/WebSite.json)? –

+1

L'exemple le plus utile a fini par être ceux-ci: http://stackoverflow.com/a/27625607/188474 et le modèle de github refrenced: https://github.com/davidebbo/AzureWebsitesSamples/blob/3ab2e9ff14c66719271a62c1ba8213c5258c7a6e/ARMTemplates/ WebSiteManyFeatures.json # L96-L108 – Brett

Répondre

11

La solution consiste à créer les chaînes de connexion et les paramètres d'application en tant que ressources enfants imbriquées du site Web. En utilisant la stratégie des ressources enfant, on peut alors faire dépendre les appsettings à la fois du site Web et des aperçus d'application. Cela permet à l'approvisionnement de se produire dans l'ordre suivant:

  1. Site Web
  2. Insights application
  3. Site Web config/appsettings

Les deux réponses suivantes ont été utiles. Le premier illustre comment tirer la clé d'instrumentation. La seconde illustre comment imbriquer les paramètres de l'application et les chaînes de connexion en tant que ressources enfants du site Web.

How to pull the instrumentation key

How to nest app settings as child resources

Voici mon modèle final:

{ 
    "$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

Pour que cela fonctionne pour une boucle sur les sites Web, j'ai dû supprimer la dépendance 'de Microsoft.Insights/component'' dependsOn' sur les sites Web. – rcabr

+0

(Sinon, vous obtiendrez une erreur CircularDependency). – rcabr