Śledzenie zależności w usłudze Application Szczegółowe informacje

Uwaga

Poniższa dokumentacja opiera się na klasycznym interfejsie API usługi Application Szczegółowe informacje. Długoterminowy plan Szczegółowe informacje aplikacji polega na zbieraniu danych przy użyciu biblioteki OpenTelemetry. Aby uzyskać więcej informacji, zobacz Enable Azure Monitor OpenTelemetry for .NET, Node.js, Python and Java applications (Włączanie usługi Azure Monitor OpenTelemetry dla platformy .NET, Node.js, Python i Java applications).

Zależność to składnik wywoływany przez aplikację. Zazwyczaj jest to usługa wywoływana przy użyciu protokołu HTTP, bazy danych lub systemu plików. Aplikacja Szczegółowe informacje mierzy czas trwania wywołań zależności i określa, czy kończy się niepowodzeniem, czy nie, wraz z informacjami takimi jak nazwa zależności. Możesz zbadać określone wywołania zależności i skorelować je z żądaniami i wyjątkami.

Automatycznie śledzone zależności

Zestawy SDK Szczegółowe informacje aplikacji dla platformy .NET i platformy .NET Core wraz z modułem DependencyTrackingTelemetryModule, który jest modułem telemetrii, który automatycznie zbiera zależności. Ta kolekcja zależności jest włączana automatycznie dla aplikacji ASP.NET i ASP.NET Core, gdy jest skonfigurowana zgodnie z połączonymi oficjalnymi dokumentami. Moduł DependencyTrackingTelemetryModule jest dostarczany jako Microsoft.Application Szczegółowe informacje. Pakiet NuGet DependencyCollector. Jest on automatycznie wprowadzany podczas korzystania z Microsoft.ApplicationInsights.Web pakietu NuGet lub Microsoft.ApplicationInsights.AspNetCore pakietu NuGet.

DependencyTrackingTelemetryModule Obecnie śledzi następujące zależności automatycznie:

Zależności Szczegóły
HTTP/HTTPS Lokalne lub zdalne wywołania HTTP/HTTPS.
Wywołania programu WCF Śledzone automatycznie tylko wtedy, gdy są używane powiązania oparte na protokole HTTP.
SQL Wywołania wykonane za pomocą SqlClientpolecenia . Zobacz sekcję Zaawansowane śledzenie SQL, aby uzyskać pełne zapytanie SQL na potrzeby przechwytywania zapytań SQL.
Azure Blob Storage, Table Storage lub Queue Storage Wywołania wykonywane za pomocą klienta usługi Azure Storage.
Zestaw SDK klienta usługi Azure Event Hubs Użyj najnowszego pakietu: https://nuget.org/packages/Azure.Messaging.EventHubs.
Zestaw SDK klienta usługi Azure Service Bus Użyj najnowszego pakietu: https://nuget.org/packages/Azure.Messaging.ServiceBus.
Azure Cosmos DB Śledzone automatycznie, jeśli jest używany protokół HTTP/HTTPS. Śledzenie operacji w trybie bezpośrednim przy użyciu protokołu TCP będzie również przechwytywane automatycznie przy użyciu pakietu >w wersji zapoznawczej = 3.33.0-preview. Aby uzyskać więcej informacji, odwiedź dokumentację.

Jeśli brakuje zależności lub innego zestawu SDK, upewnij się, że znajduje się on na liście automatycznie wygenerowanych zależności. Jeśli zależność nie została automatycznie utworzona, możesz ją śledzić ręcznie za pomocą wywołania zależności śledzenia.

Konfigurowanie automatycznego śledzenia zależności w aplikacjach konsoli

Aby automatycznie śledzić zależności z poziomu aplikacji konsolowych platformy .NET, zainstaluj pakiet Microsoft.ApplicationInsights.DependencyCollector NuGet i zainicjuj DependencyTrackingTelemetryModulepolecenie :

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

W przypadku aplikacji TelemetryConfiguration.Active konsolowych platformy .NET Core przestarzałe. Zapoznaj się ze wskazówkami w dokumentacji usługi Roboczej i dokumentacją monitorowania ASP.NET Core.

Jak działa automatyczne monitorowanie zależności?

Zależności są zbierane automatycznie przy użyciu jednej z następujących technik:

  • Instrumentacja kodu bajtowego wokół wybranych metod. StatusMonitor Użyj InstrumentationEngine rozszerzenia web apps usługi aplikacja systemu Azure Lub .
  • EventSource Wywołania zwrotne.
  • DiagnosticSource wywołania zwrotne w najnowszych zestawach SDK platformy .NET lub .NET Core.

Ręczne śledzenie zależności

Następujące przykłady zależności, które nie są zbierane automatycznie, wymagają ręcznego śledzenia:

  • Usługa Azure Cosmos DB jest śledzona automatycznie tylko wtedy, gdy jest używany protokół HTTP/HTTPS . Tryb TCP nie będzie automatycznie przechwytywany przez aplikację Szczegółowe informacje dla wersji zestawu SDK starszych niż 2.22.0-Beta1.
  • Redis

W przypadku tych zależności, które nie są automatycznie zbierane przez zestaw SDK, można je śledzić ręcznie przy użyciu interfejsu API TrackDependency używanego przez standardowe moduły automatycznego zbierania danych.

Przykład

Jeśli tworzysz kod przy użyciu zestawu, którego nie tworzysz samodzielnie, możesz wykonać wszystkie wywołania. W tym scenariuszu można dowiedzieć się, jaki wkład ma w czasie odpowiedzi.

Aby wyświetlić te dane na wykresach zależności w aplikacji Szczegółowe informacje, wyślij je przy użyciu polecenia 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);
    }

Alternatywnie udostępnia TelemetryClient metody StartOperation rozszerzeń i StopOperation, które mogą służyć do ręcznego śledzenia zależności, jak pokazano w śledzenia zależności wychodzących.

Jeśli chcesz wyłączyć standardowy moduł śledzenia zależności, usuń odwołanie do DependencyTrackingTelemetryModule w aplikacji Szczegółowe informacje.config dla aplikacji ASP.NET. W przypadku aplikacji ASP.NET Core postępuj zgodnie z instrukcjami w temacie Application Szczegółowe informacje for ASP.NET Core applications (Aplikacje ASP.NET Core).

Śledzenie wywołań AJAX ze stron internetowych

W przypadku stron internetowych zestaw SDK usługi Application Szczegółowe informacje JavaScript automatycznie zbiera wywołania AJAX jako zależności.

Zaawansowane śledzenie SQL w celu uzyskania pełnego zapytania SQL

Uwaga

Usługa Azure Functions wymaga oddzielnych ustawień w celu włączenia zbierania tekstu SQL. Aby uzyskać więcej informacji, zobacz Włączanie zbierania zapytań SQL.

W przypadku wywołań SQL nazwa serwera i bazy danych jest zawsze zbierana i przechowywana jako nazwa zebranego DependencyTelemetryelementu . Inne pole, nazywane danymi, może zawierać pełny tekst zapytania SQL.

W przypadku aplikacji platformy ASP.NET Core jest teraz wymagane wyrażenie zgody na zbieranie tekstu SQL przy użyciu:

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

W przypadku aplikacji ASP.NET pełny tekst zapytania SQL jest zbierany przy użyciu instrumentacji kodu bajtowego, która wymaga użycia aparatu instrumentacji lub przy użyciu pakietu NuGet Microsoft.Data.SqlClient zamiast biblioteki System.Data.SqlClient . Kroki specyficzne dla platformy umożliwiające włączenie pełnej kolekcji zapytań SQL zostały opisane w poniższej tabeli.

Platforma Kroki potrzebne do uzyskania pełnego zapytania SQL
Web Apps w usłudze aplikacja systemu Azure W panelu sterowania aplikacji internetowej otwórz okienko Aplikacja Szczegółowe informacje i włącz polecenia SQL na platformie .NET.
Serwer IIS (maszyny wirtualne platformy Azure, środowisko lokalne itd.) Użyj pakietu NuGet Microsoft.Data.SqlClient lub użyj modułu PowerShell agenta Szczegółowe informacje aplikacji, aby zainstalować aparat instrumentacji i ponownie uruchomić usługi IIS.
Azure Cloud Services Dodaj zadanie uruchamiania, aby zainstalować narzędzie StatusMonitor.
Aplikacja powinna zostać dołączona do zestawu SDK aplikacji Szczegółowe informacje w czasie kompilacji przez zainstalowanie pakietów NuGet dla aplikacji ASP.NET lub ASP.NET Core.
IIS Express Użyj pakietu NuGet Microsoft.Data.SqlClient.
Zadania WebJob w usłudze aplikacja systemu Azure Użyj pakietu NuGet Microsoft.Data.SqlClient.

Oprócz powyższych kroków specyficznych dla platformy należy również jawnie wyrazić zgodę na włączenie zbierania poleceń SQL, modyfikując applicationInsights.config plik przy użyciu następującego kodu:

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

W poprzednich przypadkach właściwym sposobem weryfikacji, czy aparat instrumentacji jest poprawnie zainstalowany, jest zweryfikowanie, czy zebrana DependencyTelemetry wersja zestawu SDK to rddp. rdddsd Użycie funkcji lub rddf wskazuje, że zależności są zbierane za pośrednictwem wywołań DiagnosticSource zwrotnych lub, EventSource więc pełne zapytanie SQL nie zostanie przechwycone.

Gdzie można znaleźć dane zależności

  • Mapa aplikacji wizualizuje zależności między aplikacją a sąsiednimi składnikami.
  • Diagnostyka transakcji pokazuje ujednolicone, skorelowane dane serwera.
  • Karta Przeglądarki zawiera wywołania AJAX z przeglądarek użytkowników.
  • Wybierz z wolnych lub nieudanych żądań, aby sprawdzić wywołania zależności.
  • Analiza może służyć do wykonywania zapytań dotyczących danych zależności.

Diagnozowanie wolnych żądań

Każde zdarzenie żądania jest skojarzone z wywołaniami zależności, wyjątkami i innymi zdarzeniami śledzonym podczas przetwarzania żądania. W związku z tym, jeśli niektóre żądania działają źle, możesz dowiedzieć się, czy jest to spowodowane powolnymi odpowiedziami z zależności.

Śledzenie żądań do zależności

Wybierz kartę Wydajność po lewej stronie i wybierz kartę Zależności u góry.

Wybierz nazwę zależności w obszarze Ogólne. Po wybraniu zależności po prawej stronie zostanie wyświetlony wykres rozkładu czasu trwania tej zależności.

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

Wybierz przycisk Przykłady w prawym dolnym rogu. Następnie wybierz przykład, aby wyświetlić szczegóły transakcji kompleksowej.

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

Profilowanie witryny na żywo

Aplikacja Szczegółowe informacje profiler śledzi wywołania HTTP do witryny na żywo i pokazuje funkcje w kodzie, które zajęły najdłuższy czas.

Żądania zakończone niepowodzeniem

Żądania, które zakończyły się niepowodzeniem, mogą być również skojarzone z nieudanymi wywołaniami zależności.

Wybierz kartę Błędy po lewej stronie, a następnie wybierz kartę Zależności u góry.

Screenshot that shows selecting the failed requests chart.

W tym miejscu zobaczysz liczbę nieudanych zależności. Aby uzyskać więcej informacji o wystąpieniu niepowodzenia, wybierz nazwę zależności w dolnej tabeli. Wybierz przycisk Zależności w prawym dolnym rogu, aby wyświetlić szczegóły kompleksowej transakcji.

Dzienniki (analiza)

Zależności można śledzić w języku zapytań Kusto. Oto kilka przykładów.

  • Znajdź wszelkie nieudane wywołania zależności:

    
        dependencies | where success != "True" | take 10
    
  • Znajdź wywołania AJAX:

    
        dependencies | where client_Type == "Browser" | take 10
    
  • Znajdź wywołania zależności skojarzone z żądaniami:

    
        dependencies
        | where timestamp > ago(1d) and  client_Type != "Browser"
        | join (requests | where timestamp > ago(1d))
          on operation_Id  
    
  • Znajdź wywołania AJAX skojarzone z widokami stron:

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

Często zadawane pytania

Ta sekcja zawiera odpowiedzi na typowe pytania.

W jaki sposób automatyczny raport modułu zbierającego zależności nie może wywołać zależności?

Nieudane wywołania zależności będą miały success pole ustawione na wartość False. DependencyTrackingTelemetryModule Moduł nie zgłasza ExceptionTelemetryelementu . Pełny model danych dla zależności został opisany w temacie Application Szczegółowe informacje model danych telemetrycznych.

Jak mogę obliczyć opóźnienie pozyskiwania dla telemetrii zależności?

Użyj tego kodu:

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

Jak mogę określić czas zainicjowania wywołania zależności?

W widoku timestamp zapytania usługi Log Analytics reprezentuje moment zainicjowania wywołania TrackDependency(), który występuje natychmiast po odebraniu odpowiedzi wywołania zależności. Aby obliczyć czas rozpoczęcia wywołania zależności, należy wziąć timestamp i odjąć zarejestrowane duration wywołanie zależności.

Czy śledzenie zależności w usłudze Application Szczegółowe informacje obejmuje jednostki odpowiedzi rejestrowania?

Śledzenie zależności w usłudze Application Szczegółowe informacje nie obejmuje jednostek odpowiedzi rejestrowania, ponieważ generuje zbyt wiele danych telemetrycznych dla większości aplikacji.

Zestaw SDK typu open source

Podobnie jak każdy zestaw SDK Szczegółowe informacje aplikacji, moduł kolekcji zależności jest również typu open source. Odczytywanie i współtworzenie problemów z kodem lub zgłaszaniem ich w oficjalnym repozytorium GitHub.

Automatyczne zbieranie zależności

Poniżej znajduje się obecnie obsługiwana lista wywołań zależności, które są automatycznie wykrywane jako zależności bez konieczności dodatkowej modyfikacji kodu aplikacji. Te zależności są wizualizowane w widokach mapy aplikacji Szczegółowe informacje aplikacji i diagnostyki transakcji. Jeśli zależność nie znajduje się na poniższej liście, nadal możesz ją śledzić ręcznie za pomocą wywołania zależności śledzenia.

.NET

Struktury aplikacji Wersje
ASP.NET Webforms 4.5+
ASP.NET MVC 4+
ASP.NET WebAPI 4.5+
ASP.NET Core 1.1+
Biblioteki komunikacyjne
HttpClient 4.5+, .NET Core 1.1+
Sqlclient .NET Core 1.0+, NuGet 4.3.0
Microsoft.Data.SqlClient 1.1.0 — najnowsza stabilna wersja. (Zobacz uwaga poniżej).
Zestaw SDK klienta usługi Event Hubs 1.1.0
Zestaw SDK klienta usługi ServiceBus 7.0.0
Klienci magazynu
ADO.NET 4.5+

Uwaga

Istnieje znany problem ze starszymi wersjami programu Microsoft.Data.SqlClient. Zalecamy użycie wersji 1.1.0 lub nowszej, aby rozwiązać ten problem. Program Entity Framework Core nie musi być dostarczony z najnowszą stabilną wersją programu Microsoft.Data.SqlClient, dlatego zalecamy potwierdzenie, że korzystasz z wersji co najmniej 1.1.0, aby uniknąć tego problemu.

Java

Zapoznaj się z listą automatycznie generowanych zależności języka Java w usłudze Application Szczegółowe informacje.

Node.js

Lista najnowszych aktualnie obsługiwanych modułów jest obsługiwana tutaj.

JavaScript

Biblioteki komunikacyjne Wersje
XMLHttpRequest wszystkie

Następne kroki