Monitoramento de aplicativos para o Serviço de Aplicativo do Azure e ASP.NET

Habilitar o monitoramento em seus aplicativos Web baseados em ASP.NET em execução no Serviço de Aplicativo do Azure agora é mais fácil do que nunca. Anteriormente, você precisava instrumentar manualmente seu aplicativo. Agora, a extensão/o agente mais recente estão embutidos na imagem do Serviço de Aplicativo por padrão. Este artigo vai orientar você pela habilitação do monitoramento de Application Insights do Azure Monitor e pelo fornecimento de diretrizes preliminares para automatizar o processo para implantações em grande escala.

Observação

A adição manual de uma extensão de site Application insights por meio de extensões de ferramentas de desenvolvimento>foipreterida. Esse método de instalação de extensão era dependente de atualizações manuais para cada nova versão. A versão estável mais recente da extensão agora é pré-instalada como parte da imagem do serviço de aplicativo. Os arquivos estão localizados em d:\Program Files (x86)\SiteExtensions\ApplicationInsightsAgent e são atualizados automaticamente com cada versão estável. Se você seguir as instruções de instrumentação automática para ativar o monitoramento, ela removerá automaticamente a extensão preterida para você.

Se o monitoramento de instrumentação automática e a instrumentação baseada em SDK manual forem detectados, somente as configurações de instrumentação manual serão respeitadas. Essa disposição impede que dados duplicados sejam enviados. Para saber mais, confira a seção Solução de problemas.

Observação

Em 31 de março de 31, 2025, o suporte à ingestão de chave de instrumentação será encerrado. A ingestão de chave de instrumentação continuará funcionando, mas não forneceremos mais atualizações ou suporte para o recurso. Faça a transição para cadeias de conexão para aproveitar as novas funcionalidades.

Habilitar o monitoramento de instrumentação automática

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

Observação

Não há suporte à combinação de APPINSIGHTS_JAVASCRIPT_ENABLED e urlCompression. Para mais informações, consulte a explicação na seção solução de problemas.

  1. Selecione o Application Insights no painel de controle do Azure para seu serviço de aplicativo. Em seguida, selecione Habilitar.

     Captura de tela que mostra a guia Application Insights com Habilitar selecionado.

  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 selecionar Aplicar configurações de monitoramento. A opção Continuar vincula seu novo recurso do Application Insights ao serviço de aplicativo. Isso também dispara uma reinicialização do serviço de aplicativo.

    Captura de tela que mostra a lista suspensa Alterar seu recurso.

  3. Depois de especificar qual recurso usar, você poderá escolher como deseja que o Application Insights colete dados por plataforma para seu aplicativo. O monitoramento de aplicativos ASP.NET é ativado por padrão com dois níveis diferentes de coleção.

    Captura de tela que mostra a página de extensões de site do Application Insights com Criar novo recurso selecionado.

    A tabela a seguir resume os dados coletados para cada rota.

    Dados Coleção ASP.NET básica Coleção ASP.NET recomendada
    Adiciona as tendências de uso de CPU, memória e E/S Não Sim
    Coleta as tendências de uso e permite a correlação entre resultados de disponibilidade e transações Sim Sim
    Coleta as exceções não tratadas pelo processo de host Sim Sim
    Aumenta a precisão de métricas de APM com carga quando a amostragem é usada Sim Sim
    Correlaciona microsserviços entre limites de solicitação/dependência Não (somente recursos APM de instância única) Sim
  4. Para definir configurações de amostragem, que antes você podia controlar por meio do arquivo applicationinsights.config, agora é possível usar as configurações de aplicativo com o prefixo MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor correspondente.

    • Por exemplo, para alterar a porcentagem de amostragem inicial, crie uma configuração de aplicativo de: MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_InitialSamplingPercentage e um valor de 100.

    • Para desabilitar a amostragem, defina MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_MinSamplingPercentage como um valor de 100.

    • As configurações compatíveis incluem:

      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_InitialSamplingPercentage
      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_MinSamplingPercentage
      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_EvaluationInterval
      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_MaxTelemetryItemsPerSecond
    • Para ver a lista de configurações e definições de processador de telemetria de amostragem adaptável com suporte, consulte o código e a documentação de amostragem.

Habilitar monitoramento do lado do cliente

O monitoramento no lado do cliente é um opcional para ASP.NET. Habilitar monitoramento do lado do cliente:

  1. Selecione Configurações>Configuração.

  2. Em Configurações do aplicativo, crie uma nova configuração de aplicativo:

    • Nome: insira APPINSIGHTS_JAVASCRIPT_ENABLED.
    • Valor: insira true.
  3. Salve as configurações e reinicie seu aplicativo.

Para desabilitar o monitoramento do lado do cliente, remova o par de valor de chave associado das Configurações do aplicativo ou defina o valor como false.

Automatizar monitoramento

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

Captura de tela que mostra as Configurações de aplicativo do Serviço de Aplicativo com configurações do Application Insights.

Definições de configurações do aplicativo

Nome da configuração do aplicativo Definição Valor
ApplicationInsightsAgent_EXTENSION_VERSION Extensão principal, que controla o monitoramento do tempo de execução. ~2
XDT_MicrosoftApplicationInsights_Mode No modo padrão, somente os recursos essenciais são habilitados para garantir um desempenho ideal. default ou recommended
InstrumentationEngine_EXTENSION_VERSION Controla se o mecanismo de regravação binária InstrumentationEngine será ativado. Essa configuração tem implicações de desempenho e afeta o tempo de início/inicialização frio. ~1
XDT_MicrosoftApplicationInsights_BaseExtensions Controla se o SQL e o texto da tabela do Azure será capturado junto com as chamadas de dependência. Aviso de desempenho: o tempo de inicialização a frio do aplicativo será afetado. Essa configuração requer o InstrumentationEngine. ~1

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

Atualizar agente/extensão de monitoramento: .NET

Atualização das versões 2.8.9 e superiores

A atualização da versão 2.8.9 ocorre automaticamente, sem nenhuma ação adicional. Os novos bits de monitoramento são entregues em segundo plano ao serviço de aplicativo de destino. Eles serão escolhidos quando o aplicativo for reiniciado.

Para verificar qual versão da extensão você está executando, acesse https://yoursitename.scm.azurewebsites.net/ApplicationInsights.

Captura de tela que mostra o caminho URL para verificar a versão da extensão que você está executando.

Atualização das versões 1.0.0-2.6.5

A partir da versão 2.8.9, a extensão de site pré-instalada é usada. Se você estiver em uma versão anterior, faça a atualização seguindo um destes métodos:

  • Atualizar por meio da habilitação no portal: mesmo se você tiver a extensão do Application Insights para Serviço de Aplicativo instalada. A interface do usuário mostra apenas o botão Habilitar. Nos bastidores, a extensão de site particular antigo será removida.

  • Atualizar usando o PowerShell:

    1. Defina as configurações do aplicativo para habilitar a extensão de site ApplicationInsightsAgent pré-instalada. Para obter mais informações, confira Habilitar por meio do PowerShell.
    2. Remova manualmente a extensão de site particular chamada extensão do Application Insights para Serviço de Aplicativo.

Se a atualização for feita a partir de uma versão anterior à 2.5.1, verifique se as DLLs do Application Insights foram removidas da pasta bin do aplicativo. Para obter mais informações, confira as etapas na seção de Solução de problemas.

Solução de problemas

Observação

Quando você cria um aplicativo Web com os tempos de execução do ASP.NET no Serviço de Aplicativo, ele implanta uma única página HTML estática como um site inicial. Não recomendamos que você solucione um problema com um modelo padrão. Implante um aplicativo antes de solucionar um problema.

Aqui está a guia de solução de problemas passo a passo do monitoramento baseado em extensão/agente para aplicativos baseados em ASP.NET em execução no Serviço de Aplicativo.

  1. Verifique se a configuração do aplicativo ApplicationInsightsAgent_EXTENSION_VERSION está definida em um valor de ~2.

  2. Navegue até https://yoursitename.scm.azurewebsites.net/ApplicationInsights.

    Captura de tela que mostra a página de resultados do link anterior.

    • Confirme se Application Insights Extension Status é Pre-Installed Site Extension, version 2.8.x.xxxx e está em execução.

      Se não estiver em execução, siga as instruções para habilitar o monitoramento do Application Insights.

    • Confirme se a origem do status existe e se parece com Status source D:\home\LogFiles\ApplicationInsights\status\status_RD0003FF0317B6_4248_1.json.

      Se um valor semelhante não estiver presente, significa que o aplicativo não está em execução no momento ou não tem suporte. Para garantir que o aplicativo esteja em execução, tente visitar manualmente os pontos de extremidade do aplicativo/URL do aplicativo, o que permitirá que as informações de tempo de execução fiquem disponíveis.

    • Confirme se IKeyExists está true. Caso contrário, adicione APPINSIGHTS_INSTRUMENTATIONKEY e APPLICATIONINSIGHTS_CONNECTION_STRING com o GUID da chave de instrumentação às configurações do aplicativo.

    • Confirme se não há entradas para AppAlreadyInstrumented, AppContainsDiagnosticSourceAssembly e AppContainsAspNetTelemetryCorrelationAssembly.

      Se qualquer uma dessas entradas existir, remova os seguintes pacotes do seu aplicativo: Microsoft.ApplicationInsights, System.Diagnostics.DiagnosticSource e Microsoft.AspNet.TelemetryCorrelation.

O site padrão implantado com aplicativos Web não dá suporte ao monitoramento automático do lado do cliente

Quando você cria um aplicativo Web com os tempos de execução do ASP.NET no Serviço de Aplicativo, ele implanta uma única página HTML estática como um site inicial. A página da Web estática também carrega um site ASP.NET gerenciado no IIS. Esta página permite testar o monitoramento do lado do servidor sem código, mas não dá suporte ao monitoramento automático do lado do cliente.

Se você quiser testar o servidor sem código e o monitoramento do lado do cliente para ASP.NET em um aplicativo Web do Serviço de Aplicativo, recomendamos seguir os guias oficiais para criar um aplicativo Web do ASP.NET Framework. Em seguida, use as instruções no artigo atual para habilitar o monitoramento.

Não há suporte para APPINSIGHTS_JAVASCRIPT_ENABLED e urlCompression

Se você usar APPINSIGHTS_JAVASCRIPT_ENABLED=true nos casos em que o conteúdo é codificado, poderá obter erros como:

  • Erro de regravação de URL 500.
  • Erro 500.53 de módulo de regravação de URL com a mensagem: "As regras de regravação de saída não podem ser aplicadas quando o conteúdo da resposta HTTP está codificado (' gzip ')."

Ocorre um erro porque a configuração do APPINSIGHTS_JAVASCRIPT_ENABLED aplicativo está definida como true e a codificação de conteúdo está presente ao mesmo tempo. Ainda não há suporte para esse cenário. A solução alternativa é remover APPINSIGHTS_JAVASCRIPT_ENABLED as configurações do aplicativo. Infelizmente, se a instrumentação de JavaScript do lado do cliente/navegador ainda for necessária, as referências manuais do SDK serão necessárias para suas páginas da Web. Siga as instruções para realizar a instrumentação manual com o SDK do JavaScript.

Para as informações mais recentes sobre a extensão/agente de Application Insights, confira as notas de versão.

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.

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.

Não há suporte para PHP, nem para WordPress

Não há suporte para sites em PHP e WordPress. Atualmente, não há um SDK/agente com suporte oficial para o monitoramento do lado do servidor dessas cargas de trabalho. Instrumente manualmente as transações do lado do cliente em um site PHP ou WordPress com a adição de JavaScript do lado do cliente às suas páginas da Web usando o SDK do JavaScript.

A tabela a seguir fornece uma explicação mais detalhada do que esses valores significam, suas causas subjacentes e correções recomendadas.

Valor do problema Explicação Fix
AppAlreadyInstrumented:true Esse valor indica que a extensão detectou que algum aspecto do SDK já está presente no aplicativo e será retirada. Pode ser devido a uma referência a System.Diagnostics.DiagnosticSource, Microsoft.AspNet.TelemetryCorrelation ou Microsoft.ApplicationInsights. Remova as referências. Algumas dessas referências são adicionadas por padrão de determinados modelos do Visual Studio. Versões mais antigas do Visual Studio podem adicionar referências a Microsoft.ApplicationInsights.
AppAlreadyInstrumented:true Esse valor também pode ser causado pela presença das DLLs anteriores na pasta do aplicativo de uma implantação anterior. Limpe a pasta do aplicativo para garantir que essas DLLs sejam removidas. Verifique o diretório bin do seu aplicativo local e o diretório wwwroot no recurso do Serviço de Aplicativo. Para verificar o diretório wwwroot do aplicativo Web do Serviço de Aplicativo, selecione Ferramentas Avançadas (Kudu)>Console de depuração>CMD>home\site\wwwroot.
AppContainsAspNetTelemetryCorrelationAssembly: true Esse valor indica que a extensão detectou referências a Microsoft.AspNet.TelemetryCorrelation no aplicativo e será retirada. Remova a referência.
AppContainsDiagnosticSourceAssembly**:true Esse valor indica que a extensão detectou referências a System.Diagnostics.DiagnosticSource no aplicativo e será retirada. Para o ASP.NET, remova a referência.
IKeyExists:false Esse valor indica que a chave de instrumentação não está presente na configuração do aplicativo APPINSIGHTS_INSTRUMENTATIONKEY. As causas possíveis podem ser que os valores foram removidos acidentalmente ou você esqueceu de definir os valores no script de automação. Verifique se a configuração está presente nas configurações do aplicativo do serviço de aplicativo.

System.IO.FileNotFoundException após a atualização 2.8.44

A versão 2.8.44 da instrumentação automática atualiza o SDK do Application Insights para o 2.20.0. O SDK do Application Insights tem uma referência indireta a System.Runtime.CompilerServices.Unsafe.dll por meio de System.Diagnostics.DiagnosticSource.dll. Se o aplicativo tiver redirecionamento de associação para System.Runtime.CompilerServices.Unsafe.dll e se essa biblioteca não estiver presente na pasta do aplicativo, ele poderá gerar System.IO.FileNotFoundException.

Para resolver esse problema, remova a entrada do redirecionamento de associação para System.Runtime.CompilerServices.Unsafe.dll do arquivo web.config. Se o aplicativo quiser usar System.Runtime.CompilerServices.Unsafe.dll, defina o redirecionamento de associação, conforme mostrado aqui:

<dependentAssembly>
	<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
	<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
</dependentAssembly>

Como solução temporária, defina a configuração do aplicativo ApplicationInsightsAgent_EXTENSION_VERSION para um valor de 2.8.37. Essa configuração acionará o Serviço de Aplicativo para usar a extensão antiga do Application Insights. Mitigações temporárias só devem ser usadas por períodos breves.

Notas de versão

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

Próximas etapas