2016-06-01 14 views
6

Ich habe ein Henne-und-Ei-Problem bei der Bereitstellung von Application Insights mit meiner Webanwendung für Azure. In der ARM-Vorlage hängt das Application Insights-Modul von der Website für die Anwendungs-ID ab (siehe Abhängigkeiten in den folgenden ARM-Vorlagen). Um die Webanwendung vollständig zu instrumentieren, benötige ich andererseits den Instrumentierungsschlüssel aus dem Application Insights Module. Wie kommt man damit klar?Azure Resource Template-Abhängigkeiten/Anwendungseinblicke

Praktische Anwendung Ansicht vom Portal

Application Insights module in the portal

ARM Vorlage für Web App

Web App ARM Template

ARM Vorlage für Praktische Anwendung

app insights arm template

+0

Hast du [die Vorlage] (https://github.com/sjkp/azure-arm-multiregion- website-template/blob/master/azur-arm-multiregion-website-template/Templates/WebSite.json)? –

+1

Die hilfreich Beispiel endete diese sind: http://stackoverflow.com/a/27625607/188474 und die refrenced Github Vorlage: https://github.com/davidebbo/AzureWebsitesSamples/blob/3ab2e9ff14c66719271a62c1ba8213c5258c7a6e/ARMTemplates/ WebSiteManyFeatures.json # L96-L108 – Brett

Antwort

11

Die Lösung besteht darin, die Verbindungszeichenfolgen und App-Einstellungen als verschachtelte untergeordnete Ressourcen der Website zu erstellen. Durch die Verwendung der untergeordneten Ressourcenstrategie kann man dann die Anwendungseinstellungen sowohl von den Anwendungsinformationen der Website als auch von abhängig machen. Dies ermöglicht die Bereitstellung in der folgenden Reihenfolge auftreten:

  1. Web Site
  2. Praktische Anwendung
  3. Web Site config/appSettings

Die beiden folgenden Antworten waren hilfreich. Der erste zeigt, wie man den Instrumentationsschlüssel zieht. Das zweite Beispiel veranschaulicht, wie App-Einstellungen und Verbindungszeichenfolgen als untergeordnete Ressourcen der Website verschachtelt werden.

How to pull the instrumentation key

How to nest app settings as child resources

Hier ist meine letzte Vorlage:

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

Um dies für eine Schleife auf WebSites funktionieren zu lassen, musste ich die 'dependsOn' Abhängigkeit der' Microsoft.Insights/Komponente' von den Webseiten entfernen. – rcabr

+0

(Andernfalls erhalten Sie einen CircularDependency-Fehler). – rcabr