Udostępnij za pośrednictwem


Samouczek: monitorowanie i diagnozowanie aplikacji usługi Service Fabric przy użyciu Szczegółowe informacje aplikacji

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 Szczegółowe informacje. 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 Szczegółowe informacje aplikacji
  • Dodawanie instrumentacji niestandardowej do aplikacji

W serii samouczków pokazano, jak wykonać następujące działania:

Wymagania wstępne

Przed rozpoczęciem tego samouczka:

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

Szczegółowe informacje aplikacji to platforma zarządzania wydajnością aplikacji platformy Azure. Zalecamy używanie Szczegółowe informacje aplikacji do monitorowania i diagnostyki aplikacji w usłudze Service Fabric.

Aby utworzyć zasób Szczegółowe informacje aplikacji, 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 Aplikacja Szczegółowe informacje wybierz pozycję Utwórz.

Zrzut ekranu przedstawiający sposób tworzenia nowego zasobu aplikacji Szczegółowe informacje.

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.

Zrzut ekranu przedstawiający atrybuty zasobów Szczegółowe informacje aplikacji.

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ć Szczegółowe informacje aplikacji dla usług VotingWeb i VotingData:

  1. Kliknij prawym przyciskiem myszy nazwę usługi, a następnie wybierz pozycję Dodaj Połączenie ed Services Monitoring with Application Szczegółowe informacje (Monitorowanie> usług>za pomocą aplikacji Szczegółowe informacje).

    Zrzut ekranu przedstawiający konfigurowanie usług Szczegółowe informacje aplikacji.

    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 Aplikacja Szczegółowe informacje Telemetria.

  2. Wybierz Rozpocznij.

  3. Zaloguj się do konta używanego dla subskrypcji platformy Azure i wybierz subskrypcję, w której utworzono zasób Application Szczegółowe informacje. Aby znaleźć zasób, w obszarze Zasób przejdź do pozycji Istniejąca aplikacja Szczegółowe informacje zasób. Wybierz pozycję Zarejestruj, aby dodać Szczegółowe informacje aplikacji do usługi.

    Zrzut ekranu przedstawiający sposób rejestrowania Szczegółowe informacje aplikacji.

  4. Wybierz Zakończ.

Uwaga

Pamiętaj, aby wykonać te kroki dla obu usług w aplikacji, aby zakończyć konfigurowanie aplikacji Szczegółowe informacje 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

Aplikacja Szczegółowe informacje ma dwa pakiety NuGet specyficzne dla usługi Service Fabric, których można użyć 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 aplikacji Microsoft.Application Szczegółowe informacje. Pakiet NuGet ServiceFabric.Native, aby dowiedzieć się więcej o kontekście usługi. Aby uzyskać więcej informacji na temat zestawu SDK usługi Application Szczegółowe informacje i pakietów NuGet specyficznych dla usługi Service Fabric, zobacz Microsoft Application Szczegółowe informacje for Service Fabric.

Aby skonfigurować pakiet NuGet:

  1. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję Rozwiązanie "Voting" i wybierz polecenie Zarządzaj pakietami NuGet dla rozwiązania.

  2. 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 Szczegółowe informacje aplikacji.

  3. Wyszukaj ciąg Microsoft.Application Szczegółowe informacje. ServiceFabric.Native, a następnie wybierz pakiet NuGet.

  4. W okienku po prawej stronie zaznacz pole wyboru VotingWeb i pole wyboru VotingData . Wybierz Zainstaluj.

    Zrzut ekranu przedstawiający zestaw SDK Szczegółowe informacje aplikacji w narzędziu NuGet.

  5. W oknie dialogowym Podgląd zmian wybierz przycisk OK, aby zaakceptować licencję. Pakiety NuGet są dodawane do usług.

  6. 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:

    1. Dodaj te dwie using instrukcje w górnej części każdego pliku po istniejących using instrukcjach:

      using Microsoft.ApplicationInsights.Extensibility;
      using Microsoft.ApplicationInsights.ServiceFabric;
      
    2. W obu plikach w zagnieżdżonej instrukcji CreateServiceInstanceListeners() lub CreateServiceReplicaListeners()w obszarze ConfigureServices>services, z innymi zadeklarowanymi usługami return 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 Szczegółowe informacje. Instrukcja zagnieżdżona return 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 klawisz 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:8080strony , 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!

Zrzut ekranu przedstawiający przykład głosowania na typy deserów.

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 Szczegółowe informacje aplikacji

W witrynie Azure Portal przejdź do zasobu Szczegółowe informacje aplikacji.

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ż .

Zrzut ekranu przedstawiający widok śledzenia w Szczegółowe informacje aplikacji.

Przewiń w dół w oknie wyszukiwania, aby wyświetlić wszystkie przychodzące dane telemetryczne dostarczane z aplikacją Szczegółowe informacje. 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:

Zrzut ekranu przedstawiający przykładowy ślad żądania w Szczegółowe informacje aplikacji.

Możesz wybrać ślad, aby wyświetlić więcej szczegółów na jego temat. Aplikacja Szczegółowe informacje 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.

Zrzut ekranu przedstawiający szczegóły śledzenia Szczegółowe informacje 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.

Zrzut ekranu przedstawiający mapę aplikacji w menu zasobów.

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 Mapa aplikacji w Szczegółowe informacje aplikacji.

Dodawanie instrumentacji niestandardowej do aplikacji

Mimo że Szczegółowe informacje aplikacji udostępnia dane telemetryczne poza ramkę, 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 Szczegółowe informacje aplikacji.

Następnie dodaj kilka zdarzeń niestandardowych do VoteDataController.cs (w VotingData>Controllers), aby śledzić, kiedy głosy są dodawane i usuwane z bazowego votesDictionaryelementu :

  1. Dodaj using Microsoft.ApplicationInsights; na końcu innych using instrukcji.

  2. Zadeklaruj nową wartość dla na TelemetryClient początku klasy w obszarze tworzenia klasy IReliableStateManager: private TelemetryClient telemetry = new TelemetryClient();.

  3. Put() W funkcji dodaj zdarzenie, które potwierdza dodanie głosu. Dodaj telemetry.TrackEvent($"Added a vote for {name}"); po zakończeniu transakcji bezpośrednio przed instrukcją return OkResult .

  4. W Delete()systemie istnieje "if/else" na podstawie warunku, który votesDictionary zawiera głosy dla określonej opcji głosowania.

    1. Dodaj zdarzenie, które potwierdza usunięcie głosu w instrukcji if po :await tx.CommitAsync()telemetry.TrackEvent($"Deleted votes for {name}");
    2. 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");

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 application Szczegółowe informacje, aby wyświetlić ślady najnowszego przebiegu (ślady mogą pojawić się w aplikacji Szczegółowe informacje od 1 do 2 minut). Dla wszystkich głosów, które zostały dodane i usunięte, powinien zostać wyświetlony wpis zdarzenia niestandardowego ze skojarzonymi telemetriami odpowiedzi.

Zrzut ekranu przedstawiający zdarzenia niestandardowe.