Как настроить понимание приложения из шаблонов конвейера выпуска /ARM

У нас есть конвейер выпуска DevOps Azure, который настраивает все наши ресурсы Azure в определенном месте. Я могу создать все успешно с помощью шаблонов ARM, но я изо всех сил пытаюсь связать службу приложений с ресурсом App Insights.

Если бы я делал это вручную, я бы нажал кнопку "Включить расширение сайта" в колонке AppInsights службы приложений (под заголовком "Включить понимание приложения через расширение сайта без повторного развертывания кода").

Я попытался добавить шаг "Управление службой приложений Azure" в конвейер выпуска, настроенный для установки расширения "Application Insights для службы приложений Azure":

https://stackru.co m/images/a3e1565b4d1331ed65a511f1c50bab1f5d3c993b.png

Кроме того, я добавил шаг "Управление службами приложений Azure" в конвейер выпуска, установив значение "Включить непрерывный мониторинг":

https://stackru.co m/images/54e88c6d8e583ba7c972139d70aba5363aa1f96c.png

Но в результате все равно AppInsights подключен, а расширение не установлено:

https://stackru.co m/images/81744e2f85a42a6af6133620f9f0db316d42f02f.png

Есть ли способ, которым я могу сделать это автоматически? Либо с помощью шаблона ARM, сценария PowerShell, или что-то еще?

Изменить: В колонке "Расширения" я вижу "Расширение Application Insights для службы приложений Azure" (v2.6.5) и "Расширения ведения журнала ядра ASP.NET" (v2.2.0), но меня все равно просят "Повернуть". на расширение сайта "в колонке" Aplication Insights ".

4 ответа

В ARM-шаблоне вы можете сделать:

    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2018-02-01",
      "name": "[variables('web_app_service_name')]",
      "location": "[resourceGroup().location]",
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('plan_name'))]",
        "[resourceId('Microsoft.Insights/components', variables('app_insights_name'))]"
      ],
      "kind": "app",
      "properties": {
        "siteConfig": {
          "appSettings": [
            {
              "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
              "value": "[reference(variables('app_insights_name'), '2015-05-01').InstrumentationKey]"
            },
            {
              "name": "ApplicationInsightsAgent_EXTENSION_VERSION",
              "value": "~2"
            },
            {
              "name": "XDT_MicrosoftApplicationInsights_Mode",
              "value": "recommended"
            },
            {
              "name": "InstrumentationEngine_EXTENSION_VERSION",
              "value": "~1"
            },
            {
              "name": "DiagnosticServices_EXTENSION_VERSION",
              "value": "~3"
            },
            {
              "name": "APPINSIGHTS_PROFILERFEATURE_VERSION",
              "value": "1.0.0"
            },
            {
              "name": "XDT_MicrosoftApplicationInsights_BaseExtensions",
              "value": "~1"
            }
          ]
        }
      }
    }

См. Документацию по адресу https://docs.microsoft.com/en-us/azure/azure-monitor/app/azure-web-apps.

Убедитесь, что ключ настроек вашего приложения APPINSIGHTS_INSTRUMENTATIONKEY и нет ApplicationInsights:InstrumentationKey. Где-то в документах MS создается впечатление, что вы можете использовать и то, и другое. На самом деле это не так, в Azure вам нужно использовать первое, иначе Application Insights не будет включен для анализа на стороне сервера.

Я думаю, вам нужно сделать что-то подобное:

    {
        "apiVersion": "2015-08-01",
        "name": "[parameters('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'))]",
            "[resourceId('microsoft.insights/components/', parameters('appInsightsName'))]"
        ],
        "properties": {
            "name": "[parameters('webSiteName')]",
            "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
        },
        "resources": [
            {
                "apiVersion": "2015-08-01",
                "name": "appsettings",
                "type": "config",
                "dependsOn": [
                    "[resourceId('Microsoft.Web/Sites', parameters('webSiteName'))]",
                    "Microsoft.ApplicationInsights.AzureWebSites"
                ],
                "properties": {
                    "APPINSIGHTS_INSTRUMENTATIONKEY": "[reference(concat('microsoft.insights/components/', parameters('appInsightsName'))).InstrumentationKey]"
                }
            },
            {
                // this bit installs application insights extension
                "apiVersion": "2015-08-01",
                "name": "Microsoft.ApplicationInsights.AzureWebSites",
                "type": "siteextensions",
                "dependsOn": [
                    "[resourceId('Microsoft.Web/Sites', parameters('webSiteName'))]"
                ],
                "properties": {
                }
            }
        ]
    }

Я никогда не пробовал это на самом деле, но выглядит правильно, ссылка на пример, который я нашел: https://github.com/tomasr/webapp-appinsights/blob/master/WebSite.json

Чтобы портал Azure демонстрировал активную интеграцию с Application Insights, необходимо установить три параметра приложения.

https://docs.microsoft.com/en-us/azure/azure-monitor/app/azure-web-apps?tabs=net#automate-the-creation-of-an-application-insights-resource-and- ссылка-на-ваше-новое-созданное-приложение-сервис

      {
    "resources": [
        {
            "name": "[parameters('name')]",
            "type": "Microsoft.Web/sites",
            "properties": {
                "siteConfig": {
                    "appSettings": [
                        {
                            "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
                            "value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').InstrumentationKey]"
                        },
                        {
                            "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
                            "value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').ConnectionString]"
                        },
                        {
                            "name": "ApplicationInsightsAgent_EXTENSION_VERSION",
                            "value": "~2"
                        }
                    ]
                },
                "name": "[parameters('name')]",
                "serverFarmId": "[concat('/subscriptions/', parameters('subscriptionId'),'/resourcegroups/', parameters('serverFarmResourceGroup'), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "hostingEnvironment": "[parameters('hostingEnvironment')]"
            },
            "dependsOn": [
                "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "microsoft.insights/components/AppMonitoredSite"
            ],
            "apiVersion": "2016-03-01",
            "location": "[parameters('location')]"
        },
        {
            "apiVersion": "2016-09-01",
            "name": "[parameters('hostingPlanName')]",
            "type": "Microsoft.Web/serverfarms",
            "location": "[parameters('location')]",
            "properties": {
                "name": "[parameters('hostingPlanName')]",
                "workerSizeId": "[parameters('workerSize')]",
                "numberOfWorkers": "1",
                "hostingEnvironment": "[parameters('hostingEnvironment')]"
            },
            "sku": {
                "Tier": "[parameters('sku')]",
                "Name": "[parameters('skuCode')]"
            }
        },
        {
            "apiVersion": "2015-05-01",
            "name": "AppMonitoredSite",
            "type": "microsoft.insights/components",
            "location": "West US 2",
            "properties": {
                "ApplicationId": "[parameters('name')]",
                "Request_Source": "IbizaWebAppExtensionCreate"
            }
        }
    ],
    "parameters": {
        "name": {
            "type": "string"
        },
        "hostingPlanName": {
            "type": "string"
        },
        "hostingEnvironment": {
            "type": "string"
        },
        "location": {
            "type": "string"
        },
        "sku": {
            "type": "string"
        },
        "skuCode": {
            "type": "string"
        },
        "workerSize": {
            "type": "string"
        },
        "serverFarmResourceGroup": {
            "type": "string"
        },
        "subscriptionId": {
            "type": "string"
        }
    },
    "$schema": "https://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0"
}

См. Также мой другой ответ по этому : поводуAzure Cli Как включить Application Insights для веб-приложения