Monitoramento de aplicativos para o Serviço de Aplicativo do Azure e Python (Visualização)
Importante
Veja Termos de Utilização Complementares da Pré-visualizações do Microsoft Azure para obter os termos legais que se aplicam às funcionalidades do Azure que estão na versão beta, na pré-visualização ou que ainda não foram lançadas para disponibilidade geral.
Monitore seus aplicativos Web Python nos Serviços de Aplicativo do Azure sem modificar o código. Este guia mostra como habilitar o Azure Monitor Application Insights e oferece dicas para automatizar implantações em grande escala.
Os instrumentos de integração popularizam bibliotecas Python em seu código, permitindo que você reúna e correlacione automaticamente dependências, logs e métricas. Após a instrumentação, você coleta chamadas e métricas destas bibliotecas Python:
Instrumentação | Nome da biblioteca suportada | Versões suportadas |
---|---|---|
OpenTelemetry Django Instrumentação | django |
ligação |
Instrumentação OpenTelemetry FastApi | fastapi |
ligação |
Instrumentação OpenTelemetry Flask | flask |
ligação |
OpenTelemetry Psycopg2 Instrumentação | psycopg2 |
ligação |
Instrumentação de solicitações OpenTelemetry | requests |
ligação |
Instrumentação OpenTelemetry UrlLib | urllib |
Todos |
Instrumentação OpenTelemetry UrlLib3 | urllib3 |
ligação |
Nota
Se estiver usando o Django, consulte a seção adicional Instrumentação do Django neste artigo.
A telemetria de registro em log é coletada no nível do registrador raiz. Para saber mais sobre a hierarquia de log nativo do Python, visite a documentação de 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 contêineres personalizados.
Ativar o Application Insights
A maneira mais fácil de monitorar aplicativos Python nos Serviços de Aplicativo 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.
Nota
Você só deve usar a autoinstrumentação no Serviço de Aplicativo se não estiver usando a instrumentação manual de OpenTelemetry em seu código, como a Distro OpenTelemetry do Azure Monitor ou o Exportador de 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.
Autoinstrumentação através do portal do Azure
Para obter uma lista completa dos cenários de autoinstrumentação suportados, consulte Ambientes suportados, idiomas e provedores de recursos.
Ative o monitoramento para seus aplicativos Python no Serviço de Aplicativo do Azure sem a necessidade de alterações de código.
O Application Insights for Python integra-se com o Serviço de Aplicativo do Azure Linux baseado em código.
A integração está em pré-visualização pública. Ele adiciona o Python SDK, que está no GA.
Selecione Application Insights no painel de controle do Azure para seu serviço de aplicativo e selecione Habilitar.
Escolha criar um novo recurso ou selecione um recurso existente do Application Insights para este aplicativo.
Nota
Ao selecionar OK para criar o novo recurso, você será solicitado a Aplicar configurações de monitoramento. Selecionar Continuar vinculará seu novo recurso do Application Insights ao seu serviço de aplicativo, fazendo isso também acionará uma reinicialização do seu serviço de aplicativo.
Você especifica o recurso e ele está pronto para uso.
Configuração
Você pode configurar com variáveis de ambiente OpenTelemetry como:
Variável de ambiente | Descrição |
---|---|
OTEL_SERVICE_NAME , OTEL_RESOURCE_ATTRIBUTES |
Especifica os atributos de recurso OpenTelemetry associados ao seu aplicativo. Você pode definir quaisquer Atributos de Recursos com OTEL_RESOURCE_ATTRIBUTES ou usar OTEL_SERVICE_NAME para definir apenas o service.name . |
OTEL_LOGS_EXPORTER |
Se definido como None , desativa a coleta e a exportação da telemetria de registro. |
OTEL_METRICS_EXPORTER |
Se definido como None , desativa a coleta e a exportação de telemetria métrica. |
OTEL_TRACES_EXPORTER |
Se definido como None , desativa a coleta e a exportação da telemetria de rastreamento distribuído. |
OTEL_BLRP_SCHEDULE_DELAY |
Especifica o intervalo de exportação de log em milissegundos. O padrão é 5000. |
OTEL_BSP_SCHEDULE_DELAY |
Especifica o intervalo de exportação de rastreamento distribuído em milissegundos. O padrão é 5000. |
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS |
Especifica quais instrumentações OpenTelemetry devem ser desabilitadas. Quando desativada, as instrumentações não são executadas como parte da autoinstrumentação. Aceita uma lista separada por vírgulas de nomes de bibliotecas minúsculas. Por exemplo, defina-o para "psycopg2,fastapi" desativar as instrumentações Psycopg2 e FastAPI. O padrão é uma lista vazia, habilitando todas as instrumentações suportadas. |
Adicionar uma biblioteca de instrumentação da comunidade
Você pode coletar mais dados automaticamente ao incluir bibliotecas de instrumentação da comunidade OpenTelemetry .
Atenção
Não apoiamos nem garantimos a qualidade das bibliotecas de instrumentação comunitárias. Para sugerir um para a nossa distro, publique ou vote na nossa comunidade de feedback. Esteja ciente, alguns são baseados em especificações experimentais OpenTelemetry e podem introduzir futuras mudanças de rutura.
Para adicionar a biblioteca de instrumentação OpenTelemetry da comunidade, instale-a através do ficheiro da requirements.txt
sua aplicação. A autoinstrumentação OpenTelemetry capta e instrumenta automaticamente todas as bibliotecas instaladas. Encontre a lista de bibliotecas comunitárias aqui.
Automatize o monitoramento
Para habilitar a coleta de telemetria com o Application Insights, apenas as seguintes configurações do aplicativo precisam ser definidas:
Definições de configurações do aplicativo
Nome de definição de aplicação | Definição | Value |
---|---|---|
APPLICATIONINSIGHTS_CONNECTION_STRING | Cadeia de conexões para 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 |
Nota
O criador de perfis e o depurador de instantâneos não estão disponíveis para aplicativos Python
Configurações do aplicativo do Serviço de Aplicativo com o Azure Resource Manager
As configurações de aplicativo para o Serviço de Aplicativo do Azure podem ser gerenciadas e configuradas com modelos do Azure Resource Manager. Você pode usar esse método ao implantar novos recursos do Serviço de Aplicativo com a automação do Gerenciador de Recursos ou modificar as configurações dos recursos existentes.
A estrutura básica do JSON de configurações do aplicativo 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 obter um exemplo de um modelo do Gerenciador de Recursos com configurações de aplicativo definidas para o Application Insights, esse modelo pode ser útil. Especificamente, consulte a seção que começa na linha 238.
Automatize a criação de um recurso do Application Insights e vincule-o ao recurso do Serviço de Aplicativo recém-criado
Para criar um modelo do Gerenciador de Recursos com as configurações padrão do Application Insights, inicie o processo como se fosse criar um novo aplicativo Web com o Application Insights habilitado.
Crie um novo recurso do Serviço de Aplicativo com as informações do aplicativo Web desejado. Habilite o Application Insights na guia Monitoramento .
Selecione Rever + criar. Em seguida, selecione Baixar um modelo para automação.
Esta opção gera o modelo mais recente do Resource Manager com todas as configurações necessárias configuradas.
No exemplo a seguir, substitua todas as instâncias de pelo nome do AppMonitoredSite
site:
Nota
Se estiver usando o Windows, defina ApplicationInsightsAgent_EXTENSION_VERSION
como ~2
. Se estiver usando 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"
}
Habilitar por meio do PowerShell
Para habilitar o monitoramento de aplicativos por meio do PowerShell, somente as configurações subjacentes do aplicativo devem ser alteradas. O exemplo a seguir habilita o monitoramento de aplicativos para um site chamado AppMonitoredSite
no grupo AppMonitoredRG
de recursos . Ele configura os dados a serem enviados para a 012345678-abcd-ef01-2345-6789abcd
chave de instrumentação.
Nota
Recomendamos que utilize o módulo Azure Az do PowerShell para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.
Nota
Se estiver usando o Windows, defina ApplicationInsightsAgent_EXTENSION_VERSION como ~2
. Se estiver usando 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
Django Instrumentação
Para usar a Instrumentação OpenTelemetry Django, você precisa definir a DJANGO_SETTINGS_MODULE
variável de ambiente 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, consulte a documentação do Django.
Perguntas mais frequentes
Qual é a diferença entre as métricas padrão do Application Insights e as métricas do Serviço de Aplicativo do Azure?
O Application Insights coleta telemetria para as solicitações que chegaram ao aplicativo. Se a falha ocorrer em WebApps/WebServer e a solicitação não chegar ao aplicativo do usuário, o Application Insights não terá nenhuma telemetria sobre isso.
A duração calculada serverresponsetime
pelo Application Insights não corresponde 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 de aplicativos Web, mas não nas métricas do Application Insights.
Resolução de Problemas
Aqui fornecemos nosso guia de solução de problemas para monitorar aplicativos Python nos Serviços de Aplicativo do Azure usando autoinstrumentação.
Telemetria duplicada
Você só deve usar a autoinstrumentação no Serviço de Aplicativo se não estiver usando a instrumentação manual de OpenTelemetry em seu código, como a Distro OpenTelemetry do Azure Monitor ou o Exportador de OpenTelemetry do Azure Monitor. Usar a autoinstrumentação sobre a instrumentação manual pode causar telemetria duplicada e aumentar seu custo. Para usar a autoinstrumentação OpenTelemetry do Serviço de Aplicativo, primeiro remova a instrumentação manual do OpenTelemetry do seu código.
Telemetria em falta
Se a telemetria estiver faltando, siga estas etapas para confirmar se a autoinstrumentação está ativada corretamente.
Etapa 1: verificar a folha Application Insights no recurso do Serviço de Aplicativo
Confirme se a autoinstrumentação está habilitada na folha Application Insights no seu Recurso do Serviço de Aplicativo:
Etapa 2: confirme se as configurações do aplicativo estão corretas
Confirme se a configuração do ApplicationInsightsAgent_EXTENSION_VERSION
aplicativo está definida como um valor de ~3
e se você APPLICATIONINSIGHTS_CONNECTION_STRING
aponta para o recurso apropriado do Application Insights.
Etapa 3: Verificar o diagnóstico de autoinstrumentação e os logs de status
Navegue até /var/log/applicationinsights/ e abra status_*.json.
Confirme se AgentInitializedSuccessfully
está definido como true e IKey
se 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 applicationinsights-extension.log
arquivo na mesma pasta pode mostrar outros diagnósticos úteis.
Aplicativos Django
Se o seu aplicativo usa o Django e está falhando ao iniciar ou usando configurações incorretas, certifique-se de definir a DJANGO_SETTINGS_MODULE
variável de ambiente. 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
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 seu servidor Web ou máquina host de aplicativo para os pontos de extremidade do serviço de ingestão usando clientes REST brutos do PowerShell ou comandos curl. Consulte Solucionar problemas de telemetria de aplicativo ausente no Azure Monitor Application Insights.
Para obter as últimas atualizações e correções de bugs, consulte as notas de versão. -->
Próximos passos
- Permitir que o diagnóstico do Azure seja enviado para o Application Insights
- Monitore as métricas de integridade do serviço para garantir que seu serviço esteja disponível e responsivo
- Receba notificações de alerta sempre que eventos operacionais acontecerem ou as métricas ultrapassarem um limite
- Visão geral da disponibilidade
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários