Controle de dependência no Application Insights

Nota

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

Uma dependência é um componente chamado pelo seu aplicativo. Normalmente, é 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 e se ela está falhando 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 rastreadas automaticamente

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

Atualmente, DependencyTrackingTelemetryModule rastreia as seguintes dependências automaticamente:

Dependências Detalhes
HTTP/HTTPS Chamadas HTTP/HTTPS locais ou remotas.
Chamadas WCF Somente rastreado automaticamente se forem usadas ligações baseadas em HTTP.
SQL Chamadas feitas com SqlClient. Consulte a seção Acompanhamento SQL avançado para obter consulta SQL completa para capturar consultas SQL.
Armazenamento de Blobs do Azure, Armazenamento de Tabela ou Armazenamento de Filas Chamadas feitas com o cliente de Armazenamento do 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 Azure Service Bus Use o pacote mais recente: https://nuget.org/packages/Azure.Messaging.ServiceBus.
BD do Cosmos para o Azure Rastreado automaticamente se HTTP/HTTPS for usado. O rastreamento de operações no modo direto com TCP também será capturado automaticamente usando o pacote >de visualização = 3.33.0-preview. Para mais detalhes, visite a documentação.

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

Configurar o controlo automático de dependências em aplicações de consola

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

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

Para aplicativos de console .NET Core, TelemetryConfiguration.Active está obsoleto. Consulte as orientações na documentação de serviço do Worker 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 instrumentação de código de byte em torno de métodos selecionados. Use InstrumentationEngine a partir de ou uma extensão de Aplicativos Web do Serviço de StatusMonitor Aplicativo do Azure.
  • EventSource retornos de chamada.
  • DiagnosticSource retornos de chamada nos SDKs .NET ou .NET Core mais recentes.

Rastreando dependências manualmente

Os seguintes exemplos de dependências, que não são coletadas automaticamente, exigem rastreamento manual:

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

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

Exemplo

Se você criar seu código com um assembly que você mesmo não escreveu, você pode cronometrar todas as chamadas para ele. Este cenário permitir-lhe-ia descobrir qual a sua contribuição para os seus tempos 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, fornece os métodos StartOperation de extensão e StopOperation, que podem ser usados para controlar manualmente as dependências, TelemetryClient conforme mostrado em Rastreamento de dependências de saída.

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

Rastreie 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 SQL avançado para obter consulta SQL completa

Nota

O Azure Functions requer configurações separadas para habilitar a coleção de texto SQL. Para obter mais informações, consulte 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 arquivo DependencyTelemetry. Outro campo, chamado dados, pode conter o texto completo da consulta SQL.

Para aplicativos ASP.NET Core, agora é necessário optar pela coleção SQL Text 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 usando o pacote NuGet Microsoft.Data.SqlClient em vez da biblioteca System.Data.SqlClient. As etapas específicas da plataforma para habilitar a coleção completa de Consultas SQL são descritas na tabela a seguir.

Plataforma Etapas necessárias para obter uma consulta SQL completa
Aplicativos Web no Serviço de Aplicativo do Azure No painel de controle do aplicativo Web, abra o painel Application Insights e habilite os Comandos SQL em .NET.
Servidor IIS (Máquinas Virtuais do Azure, no local e assim por diante) Use o pacote NuGet Microsoft.Data.SqlClientou use o Application Insights Agent PowerShell Module para instalar o mecanismo de instrumentação e reiniciar o IIS.
Serviços Cloud do Azure Adicione 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 específicas da plataforma anteriores, você também deve optar explicitamente por habilitar a coleta de comandos SQL modificando o applicationInsights.config arquivo com o seguinte código:

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

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

Onde encontrar dados de dependência

Diagnosticar solicitações lentas

Cada evento de solicitação é associado às chamadas de dependência, exceções e outros eventos rastreados durante o processamento da solicitação. Então, se algumas solicitações estão indo mal, você pode descobrir se é por causa de respostas lentas de uma dependência.

Rastreio de solicitações para dependências

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

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

Screenshot that shows the Dependencies tab open to select a Dependency Name in the chart.

Selecione o botão Amostras no canto inferior direito. Em seguida, selecione um exemplo para ver os detalhes da transação de ponta a ponta.

Screenshot that shows selecting a sample to see the end-to-end transaction details.

Crie o perfil do seu site ao vivo

O criador de perfil do Application Insights rastreia chamadas HTTP para seu site ativo e mostra as funções em seu código que levaram mais tempo.

Pedidos com falhas

Solicitações com falha também podem estar associadas a chamadas com falha para dependências.

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

Screenshot that shows selecting the failed requests chart.

Aqui você verá a contagem de dependência 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 no canto inferior direito para ver os detalhes da transação de ponta a ponta.

Logs (Analytics)

Você pode rastrear dependências na linguagem de consulta Kusto. Seguem-se alguns exemplos.

  • Encontre quaisquer chamadas de dependência com falha:

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

    
        dependencies | where client_Type == "Browser" | take 10
    
  • Encontre 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  
    
  • Encontre chamadas AJAX associadas a visualizações de página:

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

Perguntas mais frequentes

Esta secção fornece respostas a perguntas comuns.

Como o coletor automático de dependência relata chamadas com falha para dependências?

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

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

Use este código:

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

Como determino a hora em que a chamada de dependência foi iniciada?

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

O rastreamento de dependência no Application Insights inclui o registro de corpos de resposta?

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

SDK de código aberto

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

Recolha automática de dependências

Abaixo está a lista atualmente suportada de chamadas de dependência que são detetadas automaticamente como dependências sem exigir qualquer modificação adicional no código do seu aplicativo. Essas dependências são visualizadas nas visualizações Application Insights Application map e Transaction diagnostics . Se sua dependência não estiver na lista abaixo, você ainda poderá rastreá-la manualmente com uma chamada de dependência de rastreamento.

.NET

Estruturas de aplicativos Versões
ASP.NET Webforms 4.5+
ASP.NET MVC 4+
ASP.NET WebAPI 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 - última versão estável. (Ver nota abaixo.)
SDK do Cliente de Hubs de Eventos 1.1.0
SDK do cliente ServiceBus 7.0.0
Clientes de armazenamento
ADO.NET 4.5+

Nota

Há um problema conhecido com versões mais antigas do Microsoft.Data.SqlClient. Recomendamos o uso da versão 1.1.0 ou posterior para atenuar esse problema. O Entity Framework Core não é necessariamente fornecido com a versão estável mais recente do Microsoft.Data.SqlClient, portanto, recomendamos confirmar que você está em pelo menos 1.1.0 para evitar esse problema.

Java

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

Node.js

Uma lista dos últimos módulos atualmente suportados é mantida aqui.

JavaScript

Bibliotecas de comunicação Versões
XMLHttpRequest Todos

Próximos passos