Samouczek: monitorowanie i diagnozowanie aplikacji usługi Service Fabric przy użyciu usługi Application Insights
Ten samouczek jest częścią piątą w serii. Przedstawiono w nim kroki konfigurowania monitorowania i diagnostyki dla aplikacji ASP.NET Core działającej w klastrze usługi Azure Service Fabric przy użyciu usługi Application Insights. Dane telemetryczne są zbierane z aplikacji opracowanej w części jednej z serii samouczków.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Konfigurowanie zasobu usługi Application Insights
- Dodawanie usługi Application Insights do usług aplikacji
- Wyświetlanie telemetrii i mapy aplikacji w usłudze Application Insights
- Dodawanie instrumentacji niestandardowej do aplikacji
W serii samouczków pokazano, jak wykonać następujące działania:
- Kompilowanie aplikacji .NET Service Fabric
- Wdrażanie aplikacji w klastrze zdalnym
- Dodawanie punktu końcowego HTTPS do usługi frontonu platformy ASP.NET Core
- Konfigurowanie ciągłej integracji/ciągłego wdrażania przy użyciu usługi Azure Pipelines
- Konfigurowanie monitorowania i diagnostyki aplikacji (w tym samouczku)
Wymagania wstępne
Przed rozpoczęciem tego samouczka:
- Jeśli nie masz subskrypcji platformy Azure, utwórz bezpłatne konto.
- Zainstaluj program Visual Studio 2019, w tym pakiet roboczy Programowanie na platformie Azure oraz pakiet roboczy ASP.NET i tworzenie aplikacji internetowych.
- Zainstaluj zestaw SDK usługi Service Fabric.
Pobieranie przykładowej aplikacji do głosowania
Jeśli nie skompilujesz przykładowej aplikacji voting w części jednej z tej serii samouczków, możesz ją pobrać. W oknie polecenia lub terminalu uruchom następujące polecenie, aby sklonować przykładowe repozytorium aplikacji na komputer lokalny:
git clone https://github.com/Azure-Samples/service-fabric-dotnet-quickstart
Konfigurowanie zasobu usługi Application Insights
Application Insights to platforma zarządzania wydajnością aplikacji platformy Azure. Zalecamy używanie usługi Application Insights do monitorowania i diagnostyki aplikacji w usłudze Service Fabric.
Aby utworzyć zasób usługi Application Insights, przejdź do witryny Azure Portal. Wybierz pozycję Utwórz zasób. W menu portalu wybierz pozycję Monitorowanie i diagnostyka. W kolumnie Popularne usługi platformy Azure w obszarze Application Insights wybierz pozycję Utwórz.
Wprowadź lub wybierz wartości w polach Subskrypcja, Grupa zasobów i Nazwa. W obszarze Region wybierz miejsce wdrożenia klastra usługi Service Fabric w przyszłości. W tym samouczku wdrożymy aplikację w klastrze lokalnym, więc region świadczenia usługi Azure jest nieistotny. W polu Typ aplikacji pozostaw wartość ASP.NET aplikacji internetowej.
Po wprowadzeniu lub wybraniu wymaganych informacji wybierz pozycję Utwórz , aby aprowizować zasób. Zasób jest wdrażany w ciągu około jednej minuty.
Dodawanie usługi Application Insights do usług aplikacji
Otwórz program Visual Studio 2019 przy użyciu opcji Uruchom jako administrator (kliknij prawym przyciskiem myszy ikonę programu Visual Studio w menu Start ). Wybierz pozycję Plik>Otwórz>projekt/rozwiązanie i przejdź do aplikacji do głosowania (utworzonej w części jednego z samouczków lub sklonowanej z usługi GitHub). Otwórz Voting.sln. Jeśli zostanie wyświetlony monit o przywrócenie pakietów NuGet aplikacji, wybierz pozycję Tak.
Aby skonfigurować usługę Application Insights dla usług VotingWeb i VotingData:
Kliknij prawym przyciskiem myszy nazwę usługi, a następnie wybierz pozycję Dodaj>monitorowanie usług>połączonych za pomocą usługi Application Insights.
Uwaga
W zależności od typu projektu po kliknięciu prawym przyciskiem myszy nazwy usługi może być konieczne wybranie pozycji Dodaj , a następnie wybranie pozycji Telemetria usługi Application Insights.
Wybierz Rozpocznij.
Zaloguj się do konta używanego dla subskrypcji platformy Azure i wybierz subskrypcję, w której utworzono zasób usługi Application Insights. Aby znaleźć zasób, w obszarze Zasób przejdź do pozycji Istniejący zasób usługi Application Insights. Wybierz pozycję Zarejestruj, aby dodać usługę Application Insights do usługi.
Wybierz Zakończ.
Uwaga
Pamiętaj, aby wykonać te kroki dla obu usług w aplikacji, aby zakończyć konfigurowanie usługi Application Insights dla aplikacji. W przypadku obu usług jest używany ten sam zasób usługi Application Insights na potrzeby obsługi żądań przychodzących i wychodzących oraz komunikacji między usługami.
Dodawanie pakietu NuGet Microsoft.ApplicationInsights.ServiceFabric.Native do usług
Usługa Application Insights ma dwa pakiety NuGet specyficzne dla usługi Service Fabric, których można używać w zależności od scenariusza. Jeden z nich jest używany z usługami natywnymi usługi Service Fabric, a drugi z kontenerami i plikami wykonywalnymi gościa. W tym przypadku używamy pakietu NuGet Microsoft.ApplicationInsights.ServiceFabric.Native, aby dowiedzieć się więcej o kontekście usługi. Aby uzyskać więcej informacji na temat zestawu SDK usługi Application Insights i pakietów NuGet specyficznych dla usługi Service Fabric, zobacz Microsoft Application Insights for Service Fabric.
Aby skonfigurować pakiet NuGet:
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję Rozwiązanie "Voting" i wybierz polecenie Zarządzaj pakietami NuGet dla rozwiązania.
W oknie dialogowym NuGet — rozwiązanie wybierz pozycję Przeglądaj. Zaznacz pole wyboru Dołącz wersję wstępną.
Uwaga
Może być konieczne zainstalowanie pakietu Microsoft.ServiceFabric.Diagnostics.Internal w taki sam sposób, jeśli nie zostało ono wstępnie zainstalowane przed zainstalowaniem pakietu usługi Application Insights.
Wyszukaj ciąg Microsoft.ApplicationInsights.ServiceFabric.Native, a następnie wybierz pakiet NuGet.
W okienku po prawej stronie zaznacz pole wyboru VotingWeb i pole wyboru VotingData . Wybierz Zainstaluj.
W oknie dialogowym Podgląd zmian wybierz przycisk OK, aby zaakceptować licencję. Pakiety NuGet są dodawane do usług.
Następnie skonfiguruj inicjator telemetrii w dwóch usługach. Otwórz VotingWeb.cs i VotingData.cs. Wykonaj następujące kroki w obu plikach kodu:
Dodaj te dwie
using
instrukcje w górnej części każdego pliku po istniejącychusing
instrukcjach:using Microsoft.ApplicationInsights.Extensibility; using Microsoft.ApplicationInsights.ServiceFabric;
W obu plikach w zagnieżdżonej instrukcji
CreateServiceInstanceListeners()
lubCreateServiceReplicaListeners()
w obszarzeConfigureServices
>services
, z innymi zadeklarowanymi usługamireturn
singleton dodaj:.AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))
Ten kod dodaje
Service Context
dane telemetryczne, aby lepiej zrozumieć źródło danych telemetrycznych w usłudze Application Insights. Instrukcja zagnieżdżonareturn
w VotingWeb.cs teraz wygląda podobnie do poniższego przykładu:return new WebHostBuilder() .UseKestrel() .ConfigureServices( services => services .AddSingleton<HttpClient>(new HttpClient()) .AddSingleton<FabricClient>(new FabricClient()) .AddSingleton<StatelessServiceContext>(serviceContext) .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))) .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup<Startup>() .UseApplicationInsights() .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None) .UseUrls(url) .Build();
W VotingData.cs kod wygląda teraz podobnie do tego przykładu:
return new WebHostBuilder()
.UseKestrel()
.ConfigureServices(
services => services
.AddSingleton<StatefulServiceContext>(serviceContext)
.AddSingleton<IReliableStateManager>(this.StateManager)
.AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)))
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseApplicationInsights()
.UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseUniqueServiceUrl)
.UseUrls(url)
.Build();
Sprawdź dokładnie, czy UseApplicationInsights()
metoda jest wywoływana zarówno w VotingWeb.cs , jak i VotingData.cs , jak pokazano w przykładach.
Uwaga
Ta przykładowa aplikacja używa protokołu HTTP do komunikowania się z usługami. Jeśli tworzysz aplikację przy użyciu usługi Service Fabric Service Remoting V2, dodaj również następujące wiersze w tej samej lokalizacji w kodzie:
ConfigureServices(services => services
...
.AddSingleton<ITelemetryModule>(new ServiceRemotingDependencyTrackingTelemetryModule())
.AddSingleton<ITelemetryModule>(new ServiceRemotingRequestTrackingTelemetryModule())
)
Na tym etapie możesz przystąpić do wdrażania aplikacji. Wybierz pozycję Start (lub wybierz F5). Program Visual Studio kompiluje i pakuje aplikację, konfiguruje klaster lokalny i wdraża aplikację w klastrze.
Uwaga
Jeśli nie masz zainstalowanej aktualnej wersji zestawu .NET Core SDK, może wystąpić błąd kompilacji.
Po wdrożeniu aplikacji przejdź do localhost:8080
strony , w której jest uruchomiona aplikacja jednostronicowa voting. Zagłosuj na kilka różnych elementów, aby utworzyć przykładowe dane i dane telemetryczne. Na przykład desery!
Możesz również usunąć niektóre opcje głosowania po zakończeniu dodawania kilku głosów.
Wyświetlanie telemetrii i mapy aplikacji w usłudze Application Insights
W witrynie Azure Portal przejdź do zasobu usługi Application Insights.
Wybierz pozycję Przegląd , aby wrócić do okienka przeglądu zasobu. Wybierz pozycję Wyszukaj , aby wyświetlić przychodzące ślady. Ślady pojawią się w usłudze Application Insights po kilku minutach. Jeśli nie widzisz żadnych śladów, poczekaj minutę, a następnie wybierz przycisk Odśwież .
Przewiń w dół w oknie wyszukiwania, aby wyświetlić wszystkie przychodzące dane telemetryczne dostarczane z usługą Application Insights. Dla każdej akcji, którą wykonano w aplikacji do głosowania, powinno istnieć wychodzące żądanie PUT z VotingWeb (PUT Votes/Put [name]), przychodzące żądanie PUT z VotingData (PUT VoteData/Put [name]), a następnie parę żądań GET na potrzeby odświeżania wyświetlanych danych. Istnieje również ślad zależności dla protokołu HTTP, localhost
ponieważ te żądania są żądaniami HTTP. Oto przykład tego, co widzisz, aby dowiedzieć się, jak jest dodawane jedno głosowanie:
Możesz wybrać ślad, aby wyświetlić więcej szczegółów na jego temat. Usługa Application Insights zawiera przydatne informacje o żądaniu, w tym wartości czasu odpowiedzi i adresu URL żądania. Ponieważ dodano pakiet NuGet specyficzny dla usługi Service Fabric, pobierasz również dane dotyczące aplikacji w kontekście klastra usługi Service Fabric w sekcji Dane niestandardowe. Dane obejmują kontekst usługi, dzięki czemu można zobaczyć wartości PartitionID i ReplicaId źródła żądania i lepiej izolować problemy podczas diagnozowania błędów w aplikacji.
Aby przejść do pozycji Mapa aplikacji, wybierz pozycję Mapa aplikacji w menu zasobów w okienku Przegląd lub wybierz ikonę Mapa aplikacji. Na mapie są wyświetlane dwie połączone usługi.
Mapa aplikacji może pomóc lepiej zrozumieć topologię aplikacji, zwłaszcza gdy zaczniesz dodawać usługi, które współpracują ze sobą. Udostępnia ona również podstawowe dane dotyczące współczynników powodzenia żądań i może pomóc zdiagnozować nieudane żądanie, aby zrozumieć, gdzie wystąpiły problemy. Aby dowiedzieć się więcej, zobacz Application Map in Application Insights (Mapa aplikacji w usłudze Application Insights).
Dodawanie instrumentacji niestandardowej do aplikacji
Mimo że usługa Application Insights udostępnia dane telemetryczne z pudełka, możesz dodać instrumentację niestandardową. Być może masz potrzeby biznesowe dotyczące instrumentacji niestandardowej lub chcesz ulepszyć diagnostykę, gdy coś pójdzie nie tak w aplikacji. Zdarzenia niestandardowe i metryki można pozyskiwać przy użyciu interfejsu API usługi Application Insights.
Następnie dodaj kilka zdarzeń niestandardowych do VoteDataController.cs (w VotingData
>Controllers
), aby śledzić, kiedy głosy są dodawane i usuwane z bazowego votesDictionary
elementu :
Dodaj
using Microsoft.ApplicationInsights;
na końcu innychusing
instrukcji.Zadeklaruj nową wartość dla na
TelemetryClient
początku klasy w obszarze tworzenia klasyIReliableStateManager
:private TelemetryClient telemetry = new TelemetryClient();
.Put()
W funkcji dodaj zdarzenie, które potwierdza dodanie głosu. Dodajtelemetry.TrackEvent($"Added a vote for {name}");
po zakończeniu transakcji bezpośrednio przed instrukcją returnOkResult
.W
Delete()
systemie istnieje "if/else" na podstawie warunku, któryvotesDictionary
zawiera głosy dla określonej opcji głosowania.- Dodaj zdarzenie, które potwierdza usunięcie głosu w instrukcji
if
po :await tx.CommitAsync()
telemetry.TrackEvent($"Deleted votes for {name}");
- Dodaj zdarzenie, aby pokazać, że usunięcie nie miało miejsca w instrukcji
else
przed instrukcjąreturn
:telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");
- Dodaj zdarzenie, które potwierdza usunięcie głosu w instrukcji
Oto przykład tego, jak funkcje Put()
i Delete()
mogą wyglądać po dodaniu zdarzeń:
// PUT api/VoteData/name
[HttpPut("{name}")]
public async Task<IActionResult> Put(string name)
{
var votesDictionary = await this.stateManager.GetOrAddAsync<IReliableDictionary<string, int>>("counts");
using (ITransaction tx = this.stateManager.CreateTransaction())
{
await votesDictionary.AddOrUpdateAsync(tx, name, 1, (key, oldvalue) => oldvalue + 1);
await tx.CommitAsync();
}
telemetry.TrackEvent($"Added a vote for {name}");
return new OkResult();
}
// DELETE api/VoteData/name
[HttpDelete("{name}")]
public async Task<IActionResult> Delete(string name)
{
var votesDictionary = await this.stateManager.GetOrAddAsync<IReliableDictionary<string, int>>("counts");
using (ITransaction tx = this.stateManager.CreateTransaction())
{
if (await votesDictionary.ContainsKeyAsync(tx, name))
{
await votesDictionary.TryRemoveAsync(tx, name);
await tx.CommitAsync();
telemetry.TrackEvent($"Deleted votes for {name}");
return new OkResult();
}
else
{
telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");
return new NotFoundResult();
}
}
}
Po zakończeniu wprowadzania tych zmian wybierz pozycję Uruchom w aplikacji, aby skompilować i wdrożyć najnowszą wersję. Po zakończeniu wdrażania aplikacji przejdź do strony localhost:8080
. Dodaj i usuń niektóre opcje głosowania. Następnie wróć do zasobu usługi Application Insights, aby wyświetlić ślady najnowszego przebiegu (śledzenie trwa od 1 do 2 minut w usłudze Application Insights). Dla wszystkich głosów, które zostały dodane i usunięte, powinien zostać wyświetlony wpis zdarzenia niestandardowego ze skojarzonymi telemetriami odpowiedzi.
Powiązana zawartość
- Dowiedz się więcej na temat monitorowania i diagnostyki w usłudze Service Fabric.
- Przejrzyj analizę zdarzeń usługi Service Fabric przy użyciu usługi Application Insights.
- Dowiedz się więcej o usłudze Application Insights.