Samouczek: monitorowanie i diagnozowanie aplikacji platformy ASP.NET Core w usłudze Service Fabric przy użyciu usługi Application Insights

Niniejszy samouczek jest piątą częścią serii. Przedstawiono w nim kroki konfigurowania monitorowania i diagnostyki dla aplikacji ASP.NET Core działającej w klastrze usługi Service Fabric przy użyciu usługi Application Insights. Będziemy zbierać dane telemetryczne z aplikacji opracowanej w pierwszej części samouczka: Tworzenie aplikacji platformy .NET w usłudze Service Fabric.

W czwartej części serii samouczków zawarto informacje na temat wykonywania następujących czynności:

  • Konfigurowanie usługi Application Insights dla aplikacji
  • Zbieranie danych telemetrycznych odpowiedzi na potrzeby śledzenia komunikacji między usługami opartej na protokole HTTP
  • Używanie funkcji mapy aplikacji w usłudze Application Insights
  • Dodawanie zdarzeń niestandardowych za pomocą interfejsu API usługi Application Insights

Ta seria samouczków zawiera informacje na temat wykonywania następujących czynności:

Wymagania wstępne

Przed rozpoczęciem tego samouczka:

Pobieranie przykładowej aplikacji do głosowania

Jeśli przykładowa aplikacja do głosowania nie została utworzona w części jednej z tej serii samouczków, możesz ją pobrać. W oknie lub terminalu polecenia 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

Usługa Application Insights pełni funkcję platformy do zarządzania wydajnością aplikacji platformy Azure i zalecanej platformy usługi Service Fabric do monitorowania i diagnostyki aplikacji.

Aby utworzyć zasób usługi Application Insights, przejdź do witryny Azure Portal. Wybierz pozycję Utwórz zasób w menu nawigacji po lewej stronie, aby otworzyć witrynę Azure Marketplace. Wybierz pozycję Monitorowanie i zarządzanie , a następnie pozycję Application Insights.

Create new AI resource

Teraz musisz podać wymagane informacje dotyczące atrybutów zasobu, który ma zostać utworzony. Wprowadź odpowiednią nazwę, grupę zasobów i subskrypcję. Ustaw lokalizację, w której ma być wdrażany klaster usługi Service Fabric w przyszłości. W tym samouczku wdrożono aplikację w klastrze lokalnym, więc pole Lokalizacja nie jest potrzebne. W polu Typ aplikacji pozostaw wartość „Aplikacja internetowa platformy ASP.NET”.

AI resource attributes

Po wypełnieniu wymaganych informacji wybierz pozycję Utwórz , aby aprowizować zasób — powinno to potrwać około minuty.

Dodawanie usługi Application Insights do usług aplikacji

Uruchom program Visual Studio 2019 z podwyższonym poziomem uprawnień, klikając prawym przyciskiem myszy ikonę programu Visual Studio w menu Start i wybierając polecenie Uruchom jako administrator. Wybierz pozycję Plik>Otwórz>projekt/rozwiązanie i przejdź do aplikacji do głosowania (utworzonej w części jednego z samouczków lub sklonowanego narzędzia Git). Otwórz plik Voting.sln. Jeśli zostanie wyświetlony monit o przywrócenie pakietów NuGet aplikacji, wybierz pozycję Tak.

Wykonaj następujące kroki, aby skonfigurować usługę Application Insights dla usług VotingWeb i VotingData:

  1. Kliknij prawym przyciskiem myszy nazwę usługi, a następnie wybierz pozycję Dodaj > monitorowanie usług > połączonych za pomocą usługi Application Insights.

    Configure AI

Uwaga

W zależności od typu projektu po kliknięciu prawym przyciskiem myszy nazwy usługi może być konieczne wybranie pozycji Dodaj—> dane telemetryczne usługi Application Insights...

  1. Wybierz pozycję Rozpocznij.

  2. Zaloguj się do konta używanego dla subskrypcji platformy Azure i wybierz subskrypcję, w której utworzono zasób usługi Application Insights. Znajdź zasób w obszarze Istniejący zasób usługi Application Insights na liście rozwijanej „Zasób”. Wybierz pozycję Zarejestruj, aby dodać usługę Application Insights do usługi.

    Register AI

  3. Kliknij przycisk Zakończ, gdy okno dialogowe, które się pojawi, ukończy działanie.

Uwaga

Upewnij się, że wykonano powyższe czynności 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 obejmuje dwa pakiety NuGet 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 zostanie użyty pakiet NuGet Microsoft.ApplicationInsights.ServiceFabric.Native, który pozwala rozpoznać udostępniany kontekst usługi. Aby dowiedzieć się więcej na temat zestawu SDK usługi Application Insights i pakietów NuGet specyficznych dla usługi Service Fabric, zobacz Usługa Microsoft Application Insights dla usługi Service Fabric.

Poniżej przedstawiono kroki konfigurowania pakietu NuGet:

  1. Kliknij prawym przyciskiem myszy pozycję Rozwiązanie "Voting" w górnej części Eksploratora rozwiązań, a następnie wybierz pozycję Zarządzaj pakietami NuGet dla rozwiązania....
  2. Wybierz pozycję Przeglądaj w górnym menu nawigacji okna "NuGet — rozwiązanie" i zaznacz pole Uwzględnij wersję wstępną obok paska wyszukiwania.

Uwaga

Przed zainstalowaniem pakietu usługi Application Insights może być konieczne zainstalowanie pakietu Microsoft.ServiceFabric.Diagnostics.Internal w podobny sposób, jeśli nie został on wstępnie zainstalowany

  1. Microsoft.ApplicationInsights.ServiceFabric.Native Wyszukaj i wybierz odpowiedni pakiet NuGet.

  2. Po prawej stronie zaznacz dwa pola wyboru obok dwóch usług w aplikacji VotingWeb i VotingData , a następnie wybierz pozycję Zainstaluj. AI sdk Nuget

  3. Wybierz przycisk OK w wyświetlonym oknie dialogowym Podgląd zmian i zaakceptuj akceptację licencji. Dodawanie pakietu NuGet do usług zostanie ukończone.

  4. Teraz musisz skonfigurować inicjator telemetrii w tych dwóch usługach. W tym celu otwórz pliki VotingWeb.cs i VotingData.cs. W przypadku obu plików wykonaj następujące dwie czynności:

    1. Dodaj te dwie instrukcje using w górnej części każdego <pliku ServiceName.cs> po istniejących instrukcjach using:
    using Microsoft.ApplicationInsights.Extensibility;
    using Microsoft.ApplicationInsights.ServiceFabric;
    
    1. W obu plikach w zagnieżdżonej instrukcji returncreateServiceInstanceListeners() lub CreateServiceReplicaListeners(), w obszarze ConfigureServices>services z innymi zadeklarowanymi usługami singleton dodaj:
    .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))
    

    Spowoduje to dodanie kontekstu usługi do telemetrii, co umożliwi lepsze zrozumienie źródła telemetrii w usłudze Application Insights. Zagnieżdżona instrukcja return w pliku VotingWeb.cs powinna wyglądać następująco:

    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();
    

    Podobnie w pliku VotingData.cs powinna wyglądać następująco:

    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 w plikach VotingWeb.cs i VotingData.cs , jak pokazano powyżej.

Uwaga

Przykładowa aplikacja używa protokołu HTTP dla zapewnienia komunikacji usług. W przypadku tworzenia aplikacji za pomocą wersji 2 zdalnej komunikacji usług musisz również dodać następujące wiersze kodu w tym samym miejscu co wcześniej.

ConfigureServices(services => services
    ...
    .AddSingleton<ITelemetryModule>(new ServiceRemotingDependencyTrackingTelemetryModule())
    .AddSingleton<ITelemetryModule>(new ServiceRemotingRequestTrackingTelemetryModule())
)

Teraz możesz wdrożyć aplikację. Wybierz pozycję Uruchom u góry (lub F5), a program Visual Studio skompiluje i spakuje aplikację, skonfiguruje klaster lokalny i wdroży w niej aplikację.

Uwaga

Jeśli nie masz zainstalowanej aktualnej wersji zestawu .NET Core SDK, może wystąpić błąd kompilacji.

Po zakończeniu wdrażania aplikacji przejdź do localhost:8080strony , w której powinna być widoczna aplikacja jednostronicowa przykładu voting. Zagłosuj na kilka różnych wybranych elementów, aby utworzyć przykładowe dane i dane telemetryczne — w tym przypadku wybrano desery.

AI sample votes

Możesz też usunąć niektóre opcje głosowania po dodaniu kilka głosów.

Wyświetlanie danych telemetrycznych i mapy aplikacji w usłudze Application Insights

Przejdź do zasobu usługi Application Insights w witrynie Azure Portal.

Wybierz pozycję Przegląd , aby wrócić do strony docelowej zasobu. Następnie wybierz pozycję Wyszukaj u góry, aby wyświetlić przychodzące ślady. Ślady pojawią się w usłudze Application Insights po kilku minutach. Jeśli nie będą wyświetlane żadne ślady, poczekaj chwilę i kliknij przycisk Odśwież u góry. AI see traces

Przewinięcie w dół w oknie Wyszukiwanie spowoduje wyświetlenie wszystkich przychodzących danych telemetrycznych dostarczanych z usługą Application Insights. Dla każdej akcji wykonanej w aplikacji do głosowania powinno istnieć wychodzące żądanie PUT z usługi VotingWeb (PUT Votes/Put [nazwa]) i przychodzące żądanie PUT z usługi VotingData (PUT VoteData/Put [nazwa]), a po nich para żądań GET umożliwiających odświeżenie wyświetlanych danych. Będzie również istnieć ślad zależności dla protokołu HTTP na hoście lokalnym, ponieważ są to żądania HTTP. Oto przykład dodania jednego głosu:

AI sample request trace

Możesz wybrać jeden ze śladów, aby wyświetlić więcej szczegółów na jego temat. Są dostępne przydatne informacje dotyczące żądania udostępniane przez usługę Application Insights, w tym czas odpowiedzi i adres URL żądania. Dodano pakiet NuGet usługi Service Fabric, dlatego uzyskasz również dane dotyczące aplikacji w kontekście klastra usługi Service Fabric w poniższej sekcji Dane niestandardowe. Obejmuje to kontekst usługi, aby umożliwić wyświetlenie elementów PartitionID i ReplicaId źródła żądania oraz lepszej wykrywanie problemów podczas diagnozowania błędów w aplikacji.

AI trace details

Ponadto możesz wybrać pozycję Mapa aplikacji w menu po lewej stronie na stronie Przegląd lub wybrać ikonę Mapa aplikacji, aby przejść do mapy aplikacji z wyświetlonymi dwiema połączonymi usługami.

Screenshot that highlights Application map in the left menu.

Mapa aplikacji pozwala lepiej zrozumieć topologię aplikacji, szczególnie w przypadku dodawania wielu różnych współdziałających ze sobą usług. Udostępnia ona również podstawowe współczynniki powodzeń żądań i ułatwia diagnozowanie nieudanych żądań, dzięki czemu można lepiej zrozumieć błędy. Aby dowiedzieć się więcej o korzystaniu z mapy aplikacji, zobacz Mapa aplikacji w usłudze Application Insights.

Dodawanie instrumentacji niestandardowej do aplikacji

Usługa Application Insights udostępnia wiele funkcji telemetrycznych, jednak możesz dodać więcej instrumentacji niestandardowych. Może to być instrumentacja dostosowana do określonych wymagań biznesowych lub oferująca lepszą diagnostykę w przypadku problemów w aplikacji. Usługa Application Insights udostępnia interfejs API umożliwiający pozyskiwanie niestandardowych zdarzeń i metryk, o których można przeczytać więcej tutaj.

Dodajmy zdarzenia niestandardowe do pliku VoteDataController.cs (w obszarze VotingData>Kontrolery), aby śledzić dodawanie i usuwanie głosów w lokalizacji votesDictionary.

  1. Dodaj element using Microsoft.ApplicationInsights; na końcu pozostałych instrukcji using.
  2. Zadeklaruj nowy element TelemetryClient na początku klasy po utworzeniu elementu IReliableStateManager: private TelemetryClient telemetry = new TelemetryClient();.
  3. W funkcji Put() dodaj zdarzenie potwierdzające dodanie głosu. Dodaj element telemetry.TrackEvent($"Added a vote for {name}"); po ukończeniu transakcji bezpośrednio przed instrukcją return OkResult.
  4. W funkcji Delete() znajduje się element „if/else” oparty na warunku, zgodnie z którym element votesDictionary zawiera głosy dla danej opcji głosowania.
    1. Dodaj zdarzenie potwierdzające usunięcie głosu w instrukcji if po elemencie await tx.CommitAsync(): telemetry.TrackEvent($"Deleted votes for {name}");
    2. Dodaj zdarzenie, aby wskazać, że usunięcie nie zostało wykonane w instrukcji else, przed instrukcją return: telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");

Oto przykładowe funkcje Put() i Delete() 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 uruchom aplikację, aby skompilować i wdrożyć najnowszą wersję. Po zakończeniu wdrażania aplikacji przejdź do localhost:8080strony , a następnie dodaj i usuń niektóre opcje głosowania. Następnie wróć do zasobu usługi Application Insights, aby wyświetlić ślady najnowszego przebiegu (tak jak wcześniej, ślady mogą potrwać od 1 do 2 minut w usłudze Application Insights). W przypadku wszystkich dodanych i usuniętych głosów powinny być wyświetlane tekst „Zdarzenie niestandardowe* oraz wszystkie dane telemetryczne odpowiedzi.

custom events

Następne kroki

W niniejszym samouczku zawarto informacje na temat wykonywania następujących czynności:

  • Konfigurowanie usługi Application Insights dla aplikacji
  • Zbieranie danych telemetrycznych odpowiedzi na potrzeby śledzenia komunikacji między usługami opartej na protokole HTTP
  • Używanie funkcji mapy aplikacji w usłudze Application Insights
  • Dodawanie zdarzeń niestandardowych za pomocą interfejsu API usługi Application Insights

Po skonfigurowaniu monitorowania i diagnostyki dla aplikacji ASP.NET spróbuj wykonać następujące czynności: