App Insights状态监视器扩展无法使用ARM模板进行部署

时间:2017-07-14 15:09:18

标签: azure azure-application-insights azure-resource-manager

我刚刚开始失败,不知道为什么;它昨天工作正常。我只是将appsettings和connectionstrings更改为部分或资源而不是webapp,以将dependsOn移动到链中。以前,该网站取决于应用程序设置和连接字符串的依赖关系。这是网站资源的ARM模板。

{
        "comments": "Primary web app deployment.",
        "name": "[variables('webAppName')]",
        "type": "Microsoft.Web/sites",
        "apiVersion": "2016-08-01",
        "kind": "app",
        "location": "[variables('rgLocation')]",
        "tags": {},
        "dependsOn": [
            "[resourceId('Microsoft.Web/serverfarms', variables('planName'))]"
        ],
        "properties": {
            "enabled": true,
            "hostNameSslStates": [
                {
                    "name": "[concat(variables('webAppName'), '.azurewebsites.net')]",
                    "sslState": "Disabled"
                },
                {
                    "name": "[concat(variables('webAppName'), '.scm.azurewebsites.net')]",
                    "sslState": "Disabled"
                }
            ],
            "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('planName'))]",
            "siteConfig": {
                "numberOfWorkers": 1,
                "defaultDocuments": [
                    "Default.htm",
                    "Default.html",
                    "Default.asp",
                    "index.htm",
                    "index.html",
                    "iisstart.htm",
                    "default.aspx",
                    "index.php",
                    "hostingstart.html"
                ],
                "netFrameworkVersion": "v4.6",
                "phpVersion": "",
                "pythonVersion": "",
                "nodeVersion": "",
                "linuxFxVersion": "",
                "requestTracingEnabled": false,
                "remoteDebuggingEnabled": false,
                "remoteDebuggingVersion": "VS2015",
                "httpLoggingEnabled": false,
                "logsDirectorySizeLimit": 35,
                "detailedErrorLoggingEnabled": false,
                "scmType": "None",
                "use32BitWorkerProcess": false,
                "webSocketsEnabled": false,
                "alwaysOn": true,
                "managedPipelineMode": "Integrated",
                "virtualApplications": [
                    {
                        "virtualPath": "/",
                        "physicalPath": "site\\wwwroot",
                        "preloadEnabled": false
                    }
                ],
                "autoHealEnabled": false,
                "vnetName": ""
            },
            "microService": "WebSites",
            "clientAffinityEnabled": false,
            "clientCertEnabled": false,
            "hostNamesDisabled": false
        },
        "resources": [
            {
                "name": "appsettings",
                "type": "config",
                "apiVersion":"2015-08-01",
                "dependsOn":[
                    "[resourceId('Microsoft.Web/sites', variables('webAppName'))]",
                    "[resourceId('microsoft.insights/components', variables('insightsName'))]"
                ],
                "properties": {
                    "APPINSIGHTS_INSTRUMENTATIONKEY":"[reference(resourceId('Microsoft.Insights/components', variables('insightsName')), '2015-05-01').InstrumentationKey]",
                    "UseAzureStorageEmulator": "false"
                }
            },
            {
                "name": "connectionstrings",
                "type": "config",
                "apiVersion":"2015-08-01",
                "dependsOn":[
                    "[resourceId('Microsoft.Web/sites', variables('webAppName'))]",
                    "[resourceId('Microsoft.Storage/storageAccounts', variables('genStorageName'))]",
                    "[resourceId('Microsoft.Storage/storageAccounts', variables('jobStorageName'))]"
                ],
                "properties": {
                    "AzureStorage": {
                        "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('genStorageName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('genStorageName')), '2017-06-01').keys[0].value, ';EndpointSuffix=core.windows.net')]",
                        "type": "Custom"
                    },
                    "AzureWebJobsDashboard" : {
                        "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('jobStorageName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('jobStorageName')), '2017-06-01').keys[0].value, ';EndpointSuffix=core.windows.net')]",
                        "type": "Custom"
                    },
                    "AzureWebJobsStorage" : {
                        "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('jobStorageName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('jobStorageName')), '2017-06-01').keys[0].value, ';EndpointSuffix=core.windows.net')]",
                        "type": "Custom"
                    }
                }
            },
            {
                "apiVersion":"2015-08-01",
                "name": "Microsoft.ApplicationInsights.AzureWebSites",
                "type": "siteextensions",
                "dependsOn": [
                    "[resourceId('Microsoft.Web/Sites', variables('webAppName'))]"
                ],
                "properties": {}
            }
        ]
    }

我得到的错误......

STATUS Conflict
PROVISIONING STATE Failed
TIMESTAMP7/14/2017, 10:40:23 AM
DURATION 1 minute 46 seconds
TYPE Microsoft.Web/sites/siteextensions
RESOURCE ID /subscriptions/.../providers/Microsoft.Web/sites/.../siteextensions/Microsoft.ApplicationInsights.AzureWebSites
STATUSMESSAGE{
    "status": "Canceled",
    "error": {
        "code": "ResourceDeploymentFailure",
        "message": "The resource operation completed with terminal provisioning state 'Canceled'."
    }
}

即使出现错误,它实际上也正确安装了扩展程序。在另一个测试期间,它安装了扩展,但是当我打开它时,未安装App Insights Profiler Web作业。无论哪种方式,都不确定为什么会发生冲突。当我在Kudu打开日志时,内部几乎没有任何内容。

7/14/2017 2:44:38 PM: [Verbose] Starting Application Insights installation and configuration...
7/14/2017 2:44:38 PM: [Verbose] Loading assembly from D:\home\SiteExtensions\Microsoft.ApplicationInsights.AzureWebSites\Microsoft.ApplicationInsights.WebSiteManager.dll
7/14/2017 2:44:39 PM: [Verbose] No web.config detected. The web app may be empty. Assume classic ASP.NET by default.

这就是整个日志。

在先前的测试中...

7/13/2017 6:15:44 PM: [Verbose] Starting Application Insights installation and configuration...
7/13/2017 6:15:44 PM: [Verbose] Loading assembly from D:\home\SiteExtensions\Microsoft.ApplicationInsights.AzureWebSites\Microsoft.ApplicationInsights.WebSiteManager.dll
7/13/2017 6:15:44 PM: [Verbose] No web.config detected. The web app may be empty. Assume classic ASP.NET by default.

文件的相同开头,但有更多条目。肯定有一个网络配置,应用程序正在运行,所以不确定那是什么。

7/13/2017 6:15:50 PM: [Verbose] Application is not instrumented with Application Insights.
7/13/2017 6:15:50 PM: [Verbose] Starting to download/install 'Microsoft.ApplicationInsights.Azure.WebSites' nuget package from D:\home\SiteExtensions\Microsoft.ApplicationInsights.AzureWebSites\appinsights...
7/13/2017 6:15:52 PM, [Verbose] Installing 'Microsoft.ApplicationInsights', version '2.3.0' ...
7/13/2017 6:15:53 PM, [Verbose] Installed 'Microsoft.ApplicationInsights', version '2.3.0'.

该应用程序肯定是仪表化的,并使用2.4版本,它比安装的2.3更新。

2 个答案:

答案 0 :(得分:9)

根据您的描述,我认为安装的siteextensions已被取消的原因是更改了web应用程序将重新启动的appsetting。因此它将取消siteextensions安装的线程。

部署更改了Web应用程序设置后,它将重新启动Web应用程序。但是您的部署仍在运行安装siteextensions的线程。所以你面对线程取消错误。

我建议你可以在网络应用资源的siteConfig功能中设置appsettings。部署模板时,在安装siteextensions时不会导致Web应用程序重新启动。

您可以参考以下代码的模板的某些部分:

    "siteConfig": {
      "appSettings": [
        {
          "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
          "value": "[reference(resourceId('Microsoft.Insights/components', variables('webSiteName')), '2015-05-01').InstrumentationKey]"
        }
      ]

整个测试模板:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "hostingPlanName": {
      "type": "string",
      "minLength": 1
    },
    "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 capacity. 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": {
    "webSiteName": "brandotestarm11"
  },
  "resources": [
    {
      "apiVersion": "2015-08-01",
      "name": "[parameters('hostingPlanName')]",
      "type": "Microsoft.Web/serverfarms",
      "location": "[resourceGroup().location]",
      "tags": {
        "displayName": "HostingPlan"
      },
      "sku": {
        "name": "[parameters('skuName')]",
        "capacity": "[parameters('skuCapacity')]"
      },
      "properties": {
        "name": "[parameters('hostingPlanName')]"
      }
    },
    {
      "apiVersion": "2014-04-01",
      "name": "[variables('webSiteName')]",
      "type": "Microsoft.Insights/components",
      "location": "East US",
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
      ],
      "tags": {
        "[concat('hidden-link:', resourceGroup().id, '/providers/Microsoft.Web/sites/', variables('webSiteName'))]": "Resource",
        "displayName": "AppInsightsComponent"
      },
      "properties": {
        "applicationId": "[variables('webSiteName')]"
      }
    },
    {
      "comments": "Primary web app deployment.",
      "apiVersion": "2015-08-01",
      "name": "[variables('webSiteName')]",
      "type": "Microsoft.Web/sites",
      "location": "[resourceGroup().location]",
      "tags": {},
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
        "[resourceId('microsoft.insights/components', variables('webSiteName'))]"
      ],
      "properties": {
        "enabled": true,
        "hostNameSslStates": [
          {
            "name": "[concat(variables('webSiteName'), '.azurewebsites.net')]",
            "sslState": "Disabled"
          },
          {
            "name": "[concat(variables('webSiteName'), '.scm.azurewebsites.net')]",
            "sslState": "Disabled"
          }
        ],
        "siteConfig": {
          "appSettings": [
            {
              "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
              "value": "[reference(resourceId('Microsoft.Insights/components', variables('webSiteName')), '2015-05-01').InstrumentationKey]"
            }
          ],
          "numberOfWorkers": 1,
          "defaultDocuments": [
            "Default.htm",
            "Default.html",
            "Default.asp",
            "index.htm",
            "index.html",
            "iisstart.htm",
            "default.aspx",
            "index.php",
            "hostingstart.html"
          ],
          "netFrameworkVersion": "v4.6",
          "phpVersion": "",
          "pythonVersion": "",
          "nodeVersion": "",
          "linuxFxVersion": "",
          "requestTracingEnabled": false,
          "remoteDebuggingEnabled": false,
          "remoteDebuggingVersion": "VS2015",
          "httpLoggingEnabled": false,
          "logsDirectorySizeLimit": 35,
          "detailedErrorLoggingEnabled": false,
          "scmType": "None",
          "use32BitWorkerProcess": false,
          "webSocketsEnabled": false,
          "alwaysOn": true,
          "managedPipelineMode": "Integrated",
          "virtualApplications": [
            {
              "virtualPath": "/",
              "physicalPath": "site\\wwwroot",
              "preloadEnabled": false
            }
          ],
          "autoHealEnabled": false,
          "vnetName": ""
        },
        "microService": "WebSites",
        "clientAffinityEnabled": false,
        "clientCertEnabled": false,
        "hostNamesDisabled": false,
        "name": "[variables('webSiteName')]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
      },
      "resources": [
        {
          "apiVersion": "2015-08-01",
          "name": "Microsoft.ApplicationInsights.AzureWebSites",
          "type": "siteextensions",
          "dependsOn": [
            "[resourceId('Microsoft.Web/Sites', variables('webSiteName'))]"
          ],
          "properties": {}

        }
      ]
    }
  ]
}

结果:

enter image description here

更新

我建议您首先安装网站扩展程序,然后更改应用程序设置。

在网络应用配置资源中,您可以设置其依赖于网站扩展。

因此模板将首先安装扩展,然后更改appsetting以重新启动Web应用程序。所以你可以安装完整的扩展程序。

更多细节,您可以参考以下模板:

您可以使用“Microsoft.ApplicationInsights.AzureWebSites”设置dependsOn。

 "resources": [
        {
          "name": "appsettings",
          "type": "config",
          "apiVersion": "2015-08-01",
          "dependsOn": [
            "[resourceId('Microsoft.Web/sites', variables('webSiteName'))]",
            "[resourceId('microsoft.insights/components', variables('webSiteName'))]",
            "Microsoft.ApplicationInsights.AzureWebSites"
          ],
          "properties": {
            "APPINSIGHTS_INSTRUMENTATIONKEY": "[reference(resourceId('Microsoft.Insights/components', variables('webSiteName')), '2015-05-01').InstrumentationKey]",
            "UseAzureStorageEmulator": "false"
          }
        },

总模板:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "hostingPlanName": {
      "type": "string",
      "minLength": 1
    },
    "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 capacity. 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": {
    "webSiteName": "brandotestarmfor"
  },
  "resources": [
    {
      "apiVersion": "2015-08-01",
      "name": "[parameters('hostingPlanName')]",
      "type": "Microsoft.Web/serverfarms",
      "location": "[resourceGroup().location]",
      "tags": {
        "displayName": "HostingPlan"
      },
      "sku": {
        "name": "[parameters('skuName')]",
        "capacity": "[parameters('skuCapacity')]"
      },
      "properties": {
        "name": "[parameters('hostingPlanName')]"
      }
    },
    {
      "apiVersion": "2015-08-01",
      "name": "[variables('webSiteName')]",
      "type": "Microsoft.Web/sites",
      "location": "[resourceGroup().location]",
      "tags": {
        "[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "Resource",
        "displayName": "Website"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
      ],
      "properties": {
        "name": "[variables('webSiteName')]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]",
        "siteConfig": {
          "numberOfWorkers": 1,
          "defaultDocuments": [
            "Default.htm",
            "Default.html",
            "Default.asp",
            "index.htm",
            "index.html",
            "iisstart.htm",
            "default.aspx",
            "index.php",
            "hostingstart.html"
          ],
          "netFrameworkVersion": "v4.6",
          "phpVersion": "",
          "pythonVersion": "",
          "nodeVersion": "",
          "linuxFxVersion": "",
          "requestTracingEnabled": false,
          "remoteDebuggingEnabled": false,
          "remoteDebuggingVersion": "VS2015",
          "httpLoggingEnabled": false,
          "logsDirectorySizeLimit": 35,
          "detailedErrorLoggingEnabled": false,
          "scmType": "None",
          "use32BitWorkerProcess": false,
          "webSocketsEnabled": false,
          "alwaysOn": true,
          "managedPipelineMode": "Integrated",
          "virtualApplications": [
            {
              "virtualPath": "/",
              "physicalPath": "site\\wwwroot",
              "preloadEnabled": false
            }
          ],
          "autoHealEnabled": false,
          "vnetName": ""
        },
        "clientAffinityEnabled": false,
        "clientCertEnabled": false,
        "hostNamesDisabled": false
      },
      "resources": [
        {
          "name": "appsettings",
          "type": "config",
          "apiVersion": "2015-08-01",
          "dependsOn": [
            "[resourceId('Microsoft.Web/sites', variables('webSiteName'))]",
            "[resourceId('microsoft.insights/components', variables('webSiteName'))]",
            "Microsoft.ApplicationInsights.AzureWebSites"
          ],
          "properties": {
            "APPINSIGHTS_INSTRUMENTATIONKEY": "[reference(resourceId('Microsoft.Insights/components', variables('webSiteName')), '2015-05-01').InstrumentationKey]",
            "UseAzureStorageEmulator": "false"
          }
        },
        {
          "apiVersion": "2015-08-01",
          "name": "Microsoft.ApplicationInsights.AzureWebSites",
          "type": "siteextensions",
          "dependsOn": [
            "[resourceId('Microsoft.Web/Sites', variables('webSiteName'))]"
          ],
          "properties": {}
        }
      ]
    },
    {
      "apiVersion": "2014-04-01",
      "name": "[variables('webSiteName')]",
      "type": "Microsoft.Insights/components",
      "location": "East US",
      "dependsOn": [
        "[resourceId('Microsoft.Web/sites/', variables('webSiteName'))]"
      ],
      "tags": {
        "[concat('hidden-link:', resourceGroup().id, '/providers/Microsoft.Web/sites/', variables('webSiteName'))]": "Resource",
        "displayName": "AppInsightsComponent"
      },
      "properties": {
        "applicationId": "[variables('webSiteName')]"
      }
    }
  ]
}

结果如下:

enter image description here

答案 1 :(得分:4)

似乎没有办法让扩展程序等待应用程序设置更新,因此我将扩展程序的安装移动到发布环境中的其他任务中。现在我有三个任务:

1.  ARM deploy common resources
2.  ARM deploy app dependencies and app service
3.  ARM deploy status monitor site extension
4.  Web Deploy code into app service

但是,为了做到这一点,你还必须在步骤3中以某种方式指定网站。

以下是我使用步骤2中具有webAppName的输出所做的,我必须再次指定该站点,然后将扩展名放入该站点的资源中。您必须注意此处指定的内容,以免中断先前的部署。

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "webAppName": { "type": "string", "value": "<outputfrompreviousstep>" }
    },
    "variables": {
        "planName": "[concat(variables('webAppName'), '-ServicePlan')]"
    },
    "resources": [
        {
            "name": "[variables('webAppName')]",
            "type": "Microsoft.Web/sites",
            "apiVersion": "2016-08-01",
            "location": "[resourceGroup().location]",
            "tags": {},
            "dependsOn": [
            ],
            "properties": {
                "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('planName'))]"
            },
            "resources": [
                {
                    "apiVersion":"2015-08-01",
                    "name": "Microsoft.ApplicationInsights.AzureWebSites",
                    "type": "siteextensions",
                    "dependsOn": [
                        "[resourceId('Microsoft.Web/Sites', variables('webAppName'))]"
                    ],
                    "properties": {}
                }
            ]
        }
    ],
    "outputs": {
        "webAppName": {
            "type": "string",
            "value": "[variables('webAppName')]"
        }
    }
}