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.
Selecione o Application Insights no painel de controle do Azure do seu serviço de aplicativo, seguido de Habilitar.
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.
Especifique o recurso, e ele está pronto para uso.
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:
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.
Automatize a criação de um recurso do Application Insights e vincule ao recurso do Serviço de Aplicativo recém-criado
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.
Crie um novo recurso do Serviço de Aplicativo com as informações desejadas do aplicativo Web. Habilite o Application Insights na guia Monitoramento.
Selecione Examinar + criar. Em seguida, selecione Baixar um modelo para automação.
Essa opção gera o modelo do Resource Manager mais recente com todas as configurações necessárias definidas.
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:
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.
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
- Permita que o diagnóstico do Azure seja enviado ao Application Insights
- Monitore as métricas de integridade do serviço para se certificar de que o serviço esteja disponível e responsivo
- Receba notificações de alerta sempre que ocorrerem eventos operacionais ou métricas ultrapassarem um limite
- Visão geral da disponibilidade