Udostępnij za pośrednictwem


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

Uwaga

Zalecamy dystrybucję OpenTelemetry usługi Azure Monitor dla nowych aplikacji lub klientów, aby umożliwić usłudze Azure Monitor Application Insights. Dystrybucja OpenTelemetry usługi Azure Monitor zapewnia podobną funkcjonalność i środowisko jako 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 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 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 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 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 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 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 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 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 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 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 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 użyj modułu PowerShell agenta usługi Application Insights, 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 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 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 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 wybranie przykładu, aby wyświetlić szczegółowe informacje o kompleksowej transakcji.

Profilowanie witryny na żywo

Narzędzie .NET Profiler śledzi wywołania HTTP w witrynie 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.

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

W tym miejscu zostanie wyświetlona liczba 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 mają pole ustawione na success wartość False. DependencyTrackingTelemetryModule Moduł nie zgłasza ExceptionTelemetryelementu . 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 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 Insights obejmuje jednostki odpowiedzi rejestrowania?

Śledzenie zależności w usłudze Application Insights nie obejmuje jednostek odpowiedzi rejestrowania, ponieważ generuje 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. Odczytywanie i współtworzenie problemów z kodem lub zgłaszaniem ich w oficjalnym repozytorium GitHub.

Autokolekcja 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 usługi Application Insights i diagnostyki transakcji. Jeśli zależność nie znajduje się na 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 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 obsługiwana tutaj.

JavaScript

Biblioteki komunikacyjne Wersje
XMLHttpRequest wszystkie

Następne kroki