Udostępnij za pośrednictwem


Tworzenie raportów i sprawdzanie kondycji usług

Gdy twoje usługi napotykają problemy, możliwość reagowania na zdarzenia i ich naprawiania zależy od możliwości szybkiego wykrywania problemów. Jeśli zgłaszasz problemy i niepowodzenia menedżera kondycji usługi Azure Service Fabric z poziomu kodu usługi, możesz użyć standardowych narzędzi do monitorowania kondycji zapewnianych przez usługę Service Fabric w celu sprawdzenia stanu kondycji.

Istnieją trzy sposoby raportowania kondycji z poziomu usługi:

  • Użyj obiektów Partition lub CodePackageActivationContext .
    Obiekty i CodePackageActivationContext umożliwiają Partition raportowanie kondycji elementów będących częścią bieżącego kontekstu. Na przykład kod uruchamiany w ramach repliki może zgłaszać kondycję tylko dla tej repliki, partycji, do których należy, oraz aplikacji, do których należy.
  • Użyj witryny FabricClient.
    Możesz użyć FabricClient polecenia , aby zgłosić kondycję z kodu usługi, jeśli klaster nie jest bezpieczny lub czy usługa jest uruchomiona z uprawnieniami administratora. Większość rzeczywistych scenariuszy nie używa niezabezpieczonych klastrów ani nie zapewnia uprawnień administratora. Za pomocą FabricClientprogramu można zgłaszać kondycję dowolnej jednostki będącej częścią klastra. W idealnym przypadku kod usługi powinien jednak wysyłać tylko raporty powiązane z własnym zdrowiem.
  • Użyj interfejsów API REST na poziomie klastra, aplikacji, wdrożonej aplikacji, usługi, pakietu usługi, partycji, repliki lub węzła. Może to służyć do raportowania kondycji z poziomu kontenera.

W tym artykule przedstawiono przykład raportujący kondycję z kodu usługi. W przykładzie pokazano również, jak narzędzia udostępniane przez usługę Service Fabric mogą służyć do sprawdzania stanu kondycji. Ten artykuł jest przeznaczony do szybkiego wprowadzenia do możliwości monitorowania kondycji usługi Service Fabric. Aby uzyskać bardziej szczegółowe informacje, możesz przeczytać serię szczegółowych artykułów na temat kondycji, które zaczynają się od linku na końcu tego artykułu.

Wymagania wstępne

Musisz mieć zainstalowane następujące elementy:

  • Visual Studio 2015 lub Visual Studio 2019
  • Service Fabric SDK

Aby utworzyć lokalny bezpieczny klaster deweloperski

  • Otwórz program PowerShell z uprawnieniami administratora i uruchom następujące polecenia:

Polecenia pokazujące sposób tworzenia bezpiecznego klastra deweloperskiego

Aby wdrożyć aplikację i sprawdzić jej kondycję

  1. Otwórz program Visual Studio jako administrator.

  2. Utwórz projekt przy użyciu szablonu Usługi stanowej.

    Tworzenie aplikacji usługi Service Fabric z usługą stanową

  3. Naciśnij F5 , aby uruchomić aplikację w trybie debugowania. Aplikacja jest wdrażana w klastrze lokalnym.

  4. Po uruchomieniu aplikacji kliknij prawym przyciskiem myszy ikonę Menedżer klastra lokalnego w obszarze powiadomień i wybierz polecenie Zarządzaj klastrem lokalnym z menu skrótów, aby otworzyć narzędzie Service Fabric Explorer.

    Otwieranie narzędzia Service Fabric Explorer z obszaru powiadomień

  5. Kondycja aplikacji powinna być wyświetlana tak jak na tym obrazie. W tej chwili aplikacja powinna być w dobrej kondycji bez błędów.

    Aplikacja w dobrej kondycji w narzędziu Service Fabric Explorer

  6. Kondycję można również sprawdzić przy użyciu programu PowerShell. Możesz użyć Get-ServiceFabricApplicationHealth Get-ServiceFabricServiceHealth polecenia , aby sprawdzić kondycję aplikacji i sprawdzić kondycję usługi. Raport kondycji dla tej samej aplikacji w programie PowerShell znajduje się na tej ilustracji.

    Aplikacja w dobrej kondycji w programie PowerShell

Aby dodać niestandardowe zdarzenia kondycji do kodu usługi

Szablony projektów usługi Service Fabric w programie Visual Studio zawierają przykładowy kod. W poniższych krokach pokazano, jak można zgłaszać niestandardowe zdarzenia kondycji z poziomu kodu usługi. Takie raporty są wyświetlane automatycznie w standardowych narzędziach do monitorowania kondycji zapewnianych przez usługę Service Fabric, takich jak Service Fabric Explorer, Widok kondycji witryny Azure Portal i program PowerShell.

  1. Otwórz ponownie aplikację utworzoną wcześniej w programie Visual Studio lub utwórz nową aplikację przy użyciu szablonu Stateful Service Visual Studio.

  2. Otwórz plik Stateful1.cs i znajdź wywołanie myDictionary.TryGetValueAsync w metodzie RunAsync . Widać, że ta metoda zwraca result wartość, która przechowuje bieżącą wartość licznika, ponieważ logika klucza w tej aplikacji polega na zachowaniu liczby uruchomionych. Jeśli ta aplikacja była prawdziwą aplikacją, a brak wyniku stanowił błąd, należy oznaczyć to zdarzenie.

  3. Aby zgłosić zdarzenie kondycji, gdy brak wyniku reprezentuje błąd, dodaj następujące kroki.

    a. System.Fabric.Health Dodaj przestrzeń nazw do pliku Stateful1.cs.

    using System.Fabric.Health;
    

    b. Dodaj następujący kod po wywołaniu myDictionary.TryGetValueAsync

    if (!result.HasValue)
    {
        HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
        this.Partition.ReportReplicaHealth(healthInformation);
    }
    

    Zgłaszamy kondycję repliki, ponieważ jest ona zgłaszana z usługi stanowej. Parametr HealthInformation przechowuje informacje o zgłaszanym problemie z kondycją.

    Jeśli utworzono usługę bezstanową, użyj następującego kodu

    if (!result.HasValue)
    {
        HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
        this.Partition.ReportInstanceHealth(healthInformation);
    }
    
  4. Jeśli usługa jest uruchomiona z uprawnieniami administratora lub jeśli klaster nie jest bezpieczny, możesz również użyć FabricClient polecenia do raportowania kondycji, jak pokazano w poniższych krokach.

    a. FabricClient Utwórz wystąpienie po deklaracjivar myDictionary.

    var fabricClient = new FabricClient(new FabricClientSettings() { HealthReportSendInterval = TimeSpan.FromSeconds(0) });
    

    b. Dodaj następujący kod po wywołaniu myDictionary.TryGetValueAsync .

    if (!result.HasValue)
    {
       var replicaHealthReport = new StatefulServiceReplicaHealthReport(
            this.Context.PartitionId,
            this.Context.ReplicaId,
            new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error));
        fabricClient.HealthManager.ReportHealth(replicaHealthReport);
    }
    
  5. Symulujmy ten błąd i zobaczmy, jak jest on wyświetlany w narzędziach do monitorowania kondycji. Aby zasymulować błąd, oznacz jako komentarz pierwszy wiersz w dodanym wcześniej kodzie raportowania kondycji. Po oznaczeniu komentarza w pierwszym wierszu kod będzie wyglądać podobnie do poniższego przykładu.

    //if(!result.HasValue)
    {
        HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
        this.Partition.ReportReplicaHealth(healthInformation);
    }
    

    Ten kod uruchamia raport kondycji za każdym razem, gdy RunAsync jest wykonywany. Po wprowadzeniu zmiany naciśnij F5 , aby uruchomić aplikację.

  6. Po uruchomieniu aplikacji otwórz narzędzie Service Fabric Explorer, aby sprawdzić kondycję aplikacji. Tym razem program Service Fabric Explorer pokazuje, że aplikacja jest w złej kondycji. Aplikacja jest wyświetlana jako w złej kondycji, ponieważ błąd zgłoszony z kodu, który dodaliśmy wcześniej.

    Aplikacja w złej kondycji w narzędziu Service Fabric Explorer

  7. Jeśli wybierzesz replikę podstawową w widoku drzewa narzędzia Service Fabric Explorer, zobaczysz, że stan kondycji również wskazuje błąd. Program Service Fabric Explorer wyświetla również szczegóły raportu kondycji dodane do parametru HealthInformation w kodzie. Te same raporty dotyczące kondycji można wyświetlić w programie PowerShell i witrynie Azure Portal.

    Kondycja repliki w narzędziu Service Fabric Explorer

Ten raport pozostaje w menedżerze kondycji, dopóki nie zostanie zastąpiony przez inny raport lub dopóki ta replika nie zostanie usunięta. Ponieważ nie ustawiono TimeToLive dla tego raportu kondycji HealthInformation w obiekcie, raport nigdy nie wygasa.

Zalecamy raportowanie kondycji na najbardziej szczegółowym poziomie, który w tym przypadku jest repliką. Możesz również zgłosić kondycję w witrynie Partition.

HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
this.Partition.ReportPartitionHealth(healthInformation);

Aby zgłosić kondycję w systemach Application, DeployedApplicationi DeployedServicePackage, użyj polecenia CodePackageActivationContext.

HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
var activationContext = FabricRuntime.GetActivationContext();
activationContext.ReportApplicationHealth(healthInformation);

Następne kroki