Мониторинг приложений для службы приложение Azure и Python (предварительная версия)

Внимание

Юридические условия, применимые к функциям Azure, которые находятся в состоянии бета-версии, предварительной версии или иным образом еще не выпущены в общедоступной версии, см. на странице Дополнительные условия использования предварительных версий в Microsoft Azure.

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

Инструменты интеграции популярных библиотек Python в коде позволяют автоматически собирать и сопоставлять зависимости, журналы и метрики. После инструментирования вы собираете вызовы и метрики из этих библиотек Python:

Инструментирование Имя поддерживаемой библиотеки Поддерживаемые версии
Инструментирование OpenTelemetry Django django ссылка
Инструментирование FastApi в OpenTelemetry fastapi ссылка
Инструментирование Flask в OpenTelemetry flask ссылка
Инструментирование OpenTelemetry Psycopg2 psycopg2 ссылка
Инструментирование запросов OpenTelemetry requests ссылка
Инструментирование UrlLib в OpenTelemetry urllib Все
Инструментирование UrlLib3 OpenTelemetry urllib3 ссылка

Примечание.

Если используется Django, ознакомьтесь с дополнительным разделом инструментирования Django в этой статье.

Данные телеметрии ведения журнала собираются на уровне корневого средства ведения журнала. Дополнительные сведения о собственной иерархии ведения журналов Python см. в документации по журналам Python.

Необходимые компоненты

  • Python версии 3.11 или более поздней.
  • Служба приложений необходимо развернуть как код. Пользовательские контейнеры не поддерживаются.

Включить Application Insights

Самый простой способ отслеживать приложения Python в службах приложение Azure — портал Azure.

Активация мониторинга в портал Azure автоматически инструментирует приложение с помощью приложения Аналитика и не требует изменений кода.

Примечание.

Вы должны использовать автоинструментацию только в Служба приложений если вы не используете ручное инструментирование OpenTelemetry в коде, например дистрибутив OpenTelemetry в Azure Monitor или экспортер OpenTelemetry в Azure Monitor. Это необходимо, чтобы предотвратить отправку повторяющихся данных. Чтобы узнать больше об этом, проверка из раздела об устранении неполадок в этой статье.

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

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

Переключение на мониторинг приложений Python в службе приложение Azure без изменений кода.

Приложение Аналитика для Python интегрируется с службой приложение Azure Linux на основе кода.

Эта интеграция находится в состоянии общедоступной предварительной версии. Он добавляет пакет SDK для Python, который находится в общедоступной версии.

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

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

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

    Примечание.

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

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

  3. Укажите ресурс и готовы к использованию.

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

Настройка

Можно настроить с помощью переменных среды OpenTelemetry, таких как:

Переменная среды Description
OTEL_SERVICE_NAME, OTEL_RESOURCE_ATTRIBUTES Указывает атрибуты ресурсов OpenTelemetry, связанные с приложением. Атрибуты ресурсов можно задать с помощью OTEL_RESOURCE_ATTRIBUTES или использовать OTEL_SERVICE_NAME только для задания service.name.
OTEL_LOGS_EXPORTER Если задано значение None, отключает сбор и экспорт данных телеметрии ведения журнала.
OTEL_METRICS_EXPORTER Если задано значение None, отключает сбор и экспорт телеметрии метрик.
OTEL_TRACES_EXPORTER Если задано значение None, отключает сбор и экспорт данных телеметрии распределенной трассировки.
OTEL_BLRP_SCHEDULE_DELAY Задает интервал экспорта журнала в миллисекундах. По умолчанию — 5000.
OTEL_BSP_SCHEDULE_DELAY Задает интервал экспорта распределенной трассировки в миллисекундах. По умолчанию — 5000.
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS Указывает, какие инструментирования OpenTelemetry необходимо отключить. При отключении инструментирование не выполняется как часть автоинструментации. Принимает разделенный запятыми список имен строчных библиотек. Например, задайте для него "psycopg2,fastapi" значение отключения инструментирования Psycopg2 и FastAPI. По умолчанию он содержит пустой список, включив все поддерживаемые инструментирования.

Добавление библиотеки инструментирования сообщества

Вы можете автоматически собирать дополнительные данные при включении библиотек инструментирования из сообщества OpenTelemetry.

Внимание

Мы не поддерживаем или не гарантируем качество библиотек инструментирования сообщества. Чтобы предложить один для нашего дистрибутива, публикации или голосования в нашем сообществе отзывов. Помните, что некоторые из них основаны на экспериментальных спецификациях OpenTelemetry и могут ввести будущие критические изменения.

Чтобы добавить библиотеку инструментирования OpenTelemetry сообщества, установите ее с помощью файла приложения requirements.txt . Автоинструментация OpenTelemetry автоматически выбирает и инструментирует все установленные библиотеки. Найдите список библиотек сообщества здесь.

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

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

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

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

Имя параметра приложения Определение Значение
APPLICATIONINSIGHTS_CONNECTION_STRING строка Подключение ions для ресурса Аналитика приложения Пример: abcd1234-ab12-cd34-abcd1234abcd
ApplicationInsightsAgent_EXTENSION_VERSION Главное расширение, которое управляет мониторингом среды выполнения. ~3

Примечание.

Отладчик профилировщика и моментального снимка недоступны для приложений Python

Служба приложений параметры приложения с помощью 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

Инструментирование Django

Чтобы использовать инструментирование OpenTelemetry Django, необходимо задать DJANGO_SETTINGS_MODULE переменную среды в параметрах Служба приложений, чтобы указать из папки приложения в модуль параметров. Дополнительные сведения см. в документации по Django.

Часто задаваемые вопросы

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

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

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

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

Здесь мы предоставляем наше руководство по устранению неполадок для мониторинга приложений Python в службах приложение Azure с помощью автоинструментации.

Повторяющиеся данные телеметрии

Вы должны использовать автоинструментацию только в Служба приложений если вы не используете ручное инструментирование OpenTelemetry в коде, например дистрибутив OpenTelemetry в Azure Monitor или экспортер OpenTelemetry в Azure Monitor. Использование автоинструментации на вершине ручного инструментирования может привести к дублированию телеметрии и увеличению затрат. Чтобы использовать Служба приложений автоинструментацию OpenTelemetry, сначала удалите ручное инструментирование OpenTelemetry из кода.

Отсутствуют данные телеметрии

Если нет телеметрии, выполните следующие действия, чтобы убедиться, что автоинструментация включена правильно.

Шаг 1. Проверьте колонку "Приложение Аналитика" в ресурсе Служба приложений

Убедитесь, что автоинструментация включена в колонке "Приложение Аналитика" в ресурсе Служба приложений:

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

Шаг 2. Убедитесь, что приложение Параметры правильно

Убедитесь, что ApplicationInsightsAgent_EXTENSION_VERSION параметр приложения имеет значение ~3 и APPLICATIONINSIGHTS_CONNECTION_STRING указывает на соответствующий ресурс приложения Аналитика.

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

Шаг 3. Проверка автоинструментации диагностика и журналов состояния

Перейдите к /var/log/applicationinsights/ и откройте status_*.json.

Убедитесь, что AgentInitializedSuccessfully задано значение true и IKey имеется допустимый iKey.

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

    "AgentInitializedSuccessfully":true,
            
    "AppType":"python",
            
    "MachineName":"c89d3a6d0357",
            
    "PID":"47",
            
    "IKey":"00000000-0000-0000-0000-000000000000",
            
    "SdkVersion":"1.0.0"

Файл applicationinsights-extension.log в той же папке может отображать другие полезные диагностика.

Приложения Django

Если приложение использует Django и не запускается или использует неверные параметры, обязательно установите DJANGO_SETTINGS_MODULE переменную среды. Дополнительные сведения см. в разделе инструментирования Django.


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

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

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

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