Udostępnij za pośrednictwem


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:

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

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.

Zrzut ekranu przedstawiający sposób tworzenia nowego zasobu usługi Application Insights.

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 usługi Application Insights.

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:

  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.

    Zrzut ekranu przedstawiający konfigurowanie usług 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.

  2. Wybierz Rozpocznij.

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

    Zrzut ekranu przedstawiający sposób rejestrowania usługi Application Insights.

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

  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 usługi Application Insights.

  3. Wyszukaj ciąg Microsoft.ApplicationInsights.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 usługi Application Insights 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 Insights. 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 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 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:

Zrzut ekranu przedstawiający przykładowy ślad żądania w usłudze Application Insights.

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.

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

Zrzut ekranu przedstawiający zdarzenia niestandardowe.