Ś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ą SqlClient polecenia . 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 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 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żyjInstrumentationEngine
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 DependencyTelemetry
elementu . 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.
Wybierz przycisk Przykłady w prawym dolnym rogu. Następnie wybierz przykład, aby wyświetlić szczegóły transakcji kompleksowej.
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.
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 ExceptionTelemetry
elementu . 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
- 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.
- Pisanie niestandardowych danych telemetrycznych zależności
- Zobacz Model danych dla typów usługi Application Insights i modelu danych.
- Zapoznaj się z platformami obsługiwanymi przez usługę Application Insights.