Udostępnij za pośrednictwem


Śledzenie zależności w usłudze Application Insights

Uwaga

Zalecamy użycie Azure Monitor OpenTelemetry Distro dla nowych aplikacji lub klientów w celu zasilania Azure Monitor Application Insights. Dystrybucja OpenTelemetry usługi Azure Monitor zapewnia podobną funkcjonalność i doświadczenie jak zestaw SDK usługi Application Insights. Migracja z zestawu SDK usługi Application Insights jest możliwa przy użyciu przewodników migracji dla platformy .NET, Node.js i języka Python, ale nadal pracujemy nad dodaniem kilku dodatkowych funkcji w celu zapewnienia zgodności z poprzednimi wersjami.

Zależność to składnik wywoływany przez twoją aplikację. Zazwyczaj jest to usługa wywoływana przy użyciu protokołu HTTP, bazy danych lub systemu plików. Usługa Application Insights 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 usługi Application Insights dla platform .NET i .NET Core są dostarczane 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 skonfigurowanych zgodnie z połączonymi oficjalnymi dokumentami. Moduł DependencyTrackingTelemetryModule jest dostarczany jako pakiet NuGet Microsoft.ApplicationInsights.DependencyCollector i jest dostarczany automatycznie 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 WCF Śledzone automatycznie tylko wtedy, gdy są używane powiązania oparte na protokole HTTP.
SQL Połączenia wykonane za pomocą SqlClient. 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 jest 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 używasz różnego SDK, upewnij się, że znajduje się na liście automatycznie zbieranych zależności. Jeśli zależność nie została automatycznie zebrana, możesz ją rejestrować ręcznie za pomocą wywołania śledzenia zależności.

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

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

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

W aplikacjach konsolowych platformy .NET Core element TelemetryConfiguration.Active jest przestarzały. Zapoznaj się ze wskazówkami w dokumentacji usługi roboczej i dokumentacji 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 dla wybranych metod. Użyj InstrumentationEngine albo z StatusMonitor albo z rozszerzenia Azure App Service Web Apps.
  • 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 usługę Application Insights 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 budujesz swój kod z użyciem zestawu, którego nie napisałeś samodzielnie, możesz zmierzyć czas wykonania wszystkich wywołań do niego. 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 usłudze Application Insights, 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, TelemetryClient udostępnia metody rozszerzenia StartOperation i StopOperation, które mogą służyć do ręcznego śledzenia zależności, jak pokazano w śledzeniu zależności wychodzących.

Jeśli chcesz wyłączyć standardowy moduł śledzenia zależności, usuń odwołanie do DependencyTrackingTelemetryModule w pliku ApplicationInsights.config dla aplikacji ASP.NET. W przypadku aplikacji ASP.NET Core postępuj zgodnie z instrukcjami w usłudze Application Insights dla aplikacji ASP.NET Core.

Śledzenie wywołań AJAX ze stron internetowych

W przypadku stron internetowych zestaw SDK języka JavaScript usługi Application Insights 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 dzięki instrumentacji kodu bajtowego, co wymaga użycia silnika instrumentacji lub wykorzystania 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
Usługa Azure App Service dla aplikacji sieciowych W panelu sterowania aplikacji internetowej otwórz okienko Usługi Application Insights 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 modułu agenta Application Insights PowerShell, aby zainstalować aparat instrumentacji i ponownie uruchomić IIS.
Azure Cloud Services Dodaj zadanie uruchamiania, aby zainstalować narzędzie StatusMonitor.
Aplikacja powinna zostać dołączona do zestawu SDK usługi ApplicationInsights 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 aplikacji 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. Użycie rdddsd lub rddf wskazuje na to, że zależności są zbierane za pośrednictwem wywołań zwrotnych DiagnosticSource lub EventSource, więc pełne zapytanie SQL nie będzie 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 w przeglądarce pokazuje 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.

Zdiagnozuj wolne żądania

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 pod Ogólne. Po wybraniu zależności zostanie wyświetlony wykres rozkładu czasu trwania tej zależności.

Zrzut ekranu przedstawiający otwartą kartę Zależności, aby wybrać nazwę zależności na wykresie.

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

Zrzut ekranu przedstawiający wybór próbki, aby zobaczyć dane transakcji od początku do końca.

Profiluj swoją witrynę na żywo

Narzędzie .NET Profiler śledzi wywołania HTTP w działającej witrynie i pokazuje funkcje w kodzie, których wykonanie trwało najdłużej.

Żą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.

Zrzut ekranu przedstawiający wybieranie wykresu żądań, które zakończyły się niepowodzeniem.

Tutaj widzisz 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.

Jak automatyczny moduł zbierania zależności raportuje nieudane wywołania zależności?

Nieudane wywołania zależności mają pole success ustawione na False. Moduł DependencyTrackingTelemetryModule nie zgłasza ExceptionTelemetry. Pełny model danych dla zależności został opisany w artykule Model danych telemetrycznych usługi Application Insights.

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 zapytania usługi Log Analytics, timestamp reprezentuje moment zainicjowania wywołania TrackDependency(), który następuje natychmiast po otrzymaniu odpowiedzi na wywołanie zależności. Aby obliczyć czas rozpoczęcia wywołania zależności, należy wziąć timestamp i odjąć zarejestrowaną wartość duration dotyczącą wywołania zależności.

Czy śledzenie zależności w usłudze Application Insights obejmuje rejestrowanie treści odpowiedzi?

Śledzenie zależności w usłudze Application Insights nie obejmuje rejestrowania treści odpowiedzi, ponieważ generowałoby to zbyt dużo danych telemetrycznych dla większości aplikacji.

Zestaw SDK typu open source

Podobnie jak każdy zestaw SDK usługi Application Insights, moduł kolekcji zależności jest również typu open source. Czytaj i współtwórz kod lub zgłaszaj problemy 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 i diagnostyki transakcji. Jeśli Twoja zależność nie znajduje się na liście, nadal możesz ją śledzić ręcznie za pomocą wywołania śledzenia zależności.

.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 następującą notatkę).
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

Zobacz listę automatycznie generowanych zależności języka Java w usłudze Application Insights.

Node.js

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

JavaScript

Biblioteki komunikacyjne Wersje
XMLHttpRequest wszystkie

Następne kroki