Acompanhamento de dependências no Application Insights

Observação

A documentação a seguir depende da API clássica do Application Insights. O plano de longo prazo do Application Insights é coletar dados usando o OpenTelemetry. Para obter mais informações, consulte Habilitar o OpenTelemetry do Azure Monitor para aplicativos .NET, Node.js, Python e Java e nosso Roteiro do OpenTelemetry. As diretrizes de migração estão disponíveis para .NET, Node.js e Python.

Uma dependência é um componente chamado pelo seu aplicativo. Normalmente, ele é um serviço chamado usando HTTP, um banco de dados ou um sistema de arquivos. O Application Insights mede a duração das chamadas de dependência, independentemente de ocorrer falha ou não, juntamente com informações, como o nome da dependência. Você pode investigar chamadas de dependência específicas e correlacioná-las a solicitações e exceções.

Dependências acompanhadas automaticamente

Os SDKs do Application Insights para .NET e .NET Core enviados com DependencyTrackingTelemetryModule, que é um módulo de telemetria que coleta dependências automaticamente. Essa coleção de dependências é habilitada automaticamente para aplicativos do ASP.NET e ASP.NET Core quando ela é configurada de acordo com os documentos oficiais vinculados. O módulo DependencyTrackingTelemetryModule é enviado como o pacote NuGet Microsoft.ApplicationInsights.DependencyCollector. Ele é trazido automaticamente quando você usa o pacote NuGet Microsoft.ApplicationInsights.Web ou o pacote NuGet Microsoft.ApplicationInsights.AspNetCore.

No momento, DependencyTrackingTelemetryModule acompanha as seguintes dependências automaticamente:

Dependências Detalhes
HTTP/HTTPS Chamadas HTTP/HTTPS locais ou remotas.
Chamadas WCF Somente acompanhadas automaticamente se associações baseadas em HTTP forem usadas.
SQL Chamadas feitas com SqlClient. Consulte a seção Acompanhamento avançado do SQL para obter a consulta SQL completa para capturar consultas do SQL.
Armazenamento de Blobs do Azure, Armazenamento de Tabelas ou Armazenamento de Filas Chamadas feitas com o cliente do Armazenamento do Microsoft Azure.
SDK do cliente dos Hubs de Eventos do Azure Use o pacote mais recente: https://nuget.org/packages/Azure.Messaging.EventHubs.
SDK do cliente do Barramento de Serviço do Azure Use o pacote mais recente: https://nuget.org/packages/Azure.Messaging.ServiceBus.
Azure Cosmos DB Acompanhado automaticamente se HTTP/HTTPS é usado. O rastreamento de operações em modo direto com TCP também será capturado automaticamente usando o pacote de versão prévia >= 3.33.0-preview. Para obter mais detalhes, acesse a documentação.

Se estiver faltando uma dependência ou você estiver usando um SDK diferente, verifique se ele está na lista de dependências coletadas automaticamente. Se a dependência não for coletada automaticamente, você poderá acompanhá-la manualmente com um comando acompanhar chamada de dependência.

Configurar o acompanhamento automático de dependência em aplicativos de console

Para acompanhar automaticamente as dependências de aplicativos de console do .NET, instale o pacote NuGet Microsoft.ApplicationInsights.DependencyCollector e inicialize DependencyTrackingTelemetryModule:

    DependencyTrackingTelemetryModule depModule = new DependencyTrackingTelemetryModule();
    depModule.Initialize(TelemetryConfiguration.Active);

TelemetryConfiguration.Active está obsoleto para aplicativos de console do .NET Core. Consulte as diretrizes na Documentação do serviço de trabalho e na Documentação de monitoramento do ASP.NET Core.

Como funciona o monitoramento automático de dependência?

As dependências são coletadas automaticamente usando uma das seguintes técnicas:

  • Usando a instrumentação de código de byte em volta dos métodos select. Use InstrumentationEngine de StatusMonitor ou uma extensão de Aplicativos Web do Serviço de Aplicativo do Azure.
  • EventSource retornos de chamada.
  • DiagnosticSource retornos de chamada nos SDKs mais recentes do .NET ou do .NET Core.

Como acompanhar dependências manualmente

Veja a seguir exemplos de dependências que não são coletadas automaticamente e exigem acompanhamento manual:

  • O Azure Cosmos DB é acompanhado automaticamente somente se HTTP/HTTPS é usado. O modo TCP não será capturado automaticamente pelo Application Insights para versões do SDK anteriores a 2.22.0-Beta1.
  • Redis

Para essas dependências não coletadas automaticamente pelo SDK, você pode acompanhá-las manualmente usando a API TrackDependency que é usada pelos módulos de coleção automática padrão.

Exemplo

Se você criar seu código com um assembly que não programou, você pode cronometrar todas as chamadas para ele. Esse cenário permitiria que você descobrisse qual a contribuição dele para o seu tempo de resposta.

Para que esses dados sejam exibidos nos gráficos de dependência no Application Insights, envie-os usando TrackDependency:


    var startTime = DateTime.UtcNow;
    var timer = System.Diagnostics.Stopwatch.StartNew();
    try
    {
        // making dependency call
        success = dependency.Call();
    }
    finally
    {
        timer.Stop();
        telemetryClient.TrackDependency("myDependencyType", "myDependencyCall", "myDependencyData",  startTime, timer.Elapsed, success);
    }

Como alternativa, TelemetryClient fornece os métodos de extensão StartOperation e StopOperation, que podem ser usados para acompanhar manualmente as dependências, conforme mostrado em Rastreamento de dependências de saída.

Se desejar desativar o módulo padrão de acompanhamento de dependência, remova a referência DependencyTrackingTelemetryModule em ApplicationInsights.config para aplicativos ASP.NET. Para aplicativos ASP.NET Core, siga as instruções no Application Insights para aplicativos ASP.NET Core.

Acompanhar chamadas AJAX de páginas da Web

Para páginas da Web, o SDK JavaScript do Application Insights coleta automaticamente chamadas AJAX como dependências.

Acompanhamento de SQL avançado para obter a consulta SQL completa

Observação

O Azure Functions requer configurações separadas para habilitar a coleta de texto do SQL. Para obter mais informações, confira Habilitar a coleta de consultas SQL.

Para chamadas SQL, o nome do servidor e do banco de dados é sempre coletado e armazenado como o nome do DependencyTelemetry coletado. Outro campo, chamado dados, pode conter o texto completo da consulta SQL.

Para aplicativos ASP.NET Core, agora é necessário aceitar a coleta de texto SQL usando:

services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, o) => { module. EnableSqlCommandTextInstrumentation = true; });

Para aplicativos ASP.NET, o texto completo da consulta SQL é coletado com a ajuda da instrumentação de código de byte, que requer o uso do mecanismo de instrumentação ou do pacote NuGet Microsoft.Data.SqlClient em vez da biblioteca System.Data.SqlClient. As etapas específicas da plataforma para habilitar a coleta completa da consulta SQL são descritas na tabela a seguir.

Plataforma Etapas necessárias para obter a consulta SQL completa
Aplicativos Web no Serviço de Aplicativo do Azure No painel de controle do aplicativo Web, abra o painel do Application Insights e habilite os Comandos SQL no .NET.
Servidor IIS (Máquinas Virtuais do Azure, local e assim por diante) Use o pacote NuGet Microsoft.Data.SqlClient ou o módulo Monitor do PowerShell para o Application Insights Agent para instalar o mecanismo de instrumentação e reiniciar o IIS.
Serviços de nuvem do Azure Adicionar uma tarefa de inicialização para instalar o StatusMonitor.
Seu aplicativo deve ser integrado ao SDK do ApplicationInsights no momento da compilação instalando pacotes NuGet para aplicativos ASP.NET ou ASP.NET Core.
IIS Express Use o pacote NuGet Microsoft.Data.SqlClient.
WebJobs no Serviço de Aplicativo do Azure Use o pacote NuGet Microsoft.Data.SqlClient.

Além das etapas anteriores específicas da plataforma, você também precisa optar explicitamente por habilitar a coleção de comandos SQL modificando o arquivo applicationInsights.config com o seguinte código:

<TelemetryModules>
  <Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector">
    <EnableSqlCommandTextInstrumentation>true</EnableSqlCommandTextInstrumentation>
  </Add>

Nos casos anteriores, a maneira adequada de confirmar que o mecanismo de instrumentação está instalado corretamente é validando que a versão do SDK do DependencyTelemetry coletado é rddp. O uso de rdddsd ou rddf indica que as dependências são coletadas por meio de DiagnosticSource ou retornos de chamada EventSource, portanto, a consulta SQL completa não será capturada.

Onde encontrar dados de dependência

  • O Mapa do Aplicativo visualiza as dependências entre seu aplicativo e os componentes de vizinhança.
  • O Diagnóstico de Transação mostra dados de servidor unificados correlacionados.
  • A guia Navegadores mostra chamadas AJAX dos navegadores dos seus usuários.
  • Selecione dentre as solicitações com falha ou lentas para verificar as chamadas de dependência delas.
  • O Analytics pode ser usado para consultar dados de dependência.

Diagnosticar solicitações lentas

Cada evento de solicitação está associado às chamadas de dependência, exceções e outros eventos que são acompanhados durante o processamento da solicitação. Então, se algumas solicitações estão com baixo desempenho, você pode descobrir se é devido à lentidão nas respostas de uma dependência.

Rastreamento de solicitações de dependências

Selecione a guia Desempenho à esquerda e selecione a guia Dependências na parte superior.

Selecione um Nome de Dependência em Geral. Depois de selecionar uma dependência, um grafo da distribuição das durações dessa dependência aparece à direita.

Captura de tela que mostra a guia Dependências aberta para selecionar um Nome de dependência no gráfico.

Selecione o botão Amostras na parte inferior direita. Em seguida, selecione uma amostra para ver os detalhes da transação de ponta a ponta.

Captura de tela que mostra a seleção de uma amostra para visualizar os detalhes da transação de ponta a ponta.

Perfil de seu site ativo

O Application Insights Profiler rastreia chamadas HTTP para seu site ativo e mostra as funções mais demoradas em seu código.

Solicitações com falha

As solicitações com falha também podem ser associadas a chamadas com falha para as dependências.

Selecione a guia Falhas à esquerda e selecione a guia Dependências na parte superior.

Captura de tela que mostra a seleção do gráfico de solicitações com falha.

Aqui você verá a contagem de dependências com falha. Para obter mais informações sobre uma ocorrência com falha, selecione um Nome de Dependência na tabela inferior. Selecione o botão Dependências na parte inferior direita para visualizar os detalhes da transação de ponta a ponta.

Logs (Análise)

Você pode rastrear dependências na linguagem de consulta Kusto. Veja alguns exemplos.

  • Localize todas as chamadas com falha de dependência:

    
        dependencies | where success != "True" | take 10
    
  • Localize as chamadas AJAX:

    
        dependencies | where client_Type == "Browser" | take 10
    
  • Localize as chamadas de dependência associadas a solicitações:

    
        dependencies
        | where timestamp > ago(1d) and  client_Type != "Browser"
        | join (requests | where timestamp > ago(1d))
          on operation_Id  
    
  • Localize as chamadas do AJAX associadas a exibições de página:

    
        dependencies
        | where timestamp > ago(1d) and  client_Type == "Browser"
        | join (browserTimings | where timestamp > ago(1d))
          on operation_Id
    

Perguntas frequentes

Esta seção fornece respostas para perguntas comuns.

Como o coletor de dependências automáticas reporta chamadas com falha para as dependências?

As chamadas de dependência com falha terão o campo success definido como False. O módulo DependencyTrackingTelemetryModule não relata ExceptionTelemetry. O modelo de dados completo para dependência é descrito no modelo de dados de telemetria do Application Insights.

Como fazer para calcular a latência de ingestão para minha telemetria de dependência?

Use este código:

dependencies
| extend E2EIngestionLatency = ingestion_time() - timestamp 
| extend TimeIngested = ingestion_time()

Como fazer para determinar a hora em que a chamada de dependência foi iniciada?

No modo de exibição da consulta do Log Analytics, timestamp representa o momento em que a chamada TrackDependency() foi iniciada, o que ocorre imediatamente após o recebimento da resposta da chamada de dependência. Para calcular a hora em que a chamada de dependência começou, você pegaria timestamp e subtrairia o duration registrado da chamada de dependência.

O acompanhamento de dependência no Application Insights inclui corpos de resposta de registro em log?

O acompanhamento de dependência no Application Insights não inclui corpos de resposta de registro em log, pois geraria muita telemetria para a maioria dos aplicativos.

SDK do código-fonte aberto

Assim como cada SDK do Application Insights, o módulo de coleta de dependência também é de código aberto. Leia e contribua com o código ou relate problemas no repositório oficial do GitHub.

Coleta automática de dependência

Veja abaixo a lista atualmente com suporte de chamadas de dependência que são detectadas automaticamente como dependências sem a necessidade de qualquer modificação adicional no código do aplicativo. Essas dependências são visualizadas nas exibições Mapa do aplicativo e Diagnóstico de transação do Application Insights. Se a dependência não estiver na lista abaixo, você ainda poderá acompanhá-la manualmente com um comando acompanhar chamada de dependência.

.NET

Estruturas do aplicativo Versões
Web Forms do ASP.NET 4.5+
ASP.NET MVC 4+
ASP.NET Web API 4.5+
ASP.NET Core 1.1+
Bibliotecas de comunicação
HttpClient 4.5+, .NET Core 1.1+
SqlClient .NET Core 1.0+, NuGet 4.3.0
Microsoft.Data.SqlClient 1.1.0 – versão estável mais recente. (Consulte a observação abaixo.)
SDK do Cliente dos Hubs de Eventos 1.1.0
SDK do Cliente do Barramento de Serviço 7.0.0
Clientes de armazenamento
ADO.NET 4.5+

Observação

Existe um problema conhecido com versões anteriores do Microsoft.Data.SqlClient. É recomendável usar a 1.1.0 ou posterior para atenuar esse problema. O Entity Framework Core não vêm necessariamente com a versão estável mais recente do Microsoft.Data.SqlClient, portanto, recomendamos confirmar que você tem no mínimo a 1.1.0 para evitar esse problema.

Java

Confira a lista de dependências coletadas automaticamente do Java do Application Insights.

Node.js

Uma lista dos módulos mais recentes com suporte atualmente é mantida aqui.

JavaScript

Bibliotecas de comunicação Versões
XMLHttpRequest Tudo

Próximas etapas