Monitoramento de aplicativos para o Serviço de Aplicativo do Azure e Python (versão prévia)

Importante

Veja os Termos de Uso Complementares para Versões Prévias do Microsoft Azure para obter termos legais que se aplicam aos recursos do Azure que estão em versão beta, versão prévia ou que, de outra forma, ainda não foram lançados em disponibilidade geral.

Monitore seus aplicativos Web do Python nos Serviços de Aplicativos do Azure sem modificar o código. Este guia mostra como habilitar o Application Insights do Azure Monitor e oferece dicas para automatizar implantações em larga escala.

A integração instrumenta bibliotecas populares do Python em seu código, permitindo coletar e correlacionar automaticamente as dependências, os logs e as métricas. Após a instrumentação, colete chamadas e métricas dessas bibliotecas do Python:

Instrumentação Nome da biblioteca compatível Versões suportadas
Instrumentação Django do OpenTelemetry django link
Instrumentação FastApi do OpenTelemetry fastapi link
Instrumentação Flask do OpenTelemetry flask link
Instrumentação Psycopg2 do OpenTelemetry psycopg2 link
Instrumentação Requests do OpenTelemetry requests link
Instrumentação UrlLib do OpenTelemetry urllib Tudo
Instrumentação UrlLib3 do OpenTelemetry urllib3 link

Observação

Se estiver usando o Django, consulte a seção adicional Instrumentação Django neste artigo.

A telemetria de log é coletada no nível do agente raiz. Para saber mais sobre a hierarquia de registro em log nativa do Python, acesse a Documentação de registro em log do Python.

Pré-requisitos

  • Python versão 3.11 ou anterior.
  • O Serviço de Aplicativo deve ser implantado como código. Não há suporte para os contêineres personalizados.

Habilitar o Application Insights

A maneira mais fácil de monitorar os aplicativos Python nos Serviços de Aplicativos do Azure é por meio do portal do Azure.

A ativação do monitoramento no portal do Azure instrumenta automaticamente seu aplicativo com o Application Insights e não requer alterações de código.

Observação

Você só deverá usar a instrumentação automática no Serviço de Aplicativo se não estiver usando a instrumentação manual do OpenTelemetry em seu código, como a Distribuição do OpenTelemetry do Azure Monitor ou o Exportador do OpenTelemetry do Azure Monitor. Isso é para evitar que dados duplicados sejam enviados. Para saber mais sobre isso, confira a seção de solução de problemas neste artigo.

Instrumentação automática por meio do portal do Azure

Para obter uma lista completa dos cenários de autoinstrumentação suportados, confira Ambientes, linguagens e provedores de recursos suportados.

Alterne o monitoramento para seus aplicativos Python no Serviço de Aplicativo do Azure sem nenhuma alteração de código necessária.

O Application Insights para Python integra-se ao Serviço de Aplicativo do Azure para Linux baseado em código.

A integração está em versão prévia pública. Ele adiciona o SDK do Python, que está em GA.

  1. Selecione o Application Insights no painel de controle do Azure do seu serviço de aplicativo, seguido de Habilitar.

    Captura de tela da guia Application Insights com a opção Habilitar selecionada.

  2. Opte por criar um recurso, a menos que você já tenha configurado um recurso do Application Insights para este aplicativo.

    Observação

    Ao selecionar OK para criar o recurso, você será solicitado a Aplicar configurações de monitoramento. Se você selecionar Continuar, vinculará seu novo recurso do Application Insights ao seu serviço de aplicativo. Fazer isso também disparará uma reinicialização do seu serviço de aplicativo.

    Captura de tela do menu suspenso Alterar seu recurso.

  3. Especifique o recurso, e ele está pronto para uso.

    Captura de tela da instrumentação do seu aplicativo.

Configuração

Você pode configurar com variáveis de ambiente do OpenTelemetry, como:

Variável de Ambiente Descrição
OTEL_SERVICE_NAME, OTEL_RESOURCE_ATTRIBUTES Especifica os Atributos de Recurso do OpenTelemetry associados ao seu aplicativo. Você pode definir quaisquer Atributos de Recurso com OTEL_RESOURCE_ATTRIBUTES ou usar OTEL_SERVICE_NAME para definir apenas o service.name.
OTEL_LOGS_EXPORTER Se definido como None, desabilita a coleta e a exportação de telemetria de registro em log.
OTEL_METRICS_EXPORTER Se definido como None, desabilita a coleta e a exportação de telemetria de métrica.
OTEL_TRACES_EXPORTER Se definido como None, desabilita a coleta e a exportação de telemetria de rastreamento distribuído.
OTEL_BLRP_SCHEDULE_DELAY Especifica o intervalo de exportação de registro em log em milissegundos. Usa 5.000 como padrão.
OTEL_BSP_SCHEDULE_DELAY Especifica o intervalo de exportação de rastreamento distribuído em milissegundos. Usa 5.000 como padrão.
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS Especifica quais instrumentações do OpenTelemetry devem ser desabilitadas. Quando desabilitadas, as instrumentações não são executadas como parte da instrumentação automática. Aceita uma lista separada por vírgulas de nomes de biblioteca em letras minúsculas. Por exemplo, defina-o como "psycopg2,fastapi" para desabilitar as instrumentações Psycopg2 e FastAPI. Ele usa como padrão uma lista vazia, habilitando todas as instrumentações compatíveis.

Adicionar uma biblioteca de instrumentação da comunidade

Você pode coletar mais dados automaticamente quando incluir as bibliotecas de instrumentação da comunidade OpenTelemetry.

Cuidado

Não damos suporte nem garantimos a qualidade das bibliotecas de instrumentação da comunidade. Para sugerir uma para nossa distribuição, faça uma postagem ou vote a favor em nossa comunidade de comentários. Lembre-se de que algumas são baseadas em especificações experimentais do OpenTelemetry e podem introduzir futuras alterações interruptivas.

Para adicionar a Biblioteca de Instrumentação do OpenTelemetry da comunidade, instale-a por meio do arquivo requirements.txt do aplicativo. A instrumentação automática do OpenTelemetry seleciona e instrumenta todas as bibliotecas instaladas. Localize a lista de bibliotecas da comunidade aqui.

Automatizar monitoramento

Para habilitar a coleta de telemetria com o Application Insights, somente as seguintes configurações do aplicativo precisam ser definidas:

Captura de tela das Configurações de Aplicativo do Serviço de Aplicativo com configurações do Application Insights disponíveis.

Definições de configurações do aplicativo

Nome da configuração do aplicativo Definição Valor
APPLICATIONINSIGHTS_CONNECTION_STRING Cadeia de conexões do seu recurso do Application Insights Exemplo: abcd1234-ab12-cd34-abcd1234abcd
ApplicationInsightsAgent_EXTENSION_VERSION Extensão principal, que controla o monitoramento do tempo de execução. ~3

Observação

O Profiler e o depurador de instantâneos não estão disponíveis para aplicativos Python

Configurações de aplicativo do Serviço de Aplicativo com o Azure Resource Manager

As configurações de aplicativo do Serviço de Aplicativo do Azure podem ser gerenciadas e configuradas com os modelos do Azure Resource Manager. Você pode usar esse método ao implantar novos recursos de Serviço de Aplicativo com a automação do Resource Manager ou modificar as configurações dos recursos existentes.

A estrutura básica das configurações do aplicativo JSON para um recurso do Serviço de Aplicativo:

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

Para ver um exemplo de um modelo do Resource Manager com configurações de aplicativo definidas para o Application Insights, esse modelo pode ser útil. Especificamente, confira a seção que começa na linha 238.

Para criar um modelo do Resource Manager com as configurações do Application Insights padrão, inicie o processo como se estivesse criando um novo aplicativo Web com o Application Insights habilitado.

  1. Crie um novo recurso do Serviço de Aplicativo com as informações desejadas do aplicativo Web. Habilite o Application Insights na guia Monitoramento.

  2. Selecione Examinar + criar. Em seguida, selecione Baixar um modelo para automação.

    Captura de tela que mostra o menu de criação do aplicativo Web do Serviço de Aplicativo.

    Essa opção gera o modelo do Resource Manager mais recente com todas as configurações necessárias definidas.

    Captura de tela que mostra um modelo de aplicativo Web Serviço de Aplicativo.

No exemplo a seguir, substitua todas as instâncias de AppMonitoredSite pelo nome do seu site:

Observação

Se estiver usando o Windows, defina ApplicationInsightsAgent_EXTENSION_VERSION como ~2. Se estiver usando o Linux, defina ApplicationInsightsAgent_EXTENSION_VERSION como ~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"
}

Ativar através do Powershell

Para habilitar o monitoramento de aplicativos por meio do PowerShell, somente as configurações de aplicativo subjacentes devem ser alteradas. O exemplo a seguir habilita o monitoramento de aplicativos para um site chamado AppMonitoredSite no grupo de recursos AppMonitoredRG. Ele configura os dados a serem enviados para a chave de instrumentação 012345678-abcd-ef01-2345-6789abcd.

Observação

Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Confira Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.

Observação

Se estiver usando o Windows, defina ApplicationInsightsAgent_EXTENSION_VERSION como ~2. Se estiver usando o Linux, defina ApplicationInsightsAgent_EXTENSION_VERSION como ~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

Instrumentação Django

Para usar a Instrumentação Django do OpenTelemetry, você precisa definir a variável de ambiente DJANGO_SETTINGS_MODULE nas configurações do Serviço de Aplicativo para apontar da pasta do aplicativo para o módulo de configurações. Para obter mais informações, confira a Documentação sobre Django.

Perguntas frequentes

Qual a diferença entre as métricas padrão das métricas do serviço Application Insights vs Aplicativo do Azure?

O Application Insights coleta a telemetria das solicitações que chegaram no aplicativo. Se a falha ocorreu no WebApps/WebServer e a solicitação não chegou ao aplicativo do usuário, o Application Insights não terá telemetrias sobre ele.

A duração da serverresponsetime calculada pelo Application Insights não corresponderá necessariamente ao tempo de resposta do servidor observado pelos aplicativos Web. Esse comportamento ocorre porque o Application Insights só conta a duração quando a solicitação realmente chega ao aplicativo do usuário. Se a solicitação estiver presa ou enfileirada no WebServer, o tempo de espera será incluído nas métricas dos aplicativos Web, mas não nas métricas do Application Insights.

Solução de problemas

Aqui, fornecemos nosso guia de solução de problemas para monitorar aplicativos Python nos Serviços de Aplicativos do Azure usando a instrumentação automática.

Telemetria duplicada

Você só deverá usar a instrumentação automática no Serviço de Aplicativo se não estiver usando a instrumentação manual do OpenTelemetry em seu código, como a Distribuição do OpenTelemetry do Azure Monitor ou o Exportador do OpenTelemetry do Azure Monitor. Usar a instrumentação automática por cima da instrumentação manual pode causar telemetria duplicada e aumentar seu custo. Para usar a instrumentação automática do OpenTelemetry do Serviço de Aplicativo, primeiro remova a instrumentação manual do OpenTelemetry do seu código.

Telemetria ausente

Se você não tiver telemetria, siga estas etapas para confirmar se a instrumentação automática está habilitada corretamente.

Etapa 1: verificar o painel do Application Insights em seu recurso do Serviço de Aplicativo

Confirme se a instrumentação automática está habilitada no painel do Application Insights em seu Recurso do Serviço de Aplicativo:

Captura de tela da guia Application Insights com a opção Habilitar selecionada.

Etapa 2: confirmar se as Configurações do Aplicativo estão corretas

Confirme se a configuração do aplicativo ApplicationInsightsAgent_EXTENSION_VERSION está definida como um valor de ~3 e se APPLICATIONINSIGHTS_CONNECTION_STRING aponta para o recurso apropriado do Application Insights.

Captura de tela das Configurações de Aplicativo do Serviço de Aplicativo com configurações do Application Insights disponíveis.

Etapa 3: verificar o diagnóstico da instrumentação automática e os logs de status

Navegue até /var/log/applicationinsights/ e abra status_*.json.

Confirme se AgentInitializedSuccessfully está definido como true e se IKey tem um iKey válido.

Aqui está um exemplo de arquivo JSON:

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

O arquivo applicationinsights-extension.log na mesma pasta pode mostrar outros diagnósticos úteis.

Aplicativos do Django

Se o aplicativo usa o Django e não está conseguindo iniciar ou está usando configurações incorretas, defina a variável de ambiente DJANGO_SETTINGS_MODULE. Consulte a seção Instrumentação Django para obter detalhes.


Testar a conectividade entre o host do aplicativo e o serviço de ingestão

Os SDKs e agentes do Application Insights enviam telemetria para serem ingeridos como chamadas REST para nossos pontos de extremidade de ingestão. Você pode testar a conectividade do servidor Web ou do computador host do aplicativo para os pontos de extremidade do serviço de ingestão usando clientes REST brutos do PowerShell ou comandos curl. Confira Solucionar problemas de telemetria de aplicativo ausente no Application Insights do Azure Monitor.

Para obter as atualizações e as correções de bugs mais recentes, confira as notas sobre a versão. -->

Próximas etapas