Compartilhar via


Solucionar problemas do Application Insights Profiler para .NET

Este artigo apresenta etapas de solução de problemas e informações para permitir que você use o Application Insights Profiler para .NET.

Você está usando o endpoint apropriado do .NET Profiler?

Atualmente, as únicas regiões que exigem modificações do ponto de extremidade são o Azure Governamental e o Microsoft Azure operado pela 21Vianet.

Configurações de aplicativo Nuvem do governo dos EUA Nuvem da China
ApplicationInsightsProfilerEndpoint https://profiler.monitor.azure.us https://profiler.monitor.azure.cn
ApplicationInsightsEndpoint https://dc.applicationinsights.us https://dc.applicationinsights.azure.cn

Seu aplicativo está em execução na versão certa?

O Criador de Perfil tem suporte em versões do .NET Framework posteriores à 4.6.2.

Se seu aplicativo Web é um aplicativo ASP.NET Core, deve estar executando no runtime do ASP.NET Core com suporte mais recente.

Você está usando o plano de serviço correto do Azure?

No momento, o Profiler para .NET não tem suporte em planos de serviço de aplicativo gratuitos ou compartilhados. Faça upgrade para um dos planos básicos para começar a usar o Profiler.

Observação

Não há suporte para o plano de consumo do Azure Functions. Confira Criação de perfil dinâmico do aplicativo do Azure Functions com o Application Insights.

Você está procurando dados do Profiler .NET no período correto?

Se os dados que você está tentando exibir forem mais antigos do que duas semanas atrás, tente limitar seu filtro de tempo e tente novamente. Rastros são excluídos após sete dias.

Você está ciente da taxa de amostragem e sobrecarga do Profiler do .NET?

O Profiler para .NET é executado aleatoriamente dois minutos por hora em cada máquina virtual que hospeda aplicativos com o Profiler ativado.

Observação

Quando o Application Insights Profiler para .NET está em execução ativa e coletando rastros, ele normalmente adiciona entre 5% a 15% de sobrecarga de CPU e memória ao seu servidor.

Não há nenhum custo adicional para armazenar dados capturados pelo .NET Profiler. Os dados são excluídos automaticamente após 15 dias.

Você pode acessar o gateway?

Verifique se um firewall ou proxies não estão bloqueando seu acesso a esta página da Web.

Você está vendo tempos limite ou precisa verificar se o Profiler .NET está em execução?

Os dados de criação de perfil são carregados somente quando podem ser anexados a uma solicitação que aconteceu enquanto o Profiler estava em execução. O Profiler do .NET coleta dados por dois minutos a cada hora. Você também pode disparar o Profiler iniciando uma sessão de criação de perfil.

O Profiler grava mensagens de rastreamento e eventos personalizados no recurso de Application Insights. Você pode usar esses eventos para ver como o Profiler está sendo executado.

Procure por mensagens de rastreio e eventos personalizados enviados pelo Profiler do .NET para o recurso Application Insights.

  1. Em seu recurso Application Insights, selecione Pesquisar no menu superior.

    Captura de tela da seleção do botão de pesquisa do recurso do Application Insights.

  2. Use a seguinte cadeia de caracteres de pesquisa para encontrar os dados relevantes:

    stopprofiler OR startprofiler OR upload OR ServiceProfilerSample
    

    Captura de tela dos resultados da pesquisa da cadeia de caracteres de pesquisa mencionada anteriormente.

    Os resultados da pesquisa anteriores incluem dois exemplos de pesquisas de dois recursos de IA:

    • Se o aplicativo não estiver recebendo solicitações enquanto o Profiler estiver em execução, a mensagem explicará que o upload foi cancelado devido a nenhuma atividade.

    • O Profiler iniciou e enviou eventos personalizados quando detectou solicitações que ocorreram enquanto o Profiler estava em execução. Se o ServiceProfilerSample evento personalizado for exibido, isso significa que um perfil foi capturado e está disponível na aba Application Insights Performance.

    Se nenhum registro for exibido, o Profiler não esta em execução ou demorou demais para responder. Verifique se o Profiler está habilitado no serviço do Azure.

O Profiler do .NET está ativo, mas nenhum rastro foi capturado

Mesmo quando o Profiler está habilitado, ele pode não capturar nem carregar rastreamentos, especialmente nestas situações:

  1. Nenhuma solicitação de entrada para seu aplicativo:
    Você pode invocar manualmente seu aplicativo ou criar um teste de disponibilidade ou um teste de carga.

  2. Nenhuma telemetria de entrada confirmada pelo Application Insights:

  3. A configuração do Profiler para Amostragem está desativada:
    Se ainda não houver rastreamentos do Profiler disponíveis, verifique a configuração de Amostragem do Profiler.

    1. Abra a folha Application Insights>Desempenho.
    2. Clique no Profiler.
    3. Clique no botão Gatilhos.
    4. Nas Configurações de Gatilho, verifique se o controle de alternância Amostragem está ativado.
  4. Ainda não foram carregados rastreamentos?
    Crie uma solicitação de suporte ou peça suporte à comunidade do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.

Contagem dupla em threads paralelos

Quando dois ou mais threads paralelos estão associados a uma solicitação, a métrica de tempo total no visualizador de pilha pode ser superior à duração da solicitação. Nesse caso, o tempo total de thread é maior que o tempo real decorrido.

Por exemplo, um thread pode estar aguardando até que o outro seja concluído. O visualizador tenta detectar essa situação e omite a espera desinteressante. Ao fazê-lo, ele erra ao exibir muitas informações, em vez de omitir o que poderiam ser informações críticas.

Quando você vir threads paralelos em seus rastreamentos, determine quais threads estão esperando para que você possa identificar o caminho crítico da solicitação. Normalmente, o thread que entra rapidamente em um estado de espera está aguardando os outros threads. Concentre-se nos outros threads e ignore o tempo nos threads de espera.

Solucionar problemas do Profiler do .NET em seu serviço específico do Azure

As seções a seguir orientam você pelas etapas de solução de problemas para usar o Profiler no Serviço de Aplicativo do Azure.

Serviço de Aplicativo do Azure

Para o Profiler do .NET funcionar corretamente, certifique-se de que:

  • Seu aplicativo Web tem o Application Insights habilitado com as configurações corretas.

  • O WebJob ApplicationInsightsProfiler3 está em execução. Para verificar o webjob:

    1. Acesse Kudu. No Portal do Azure:

      1. Em sua instância do Serviço de Aplicativo, selecione Ferramentas Avançadas no painel esquerdo.
      2. Selecione Ir.
    2. No menu superior, selecione o painel Ferramentas>WebJobs. O painel WebJobs é aberto.

      Se o ApplicationInsightsProfiler3 não aparecer, reinicie o aplicativo do Serviço de Aplicativo.

      Captura de tela mostrando o painel WebJobs, que exibe o nome, o status e a hora da última execução dos trabalhos.

    3. Para exibir os detalhes do WebJob, incluindo o log, selecione o link ApplicationInsightsProfiler3. O painel Detalhes do WebJob Contínuo é aberto.

      Captura de tela que mostra o painel Detalhes do WebJob Contínuo.

Se o Profiler do .NET ainda não estiver funcionando, baixe o log e então envie uma solicitação de suporte para o Azure.

Verifique a página de status da extensão de site dos Serviços de Diagnóstico

Se você habilitou o Profiler .NET por meio do painel Application Insights no portal, ele é gerenciado pela extensão de site Serviços de Diagnóstico. Você pode verificar a página de status dessa extensão indo para https://{site-name}.scm.azurewebsites.net/DiagnosticServices

Observação

O domínio do link da página de status varia dependendo da nuvem. Esse domínio é o mesmo que o site de gerenciamento do Kudu para o Serviço de Aplicativo.

A página de status exibe o estado de instalação do .NET Profiler e dos agentes do Depurador de Snapshot. Se houve um erro inesperado, ele aparece junto com as etapas sobre como corrigi-lo.

Você pode usar o site de gerenciamento do Kudu para o Serviço de Aplicativo para obter a URL base desta página de status:

  1. Abra seu aplicativo de Serviço de Aplicativo no portal do Azure.
  2. Selecione Ferramentas Avançadas.
  3. Selecione Ir.
  4. No site de gerenciamento do Kudu:
    1. Acrescente /DiagnosticServices à URL.
    2. Selecione Enter.

Termina como https://<kudu-url>/DiagnosticServices.

Uma página de status aparece de forma semelhante ao exemplo a seguir.

Captura de tela que mostra a página de status dos Serviços de Diagnóstico.

Observação

A instalação sem código do Application Insights Profiler do .NET segue a política de suporte do .NET Core. Para obter mais informações sobre tempos de execução com suporte, confira a política de suporte do .NET Core.

Instalação manual

Quando você configura o profiler do .NET, são feitas atualizações nas configurações do aplicativo Web. Se necessário, você pode aplicar as atualizações manualmente.

Número excessivo de sessões ativas de perfilamento

No Serviço de Aplicativo do Azure, há um limite de apenas uma sessão de criação de perfil por vez. Esse limite é imposto no nível da VM em todos os aplicativos e slots de implantação em execução em um plano do Serviço de Aplicativo. Igualmente, esse limite se aplica às sessões de criação de perfil iniciadas por meio do Diagnóstico e solução de problemas, Kudu e Application Insights Profiler para .NET.

Se o Profiler do .NET tentar iniciar uma sessão quando outra já estiver em execução, um erro será registrado no log de aplicativos e também no log contínuo do WebJob para ApplicationInsightsProfiler3.

Você deve ver uma das seguintes mensagens nos logs:

  • Microsoft.ServiceProfiler.Exceptions.TooManyETWSessionException
  • Error: StartProfiler failed. Details: System.Runtime.InteropServices.COMException (0xE111005E): Exception from HRESULT: 0xE111005E

O código de erro 0xE111005E indica que uma sessão de criação de perfil não pôde ser iniciada porque outra sessão já está em execução.

Para evitar o erro, mova alguns aplicativos Web para um plano do Serviço de Aplicativo diferente ou desabilite o Profiler em alguns aplicativos. Se você usar slots de implantação, verifique se interrompeu os slots não utilizados.

Erro de implantação: diretório não vazio 'D:\home\site\wwwroot\App_Data\jobs'

Se estiver reimplementando seu aplicativo Web em um recurso de Aplicativos Web com o Profiler .NET habilitado, você poderá ver a seguinte mensagem:

"Diretório não vazio "D:\home\site\wwwroot\App_Data\jobs"

Este erro ocorre se você executar o Web Deploy a partir de scripts ou do Azure Pipelines. Resolva isso adicionando os seguintes parâmetros de implantação à tarefa de Implantação da Web:

-skip:Directory='.*\\App_Data\\jobs\\continuous\\ApplicationInsightsProfiler.*' -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data\\jobs\\continuous$' -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data\\jobs$'  -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data$'

Esses parâmetros excluem a pasta usada pelo Application Insights Profiler para .NET e desbloqueiam o processo de reimplantação. Eles não afetam a instância do Profiler em execução no momento.

O Application Insights Profiler para .NET está em execução?

O Profiler é executado como um WebJob contínuo no aplicativo Web. É possível abrir o recurso do aplicativo Web no Portal do Azure. No painel WebJobs, verifique o status de ApplicationInsightsProfiler. Se ele não estiver em execução, abra Logs para obter mais informações.

Máquinas virtuais

Para ver se o Profiler do .NET está configurado corretamente pelo serviço de Diagnóstico do Azure:

  1. Verifique se o conteúdo da configuração de Diagnóstico do Azure implantada é o que você espera.

  2. Verifique se o Diagnóstico do Azure passa o iKey pri.maiúscula na linha de comando do Profiler.

  3. Terceiro, verifique o arquivo de log do Profiler para ver se o Profiler do .NET foi executado, mas retornou um erro.

Para verificar as configurações que foram usadas para configurar o Diagnóstico do Azure:

  1. Entrar na VM (máquina virtual).

  2. Abra o arquivo de log neste local. A versão do plug-in pode ser mais nova no seu computador.

    c:\WindowsAzure\logs\Plugins\Microsoft.Azure.Diagnostics.PaaSDiagnostics\1.11.3.12\DiagnosticsPlugin.log
    
  3. No arquivo, pesquise pela cadeia de caracteres WadCfg para encontrar as configurações que foram passadas para a VM para configurar o Diagnóstico do Azure.

  4. Verifique se o iKey usado pelo coletor do Profiler .NET está correto.

  5. Verificar a linha de comando que inicia o Profiler. Os argumentos de linha de comando estão no arquivo a seguir (a unidade pode ser c: ou d: e o diretório pode estar oculto):

    C:\ProgramData\ApplicationInsightsProfiler\config.json
    
  6. Verifique se o iKey na linha de comando do Profiler está correto.

  7. Usando o caminho encontrado no arquivo config.json anterior, verifique o arquivo de log do criador de perfil, chamado BootstrapN.log. Ele exibe:

    • As informações de depuração que indicam as configurações que o Profiler está usando.
    • Mensagens de status e erro do Profiler.

    Você pode encontrar o arquivo:

    C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\1.17.0.6\ApplicationInsightsProfiler
    
  8. Se o Profiler do .NET estiver em execução enquanto o aplicativo estiver recebendo solicitações, a seguinte mensagem aparece: “Atividade detectada no iKey”.

  9. Quando o rastreamento está sendo carregado, a seguinte mensagem aparece: "Iniciar para carregar o rastreamento".

Editar regras de firewall ou proxy de rede

Se o seu aplicativo se conecta à Internet por meio de um proxy ou firewall, pode ser necessário atualizar as regras para se comunicar com o Profiler do .NET.

Os IPs usados pelo Application Insights Profiler para .NET são incluídos na marca de serviço do Azure Monitor. Para saber mais, confira Documentação de marcas de serviço.

Solucionar problemas de "traga seu próprio armazenamento" (BYOS)

Solucionar problemas comuns ao configurar o BYOS.

Cenário: Template schema '{schema_uri}' isn't supported

Você recebeu um erro semelhante ao exemplo a seguir:

New-AzResourceGroupDeployment : 11:53:49 AM - Error: Code=InvalidTemplate; Message=Deployment template validation failed: 'Template schema
'https://schema.management.azure.com/schemas/2020-01-01/deploymentTemplate.json#' is not supported. Supported versions are
'2014-04-01-preview,2015-01-01,2018-05-01,2019-04-01,2019-08-01'. Please see https://aka.ms/arm-template for usage details.'.

Soluções

  • Verifique se a propriedade $schema do modelo é válida. Ele deve seguir esse padrão:

    https://schema.management.azure.com/schemas/{schema_version}/deploymentTemplate.json#
    
  • Verifique se o schema_version do modelo está dentro dos valores válidos: 2014-04-01-preview, 2015-01-01, 2018-05-01, 2019-04-01, 2019-08-01.

Cenário: No registered resource provider found for location '{location}'

Você recebeu um erro semelhante ao exemplo a seguir:

New-AzResourceGroupDeployment : 6:18:03 PM - Resource microsoft.insights/components 'byos-test-westus2-ai' failed with message '{
  "error": {
    "code": "NoRegisteredProviderFound",
    "message": "No registered resource provider found for location 'westus2' and API version '2020-03-01-preview' for type 'components'. The supported api-versions are '2014-04-01,
2014-08-01, 2014-12-01-preview, 2015-05-01, 2018-05-01-preview'. The supported locations are ', eastus, southcentralus, northeurope, westeurope, southeastasia, westus2, uksouth,
canadacentral, centralindia, japaneast, australiaeast, koreacentral, francecentral, centralus, eastus2, eastasia, westus, southafricanorth, northcentralus, brazilsouth, switzerlandnorth,
australiasoutheast'."
  }
}'

Soluções

  • Verifique se o apiVersion do recurso microsoft.insights/components é 2015-05-01.
  • Verifique se o apiVersion do recurso linkedStorageAccount é 2020-03-01-preview.

Cenário: Storage account location should match Application Insights component location

Você recebeu um erro semelhante ao exemplo a seguir:

New-AzResourceGroupDeployment : 1:01:12 PM - Resource microsoft.insights/components/linkedStorageAccounts 'byos-test-centralus-ai/serviceprofiler' failed with message '{
  "error": {
    "code": "BadRequest",
    "message": "Storage account location should match AI component location",
    "innererror": {
      "trace": [
        "System.ArgumentException"
      ]
    }
  }
}'

Solução

A localização do recurso do Application Insights deve ser a mesma que a da conta de armazenamento.

Suporte

Se você ainda precisar de ajuda, envie um tíquete de suporte clicando no ícone de ponto de interrogação no portal do Azure. Inclua a ID de correlação da mensagem de erro.