Śledzenie zależności w usłudze Application Insights
Zależność to składnik, który jest 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
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. DependencyTrackingTelemetryModule
Moduł jest dostarczany jako pakiet NuGet Microsoft.ApplicationInsights.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 wykonywane za pomocą polecenia 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 Azure Event Hubs | Użyj najnowszego pakietu: https://nuget.org/packages/Azure.Messaging.EventHubs. |
zestaw SDK klienta Azure Service Bus | Użyj najnowszego pakietu: https://nuget.org/packages/Azure.Messaging.ServiceBus. |
Azure Cosmos DB | Śledzone automatycznie tylko wtedy, gdy jest używany protokół HTTP/HTTPS. Tryb TCP nie będzie przechwytywany przez usługę Application Insights. |
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 konsolowych
Aby automatycznie śledzić zależności z poziomu aplikacji konsolowych platformy .NET, zainstaluj pakiet Microsoft.ApplicationInsights.DependencyCollector
NuGet i zainicjuj DependencyTrackingTelemetryModule
polecenie :
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 Proces roboczy 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:
- Korzystanie z instrumentacji kodu bajtowego wokół wybranych metod. Użyj
InstrumentationEngine
rozszerzenia z lubStatusMonitor
Azure App Service Web Apps. EventSource
Wywołania zwrotne.DiagnosticSource
wywołania zwrotne w najnowszych zestawach .NET lub .NET Core SDK.
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 przechwytywany przez usługę Application Insights.
- 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.
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 włoży w czasy odpowiedzi.
Aby te dane zostały wyświetlone 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
elementu w 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 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
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 DependencyTelemetry
obiektu . Inne pole, nazywane danymi, może zawierać pełny tekst zapytania SQL.
W przypadku aplikacji ASP.NET Core teraz wymagane jest 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 za pomocą instrumentacji kodu bajtów, która wymaga użycia aparatu instrumentacji lub 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 Azure App Service | W panelu sterowania aplikacji internetowej otwórz okienko Application Insights i włącz polecenia SQL na platformie .NET. |
Serwer USŁUG IIS (azure Virtual Machines, lokalnie 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. |
usług 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 Azure App Service | 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 kolekcji 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 prawidłowym sposobem weryfikacji, czy aparat instrumentacji jest poprawnie zainstalowany, jest zweryfikowanie, czy zebrana DependencyTelemetry
wersja zestawu SDK to rddp
. rdddsd
Użycie elementów lub rddf
wskazuje, że zależności są zbierane za pośrednictwem DiagnosticSource
wywołań 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 powolnych lub nieudanych żądań, aby sprawdzić ich 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 z żą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.
Wybierz przycisk Przykłady w prawym dolnym rogu. Następnie wybierz przykład, aby wyświetlić szczegóły kompleksowej transakcji.
Profilowanie aktywnej witryny
Profiler usługi Application Insights śledzi wywołania HTTP do witryny na żywo i pokazuje funkcje w kodzie, które trwały 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.
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ć kompleksowe szczegóły transakcji.
Dzienniki (analiza)
Zależności można śledzić w języku zapytań Kusto. Oto kilka przykładów.
Znajdź wszystkie nieudane wywołania zależności:
dependencies | where success != "True" | take 10
Znajdź wywołania AJAX:
dependencies | where client_Type == "Browser" | take 10
Znajdowanie wywołań zależności skojarzonych 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 często zadawane pytania.
W jaki sposób raport automatycznego 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 ExceptionTelemetry
. Pełny model danych dla zależności został opisany w temacie Model danych telemetrycznych usługi Application Insights.
Jak mogę obliczyć opóźnienie pozyskiwania danych telemetrycznych 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 bezpośrednio 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ł zbierania zależności jest również 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ę lista obecnie obsługiwanych 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 poniższej liście, 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 | 3.0.0 |
Klienci magazynu | |
ADO.NET | 4.5+ |
Uwaga
Występuje znany problem ze starszymi wersjami programu Microsoft.Data.SqlClient. Zalecamy użycie wersji 1.1.0 lub nowszej w celu rozwiązania tego problemu. Program Entity Framework Core nie musi dostarczać najnowszej stabilnej wersji programu Microsoft.Data.SqlClient, dlatego zalecamy potwierdzenie, że korzystasz z co najmniej 1.1.0, aby uniknąć tego problemu.
Java
Zapoznaj się z listą automatycznie zależnych zależności języka Java w usłudze Application Insights.
Node.js
Lista najnowszych aktualnie obsługiwanych modułów jest przechowywana tutaj.
JavaScript
Biblioteki komunikacyjne | Wersje |
---|---|
XMLHttpRequest | Wszystko |
Następne kroki
- Wyjątki
- Dane użytkownika i strony
- Dostępność
- Konfigurowanie niestandardowego śledzenia zależności dla języka Java.
- Skonfiguruj niestandardowe śledzenie zależności dla języka Python OpenCensus.
- Zapisywanie danych telemetrycznych zależności niestandardowych
- Zobacz model danych dla typów usługi Application Insights i modelu danych.
- Zapoznaj się z platformami obsługiwanymi przez usługę Application Insights.