Мониторинг приложений для Службы приложений Azure и Node.js

Мониторинг веб-приложений Node.js, работающих в службах приложение Azure, не требует каких-либо изменений в коде. В этой статье описано, как включить мониторинг приложений Azure Monitor Аналитика и предварительное руководство по автоматизации процесса для крупномасштабных развертываний.

Включить Application Insights

Простейший способ включения мониторинга приложений для приложений Node.js, выполняющихся в Службах приложений Azure, — через портал Azure. При включении мониторинга приложений на портале Azure будет автоматически выполнено инструментирование вашего приложения с помощью Application Insights, что не требует внесения изменений в код.

Примечание.

Вы можете настроить автоматически подключенный агент с помощью переменной среды APPLICATIONINSIGHTS_CONFIGURATION_CONTENT в колонке переменных Среда службы приложений. Дополнительные сведения о параметрах конфигурации, которые можно передать с помощью этой переменной среды, см. в разделе Node.js Configuration.

Примечание.

Если обнаруживаются автоматические инструментирование и инструментирование на основе ручного пакета SDK, учитываются только параметры ручного инструментирования. Это необходимо, чтобы предотвратить отправку повторяющихся данных. Дополнительные сведения см. в разделе об устранении неполадок в этой статье.

Автоинструментация через портал Azure

Полный список поддерживаемых сценариев автоинструментации см. в статье "Поддерживаемые среды", "Языки" и поставщики ресурсов.

Включить мониторинг для приложений Node.js, работающих в Службе приложений Azure, можно одним щелчком мыши без необходимости изменения кода. Application Insights для Node.js интегрируется со Службой приложений Azure в Linux — как с контейнерами на основе кода, так и с пользовательскими контейнерами, а также со Службой приложений в Windows для приложений на основе кода. Эта интеграция находится в состоянии общедоступной предварительной версии. Интеграция добавляет пакет SDK Node.js, который находится в состоянии GA.

  1. Выберите Application Insights на панели управления Azure для своей службы приложений, а затем выберите Включить.

    Снимок экрана: вкладка Application Insights с выбранным значением

  2. Создайте новый или выберите существующий ресурс Application Insights для этого приложения.

    Примечание.

    После выбора OK для создания нового ресурса вам будет предложено выбрать вариант Применить параметры мониторинга. Нажав кнопку Продолжить, вы свяжете новый ресурс Application Insights со службой приложений, а также активируете перезапуск самой службы приложений.

    Снимок экрана: раскрывающийся раздел

  3. Когда вы указали, какой ресурс будет использоваться, вы все будете использовать.

    Снимок экрана: инструментирование приложения.

Настройка

Агент Node.js можно настроить с помощью JSON. APPLICATIONINSIGHTS_CONFIGURATION_CONTENT Задайте переменную среды строке JSON или задайте APPLICATIONINSIGHTS_CONFIGURATION_FILE для переменной среды путь к файлу, содержаму JSON.

"samplingPercentage": 80,
"enableAutoCollectExternalLoggers": true,
"enableAutoCollectExceptions": true,
"enableAutoCollectHeartbeat": true,
"enableSendLiveMetrics": true,
...
    

Доступен полный набор конфигураций , необходимо использовать допустимый json-файл.

Включение наблюдения на стороне клиента

Чтобы включить мониторинг на стороне клиента для приложения Node.js, необходимо вручную добавить в приложение клиентский пакет SDK JavaScript.

Автоматизация мониторинга

Чтобы включить сбор данных телеметрии с помощью Application Insights, достаточно просто задать следующие параметры приложения:

Снимок экрана: параметры приложения Службы приложений с доступными параметрами Application Insights.

Определения параметров приложения

Имя параметра приложения Определение Значение
ApplicationInsightsAgent_EXTENSION_VERSION Главное расширение, которое управляет мониторингом среды выполнения. ~2 в Windows или ~3 в Linux.
XDT_MicrosoftApplicationInsights_NodeJS Флаг, определяющий, включен ли агент Node.js. 0 или 1 (применимо только в Windows).

Примечание.

Профилировщик и отладчик моментальных снимков недоступны для приложений Node.js

Служба приложений параметры приложения с помощью Azure Resource Manager

Параметры приложения для службы приложение Azure можно управлять и настраивать с помощью шаблонов Azure Resource Manager. Этот метод можно использовать при развертывании новых Служба приложений ресурсов с помощью автоматизации Resource Manager или изменения параметров существующих ресурсов.

Базовая структура параметров приложения JSON для ресурса Служба приложений:

      "resources": [
        {
          "name": "appsettings",
          "type": "config",
          "apiVersion": "2015-08-01",
          "dependsOn": [
            "[resourceId('Microsoft.Web/sites', variables('webSiteName'))]"
          ],
          "tags": {
            "displayName": "Application Insights Settings"
          },
          "properties": {
            "key1": "value1",
            "key2": "value2"
          }
        }
      ]

Пример шаблона Resource Manager с параметрами приложения, настроенными для приложения Аналитика, может оказаться полезным. В частности, см. раздел, начинающийся с строки 238.

Чтобы создать шаблон Resource Manager с параметрами Аналитика приложения по умолчанию, начните процесс, как если бы вы собирались создать веб-приложение с включенным приложением Аналитика.

  1. Создайте новый ресурс службы приложений с нужными сведениями о веб-приложении. Включите Аналитика приложения на вкладке "Мониторинг".

  2. Выберите Review + create (Просмотреть и создать). Затем выберите " Скачать шаблон для автоматизации".

    Снимок экрана: меню создания веб-приложения Служба приложений.

    Этот параметр создает последний шаблон Resource Manager со всеми необходимыми параметрами.

    Снимок экрана: шаблон веб-приложения Служба приложений.

В следующем примере замените все экземпляры AppMonitoredSite на имя сайта:

Примечание.

Если используется Windows, установите для нее значение ApplicationInsightsAgent_EXTENSION_VERSION~2. Если используется Linux, установите для нее значение ApplicationInsightsAgent_EXTENSION_VERSION~3.

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

С помощью PowerShell.

Чтобы включить мониторинг приложений с помощью PowerShell, необходимо изменить только базовые параметры приложения. Следующий пример включает мониторинг приложений для веб-сайта, вызываемого AppMonitoredSite в группе AppMonitoredRGресурсов. Он настраивает отправку данных в 012345678-abcd-ef01-2345-6789abcd ключ инструментирования.

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Примечание.

Если используется Windows, задайте для приложения Аналитика Agent_EXTENSION_VERSION значение ~2. При использовании Linux задайте для приложения Аналитика Agent_EXTENSION_VERSION значение ~3.

$app = Get-AzWebApp -ResourceGroupName "AppMonitoredRG" -Name "AppMonitoredSite" -ErrorAction Stop
$newAppSettings = @{} # case-insensitive hash map
$app.SiteConfig.AppSettings | %{$newAppSettings[$_.Name] = $_.Value} # preserve non Application Insights application settings.
$newAppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"] = "012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights instrumentation key
$newAppSettings["APPLICATIONINSIGHTS_CONNECTION_STRING"] = "InstrumentationKey=012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights connection string
$newAppSettings["ApplicationInsightsAgent_EXTENSION_VERSION"] = "~2"; # enable the ApplicationInsightsAgent
$app = Set-AzWebApp -AppSettings $newAppSettings -ResourceGroupName $app.ResourceGroup -Name $app.Name -ErrorAction Stop

Устранение неполадок

Ниже приведено пошаговое руководство по устранению неполадок мониторинга на основе расширений и агентов для приложений на основе Node.js, работающих в службах приложений Azure.

  1. Убедитесь, что параметр приложения ApplicationInsightsAgent_EXTENSION_VERSION имеет значение ~2.

  2. Перейдите в https://yoursitename.scm.azurewebsites.net/ApplicationInsights.

    Снимок экрана: ссылка над страницей результатов.

    • Убедитесь, что Application Insights Extension Status имеет значение Pre-Installed Site Extension, version 2.8.x.xxxx, is running..

      Если мониторинг не запущен, следуйте инструкциям по включению мониторинга Application Insights.

    • Перейдите к файлу D:\local\Temp\status.json и откройте файл status.json.

    Удостоверьтесь, что параметр SDKPresent имеет значение false, AgentInitializedSuccessfully — значение true, а для IKey указан действительный ключ инструментирования.

    Ниже приведен пример JSON-файла.

        "AppType":"node.js",
    
        "MachineName":"c89d3a6d0357",
    
        "PID":"47",
    
        "AgentInitializedSuccessfully":true,
    
        "SDKPresent":false,
    
        "IKey":"00000000-0000-0000-0000-000000000000",
    
        "SdkVersion":"1.8.10"
    
    

    Значение SDKPresent указывает, что расширение обнаружило, что какой-то аспект пакета SDK уже присутствует в приложении, и будет выполнен откат.

Какова разница между стандартными метриками от приложений Аналитика и метрик служб приложение Azure?

Приложение Аналитика собирает данные телеметрии для запросов, которые сделали его в приложение. Если сбой возникает в WebApps/WebServer, и запрос не достиг пользовательского приложения, приложение Аналитика не имеет никаких данных телеметрии.

Длительность вычисления serverresponsetime приложения Аналитика не обязательно соответствует времени отклика сервера, наблюдаемого веб-приложения. Это связано с тем, что приложение Аналитика учитывает только длительность, когда запрос фактически достигает пользовательского приложения. Если запрос зависает или помещается в очередь в webServer, время ожидания включается в метрики веб-приложения, но не в метрики приложения Аналитика.

Тестирование подключения между узлом приложения и службой приема

Пакеты SDK и агенты приложений Аналитика отправляют данные телеметрии для приема в качестве вызовов REST к конечным точкам приема. Вы можете проверить подключение с веб-сервера или хост-компьютера приложения к конечным точкам службы приема с помощью необработанных клиентов REST из Команд PowerShell или curl. См. раздел "Устранение неполадок с отсутствующими данными телеметрии приложения" в Аналитика приложения Azure Monitor.

Заметки о выпуске

Сведения о последних обновлениях и исправлениях ошибок см. в заметках о выпуске.

Следующие шаги