Udostępnij za pośrednictwem


Wyświetlanie raportów kondycji usługi Service Fabric

Usługa Azure Service Fabric wprowadza model kondycji z jednostkami kondycji, w których składniki systemu i watchdogs mogą zgłaszać lokalne warunki monitorowania. Magazyn kondycji agreguje wszystkie dane kondycji, aby określić, czy jednostki są w dobrej kondycji.

Klaster jest automatycznie wypełniany raportami kondycji wysyłanymi przez składniki systemu. Przeczytaj więcej na stronie Używanie raportów kondycji systemu do rozwiązywania problemów.

Usługa Service Fabric oferuje wiele sposobów uzyskiwania zagregowanej kondycji jednostek:

  • Service Fabric Explorer lub inne narzędzia do wizualizacji
  • Zapytania dotyczące kondycji (za pomocą programu PowerShell, interfejsu API lub REST)
  • Zapytania ogólne zwracające listę jednostek, które mają kondycję jako jedną z właściwości (za pomocą programu PowerShell, interfejsu API lub REST)

Aby zademonstrować te opcje, użyjmy klastra lokalnego z pięcioma węzłami i aplikacją fabric:/WordCount. Aplikacja fabric:/WordCount zawiera dwie usługi domyślne, stanową usługę typu WordCountServiceTypei usługę bezstanową typu WordCountWebServiceType. Zmieniono element tak ApplicationManifest.xml , aby wymagał siedmiu replik docelowych dla usługi stanowej i jednej partycji. Ponieważ w klastrze znajduje się tylko pięć węzłów, składniki systemowe zgłaszają ostrzeżenie dotyczące partycji usługi, ponieważ jest poniżej liczby docelowej.

<Service Name="WordCountService">
  <StatefulService ServiceTypeName="WordCountServiceType" TargetReplicaSetSize="7" MinReplicaSetSize="2">
    <UniformInt64Partition PartitionCount="[WordCountService_PartitionCount]" LowKey="1" HighKey="26" />
  </StatefulService>
</Service>

Kondycja w Service Fabric Explorer

Service Fabric Explorer zapewnia wizualny widok klastra. Na poniższej ilustracji widać, że:

  • Sieć szkieletowa aplikacji:/WordCount jest czerwona (w błędzie), ponieważ ma zdarzenie błędu zgłaszane przez myWatchdog dla właściwości Dostępność.
  • Jedna z jego usług fabric:/WordCount/WordCountService jest żółta (w ostrzeżeniu). Usługa jest skonfigurowana z siedmioma replikami, a klaster ma pięć węzłów, więc nie można umieścić dwóch replik. Chociaż w tym miejscu nie jest wyświetlana, partycja usługi jest żółta z powodu raportu systemowego z System.FM informacją, że Partition is below target replica or instance count. Żółta partycja wyzwala żółtą usługę.
  • Klaster jest czerwony z powodu czerwonej aplikacji.

Ocena używa domyślnych zasad z manifestu klastra i manifestu aplikacji. Są to ścisłe zasady i nie tolerują żadnych niepowodzeń.

Widok klastra z Service Fabric Explorer:

Widok klastra z Service Fabric Explorer.

Uwaga

Przeczytaj więcej na temat Service Fabric Explorer.

Zapytania dotyczące kondycji

Usługa Service Fabric uwidacznia zapytania dotyczące kondycji dla każdego z obsługiwanych typów jednostek. Dostęp do nich można uzyskać za pośrednictwem interfejsu API, przy użyciu metod w narzędziu FabricClient.HealthManager, poleceniach cmdlet programu PowerShell i interfejsie REST. Te zapytania zwracają pełne informacje o kondycji jednostki: zagregowany stan kondycji, zdarzenia kondycji jednostki, stany kondycji podrzędnej (jeśli dotyczy), oceny w złej kondycji (gdy jednostka nie jest w dobrej kondycji) i statystyki kondycji dzieci (jeśli dotyczy).

Uwaga

Jednostka kondycji jest zwracana, gdy jest w pełni wypełniona w magazynie kondycji. Jednostka musi być aktywna (nie została usunięta) i mieć raport systemowy. Jego jednostki nadrzędne w łańcuchu hierarchii muszą również zawierać raporty systemowe. Jeśli którykolwiek z tych warunków nie jest spełniony, zapytania dotyczące kondycji zwracają element FabricException z kodem FabricErrorCodeFabricHealthEntityNotFound , który pokazuje, dlaczego jednostka nie jest zwracana.

Zapytania dotyczące kondycji muszą zostać przekazane w identyfikatorze jednostki, który zależy od typu jednostki. Zapytania akceptują opcjonalne parametry zasad kondycji. Jeśli nie określono żadnych zasad kondycji, zasady kondycji z klastra lub manifestu aplikacji są używane do oceny. Jeśli manifesty nie zawierają definicji zasad kondycji, domyślne zasady kondycji są używane do oceny. Domyślne zasady kondycji nie tolerują żadnych błędów. Zapytania akceptują również filtry dotyczące zwracania tylko częściowych elementów podrzędnych lub zdarzeń — tych, które przestrzegają określonych filtrów. Inny filtr umożliwia wykluczenie statystyk podrzędnych.

Uwaga

Filtry wyjściowe są stosowane po stronie serwera, więc rozmiar odpowiedzi komunikatu jest zmniejszony. Zalecamy użycie filtrów wyjściowych w celu ograniczenia zwracanych danych, a nie zastosowania filtrów po stronie klienta.

Kondycja jednostki zawiera następujące elementy:

  • Zagregowany stan kondycji jednostki. Obliczane przez magazyn kondycji na podstawie raportów kondycji jednostek, stanów kondycji podrzędnych (jeśli ma to zastosowanie) i zasad kondycji. Przeczytaj więcej na temat oceny kondycji jednostki.
  • Zdarzenia kondycji jednostki.
  • Kolekcja stanów zdrowia wszystkich dzieci dla jednostek, które mogą mieć dzieci. Stany kondycji zawierają identyfikatory jednostek i zagregowany stan kondycji. Aby uzyskać pełną kondycję elementu podrzędnego, wywołaj kondycję zapytania dla typu jednostki podrzędnej i przekaż identyfikator podrzędny.
  • Oceny w złej kondycji wskazujące raport, który wyzwolił stan jednostki, jeśli jednostka nie jest w dobrej kondycji. Oceny są rekursywne, zawierające oceny kondycji dzieci, które wywołały bieżący stan zdrowia. Na przykład watchdog zgłosił błąd dla repliki. Kondycja aplikacji pokazuje ocenę złej kondycji ze względu na usługę w złej kondycji; usługa jest w złej kondycji z powodu błędu partycji; partycja jest w złej kondycji z powodu błędu repliki; replika jest w złej kondycji z powodu raportu kondycji błędu watchdog.
  • Statystyki kondycji dla wszystkich typów podrzędnych jednostek, które mają dzieci. Na przykład kondycja klastra pokazuje łączną liczbę aplikacji, usług, partycji, replik i wdrożonych jednostek w klastrze. Kondycja usługi pokazuje łączną liczbę partycji i replik w ramach określonej usługi.

Uzyskiwanie kondycji klastra

Zwraca kondycję jednostki klastra i zawiera stany kondycji aplikacji i węzłów (elementy podrzędne klastra). Dane wejściowe:

  • [Opcjonalnie] Zasady kondycji klastra używane do oceny węzłów i zdarzeń klastra.
  • [Opcjonalnie] Mapa zasad kondycji aplikacji z zasadami kondycji używanymi do zastąpienia zasad manifestu aplikacji.
  • [Opcjonalnie] Filtry dla zdarzeń, węzłów i aplikacji, które określają, które wpisy są interesujące i powinny być zwracane w wyniku (na przykład tylko błędy lub zarówno ostrzeżenia, jak i błędy). Wszystkie zdarzenia, węzły i aplikacje są używane do oceny zagregowanej kondycji jednostki, niezależnie od filtru.
  • [Opcjonalnie] Filtruj, aby wykluczyć statystyki kondycji.
  • [Opcjonalnie] Filtruj, aby uwzględnić statystyki kondycji sieci szkieletowej:/System w statystykach kondycji. Dotyczy tylko wtedy, gdy statystyki kondycji nie są wykluczone. Domyślnie statystyki kondycji zawierają tylko statystyki aplikacji użytkowników, a nie aplikacji systemowej.

interfejs API

Aby uzyskać kondycję klastra, utwórz metodę GetClusterHealthAsync i wywołaj metodę FabricClientHealthManager.

Następujące wywołanie pobiera kondycję klastra:

ClusterHealth clusterHealth = await fabricClient.HealthManager.GetClusterHealthAsync();

Poniższy kod pobiera kondycję klastra przy użyciu niestandardowych zasad kondycji klastra i filtrów dla węzłów i aplikacji. Określa, że statystyki kondycji obejmują statystyki sieci szkieletowej:/System. Tworzy klasterHealthQueryDescription, który zawiera informacje wejściowe.

var policy = new ClusterHealthPolicy()
{
    MaxPercentUnhealthyNodes = 20
};
var nodesFilter = new NodeHealthStatesFilter()
{
    HealthStateFilterValue = HealthStateFilter.Error | HealthStateFilter.Warning
};
var applicationsFilter = new ApplicationHealthStatesFilter()
{
    HealthStateFilterValue = HealthStateFilter.Error
};
var healthStatisticsFilter = new ClusterHealthStatisticsFilter()
{
    ExcludeHealthStatistics = false,
    IncludeSystemApplicationHealthStatistics = true
};
var queryDescription = new ClusterHealthQueryDescription()
{
    HealthPolicy = policy,
    ApplicationsFilter = applicationsFilter,
    NodesFilter = nodesFilter,
    HealthStatisticsFilter = healthStatisticsFilter
};

ClusterHealth clusterHealth = await fabricClient.HealthManager.GetClusterHealthAsync(queryDescription);

PowerShell

Polecenie cmdlet do pobrania kondycji klastra to Get-ServiceFabricClusterHealth. Najpierw połącz się z klastrem przy użyciu polecenia cmdlet Connect-ServiceFabricCluster .

Stan klastra to pięć węzłów, aplikacja systemowa i sieć szkieletowa:/WordCount skonfigurowane zgodnie z opisem.

Następujące polecenie cmdlet pobiera kondycję klastra przy użyciu domyślnych zasad kondycji. Stan zagregowanej kondycji jest ostrzegawczy, ponieważ aplikacja fabric:/WordCount jest w ostrzeżeniu. Zwróć uwagę, w jaki sposób oceny w złej kondycji zawierają szczegółowe informacje na temat warunków, które wyzwoliły zagregowaną kondycję.

PS D:\ServiceFabric> Get-ServiceFabricClusterHealth


AggregatedHealthState   : Warning
UnhealthyEvaluations    : 
                          Unhealthy applications: 100% (1/1), MaxPercentUnhealthyApplications=0%.

                          Unhealthy application: ApplicationName='fabric:/WordCount', AggregatedHealthState='Warning'.

                            Unhealthy services: 100% (1/1), ServiceType='WordCountServiceType', MaxPercentUnhealthyServices=0%.

                            Unhealthy service: ServiceName='fabric:/WordCount/WordCountService', AggregatedHealthState='Warning'.

                                Unhealthy partitions: 100% (1/1), MaxPercentUnhealthyPartitionsPerService=0%.

                                Unhealthy partition: PartitionId='af2e3e44-a8f8-45ac-9f31-4093eb897600', AggregatedHealthState='Warning'.

                                    Unhealthy event: SourceId='System.FM', Property='State', HealthState='Warning', ConsiderWarningAsError=false.


NodeHealthStates        : 
                          NodeName              : _Node_4
                          AggregatedHealthState : Ok

                          NodeName              : _Node_3
                          AggregatedHealthState : Ok

                          NodeName              : _Node_2
                          AggregatedHealthState : Ok

                          NodeName              : _Node_1
                          AggregatedHealthState : Ok

                          NodeName              : _Node_0
                          AggregatedHealthState : Ok

ApplicationHealthStates : 
                          ApplicationName       : fabric:/System
                          AggregatedHealthState : Ok

                          ApplicationName       : fabric:/WordCount
                          AggregatedHealthState : Warning

HealthEvents            : None
HealthStatistics        : 
                          Node                  : 5 Ok, 0 Warning, 0 Error
                          Replica               : 6 Ok, 0 Warning, 0 Error
                          Partition             : 1 Ok, 1 Warning, 0 Error
                          Service               : 1 Ok, 1 Warning, 0 Error
                          DeployedServicePackage : 6 Ok, 0 Warning, 0 Error
                          DeployedApplication   : 5 Ok, 0 Warning, 0 Error
                          Application           : 0 Ok, 1 Warning, 0 Error

Następujące polecenie cmdlet programu PowerShell pobiera kondycję klastra przy użyciu niestandardowych zasad aplikacji. Filtruje wyniki, aby uzyskać tylko aplikacje i węzły w błędzie lub ostrzeżeniu. W związku z tym nie są zwracane żadne węzły, ponieważ wszystkie są w dobrej kondycji. Tylko aplikacja fabric:/WordCount uwzględnia filtr aplikacji. Ponieważ zasady niestandardowe określają, aby rozważyć ostrzeżenia jako błędy dla aplikacji fabric:/WordCount, aplikacja jest oceniana jako w błędzie, a więc jest klastrem.

PS D:\ServiceFabric> $appHealthPolicy = New-Object -TypeName System.Fabric.Health.ApplicationHealthPolicy
$appHealthPolicy.ConsiderWarningAsError = $true
$appHealthPolicyMap = New-Object -TypeName System.Fabric.Health.ApplicationHealthPolicyMap
$appUri1 = New-Object -TypeName System.Uri -ArgumentList "fabric:/WordCount"
$appHealthPolicyMap.Add($appUri1, $appHealthPolicy)
Get-ServiceFabricClusterHealth -ApplicationHealthPolicyMap $appHealthPolicyMap -ApplicationsFilter "Warning,Error" -NodesFilter "Warning,Error" -ExcludeHealthStatistics


AggregatedHealthState   : Error
UnhealthyEvaluations    : 
                          Unhealthy applications: 100% (1/1), MaxPercentUnhealthyApplications=0%.

                          Unhealthy application: ApplicationName='fabric:/WordCount', AggregatedHealthState='Error'.

                            Unhealthy services: 100% (1/1), ServiceType='WordCountServiceType', MaxPercentUnhealthyServices=0%.

                            Unhealthy service: ServiceName='fabric:/WordCount/WordCountService', AggregatedHealthState='Error'.

                                Unhealthy partitions: 100% (1/1), MaxPercentUnhealthyPartitionsPerService=0%.

                                Unhealthy partition: PartitionId='af2e3e44-a8f8-45ac-9f31-4093eb897600', AggregatedHealthState='Error'.

                                    Unhealthy event: SourceId='System.FM', Property='State', HealthState='Warning', ConsiderWarningAsError=true.


NodeHealthStates        : None
ApplicationHealthStates : 
                          ApplicationName       : fabric:/WordCount
                          AggregatedHealthState : Error

HealthEvents            : None

REST

Kondycję klastra można uzyskać za pomocą żądania GET lub żądania POST zawierającego zasady kondycji opisane w treści.

Pobieranie kondycji węzła

Zwraca kondycję jednostki węzła i zawiera zdarzenia kondycji zgłaszane w węźle. Dane wejściowe:

  • [Wymagane] Nazwa węzła identyfikującego węzeł.
  • [Opcjonalnie] Ustawienia zasad kondycji klastra używane do oceny kondycji.
  • [Opcjonalnie] Filtry dla zdarzeń, które określają, które wpisy są interesujące i powinny być zwracane w wyniku (na przykład tylko błędy lub zarówno ostrzeżenia, jak i błędy). Wszystkie zdarzenia są używane do oceny zagregowanej kondycji jednostki, niezależnie od filtru.

interfejs API

Aby uzyskać kondycję węzła za pośrednictwem interfejsu API, utwórz metodę FabricClientGetNodeHealthAsync i wywołaj metodę HealthManager.

Następujący kod pobiera kondycję węzła dla określonej nazwy węzła:

NodeHealth nodeHealth = await fabricClient.HealthManager.GetNodeHealthAsync(nodeName);

Poniższy kod pobiera kondycję węzła dla określonej nazwy węzła i przekazuje filtr zdarzeń i zasady niestandardowe za pomocą skryptu NodeHealthQueryDescription:

var queryDescription = new NodeHealthQueryDescription(nodeName)
{
    HealthPolicy = new ClusterHealthPolicy() {  ConsiderWarningAsError = true },
    EventsFilter = new HealthEventsFilter() { HealthStateFilterValue = HealthStateFilter.Warning },
};

NodeHealth nodeHealth = await fabricClient.HealthManager.GetNodeHealthAsync(queryDescription);

PowerShell

Polecenie cmdlet do pobrania kondycji węzła to Get-ServiceFabricNodeHealth. Najpierw połącz się z klastrem przy użyciu polecenia cmdlet Connect-ServiceFabricCluster . Następujące polecenie cmdlet pobiera kondycję węzła przy użyciu domyślnych zasad kondycji:

PS D:\ServiceFabric> Get-ServiceFabricNodeHealth _Node_1


NodeName              : _Node_1
AggregatedHealthState : Ok
HealthEvents          : 
                        SourceId              : System.FM
                        Property              : State
                        HealthState           : Ok
                        SequenceNumber        : 3
                        SentAt                : 7/13/2017 4:39:23 PM
                        ReceivedAt            : 7/13/2017 4:40:47 PM
                        TTL                   : Infinite
                        Description           : Fabric node is up.
                        RemoveWhenExpired     : False
                        IsExpired             : False
                        Transitions           : Error->Ok = 7/13/2017 4:40:47 PM, LastWarning = 1/1/0001 12:00:00 AM

Następujące polecenie cmdlet pobiera kondycję wszystkich węzłów w klastrze:

PS D:\ServiceFabric> Get-ServiceFabricNode | Get-ServiceFabricNodeHealth | select NodeName, AggregatedHealthState | ft -AutoSize

NodeName AggregatedHealthState
-------- ---------------------
_Node_4                     Ok
_Node_3                     Ok
_Node_2                     Ok
_Node_1                     Ok
_Node_0                     Ok

REST

Kondycję węzła można uzyskać za pomocą żądania GET lub żądania POST zawierającego zasady kondycji opisane w treści.

Pobieranie kondycji aplikacji

Zwraca kondycję jednostki aplikacji. Zawiera on stany kondycji wdrożonej aplikacji i elementów podrzędnych usług. Dane wejściowe:

  • [Wymagane] Nazwa aplikacji (URI), która identyfikuje aplikację.
  • [Opcjonalnie] Zasady kondycji aplikacji używane do zastępowania zasad manifestu aplikacji.
  • [Opcjonalnie] Filtry dla zdarzeń, usług i wdrożonych aplikacji, które określają, które wpisy są interesujące i powinny być zwracane w wyniku (na przykład tylko błędy lub zarówno ostrzeżenia, jak i błędy). Wszystkie zdarzenia, usługi i wdrożone aplikacje są używane do oceny zagregowanej kondycji jednostki, niezależnie od filtru.
  • [Opcjonalnie] Filtruj, aby wykluczyć statystyki kondycji. Jeśli nie zostanie określony, statystyki kondycji obejmują ok, ostrzeżenie i liczbę błędów dla wszystkich elementów podrzędnych aplikacji: usług, partycji, replik, wdrożonych aplikacji i wdrożonych pakietów usług.

interfejs API

Aby uzyskać kondycję aplikacji, utwórz metodę FabricClientGetApplicationHealthAsync i wywołaj metodę HealthManager.

Poniższy kod pobiera kondycję aplikacji dla określonej nazwy aplikacji (URI):

ApplicationHealth applicationHealth = await fabricClient.HealthManager.GetApplicationHealthAsync(applicationName);

Poniższy kod pobiera kondycję aplikacji dla określonej nazwy aplikacji (URI) z filtrami i niestandardowymi zasadami określonymi za pośrednictwem applicationHealthQueryDescription.

HealthStateFilter warningAndErrors = HealthStateFilter.Error | HealthStateFilter.Warning;
var serviceTypePolicy = new ServiceTypeHealthPolicy()
{
    MaxPercentUnhealthyPartitionsPerService = 0,
    MaxPercentUnhealthyReplicasPerPartition = 5,
    MaxPercentUnhealthyServices = 0,
};
var policy = new ApplicationHealthPolicy()
{
    ConsiderWarningAsError = false,
    DefaultServiceTypeHealthPolicy = serviceTypePolicy,
    MaxPercentUnhealthyDeployedApplications = 0,
};

var queryDescription = new ApplicationHealthQueryDescription(applicationName)
{
    HealthPolicy = policy,
    EventsFilter = new HealthEventsFilter() { HealthStateFilterValue = warningAndErrors },
    ServicesFilter = new ServiceHealthStatesFilter() { HealthStateFilterValue = warningAndErrors },
    DeployedApplicationsFilter = new DeployedApplicationHealthStatesFilter() { HealthStateFilterValue = warningAndErrors },
};

ApplicationHealth applicationHealth = await fabricClient.HealthManager.GetApplicationHealthAsync(queryDescription);

PowerShell

Polecenie cmdlet do pobrania kondycji aplikacji to Get-ServiceFabricApplicationHealth. Najpierw połącz się z klastrem przy użyciu polecenia cmdlet Connect-ServiceFabricCluster .

Następujące polecenie cmdlet zwraca kondycję aplikacji fabric:/WordCount :

PS D:\ServiceFabric> Get-ServiceFabricApplicationHealth fabric:/WordCount


ApplicationName                 : fabric:/WordCount
AggregatedHealthState           : Warning
UnhealthyEvaluations            : 
                                  Unhealthy services: 100% (1/1), ServiceType='WordCountServiceType', MaxPercentUnhealthyServices=0%.

                                  Unhealthy service: ServiceName='fabric:/WordCount/WordCountService', AggregatedHealthState='Warning'.

                                    Unhealthy partitions: 100% (1/1), MaxPercentUnhealthyPartitionsPerService=0%.

                                    Unhealthy partition: PartitionId='af2e3e44-a8f8-45ac-9f31-4093eb897600', AggregatedHealthState='Warning'.

                                        Unhealthy event: SourceId='System.FM', Property='State', HealthState='Warning', ConsiderWarningAsError=false.

ServiceHealthStates             : 
                                  ServiceName           : fabric:/WordCount/WordCountWebService
                                  AggregatedHealthState : Ok

                                  ServiceName           : fabric:/WordCount/WordCountService
                                  AggregatedHealthState : Warning

DeployedApplicationHealthStates : 
                                  ApplicationName       : fabric:/WordCount
                                  NodeName              : _Node_4
                                  AggregatedHealthState : Ok

                                  ApplicationName       : fabric:/WordCount
                                  NodeName              : _Node_3
                                  AggregatedHealthState : Ok

                                  ApplicationName       : fabric:/WordCount
                                  NodeName              : _Node_0
                                  AggregatedHealthState : Ok

                                  ApplicationName       : fabric:/WordCount
                                  NodeName              : _Node_2
                                  AggregatedHealthState : Ok

                                  ApplicationName       : fabric:/WordCount
                                  NodeName              : _Node_1
                                  AggregatedHealthState : Ok

HealthEvents                    : 
                                  SourceId              : System.CM
                                  Property              : State
                                  HealthState           : Ok
                                  SequenceNumber        : 282
                                  SentAt                : 7/13/2017 5:57:05 PM
                                  ReceivedAt            : 7/13/2017 5:57:05 PM
                                  TTL                   : Infinite
                                  Description           : Application has been created.
                                  RemoveWhenExpired     : False
                                  IsExpired             : False
                                  Transitions           : Error->Ok = 7/13/2017 5:57:05 PM, LastWarning = 1/1/0001 12:00:00 AM

HealthStatistics                : 
                                  Replica               : 6 Ok, 0 Warning, 0 Error
                                  Partition             : 1 Ok, 1 Warning, 0 Error
                                  Service               : 1 Ok, 1 Warning, 0 Error
                                  DeployedServicePackage : 6 Ok, 0 Warning, 0 Error
                                  DeployedApplication   : 5 Ok, 0 Warning, 0 Error

Następujące polecenie cmdlet programu PowerShell przekazuje zasady niestandardowe. Filtruje również elementy podrzędne i zdarzenia.

PS D:\ServiceFabric> Get-ServiceFabricApplicationHealth -ApplicationName fabric:/WordCount -ConsiderWarningAsError $true -ServicesFilter Error -EventsFilter Error -DeployedApplicationsFilter Error -ExcludeHealthStatistics


ApplicationName                 : fabric:/WordCount
AggregatedHealthState           : Error
UnhealthyEvaluations            : 
                                  Unhealthy services: 100% (1/1), ServiceType='WordCountServiceType', MaxPercentUnhealthyServices=0%.

                                  Unhealthy service: ServiceName='fabric:/WordCount/WordCountService', AggregatedHealthState='Error'.

                                    Unhealthy partitions: 100% (1/1), MaxPercentUnhealthyPartitionsPerService=0%.

                                    Unhealthy partition: PartitionId='af2e3e44-a8f8-45ac-9f31-4093eb897600', AggregatedHealthState='Error'.

                                        Unhealthy event: SourceId='System.FM', Property='State', HealthState='Warning', ConsiderWarningAsError=true.

ServiceHealthStates             : 
                                  ServiceName           : fabric:/WordCount/WordCountService
                                  AggregatedHealthState : Error

DeployedApplicationHealthStates : None
HealthEvents                    : None

REST

Kondycję aplikacji można uzyskać za pomocą żądania GET lub żądania POST zawierającego zasady kondycji opisane w treści.

Uzyskiwanie kondycji usługi

Zwraca kondycję jednostki usługi. Zawiera stany kondycji partycji. Dane wejściowe:

  • [Wymagane] Nazwa usługi (URI), która identyfikuje usługę.
  • [Opcjonalnie] Zasady kondycji aplikacji używane do zastępowania zasad manifestu aplikacji.
  • [Opcjonalnie] Filtry dla zdarzeń i partycji, które określają, które wpisy są interesujące i powinny być zwracane w wyniku (na przykład tylko błędy lub zarówno ostrzeżenia, jak i błędy). Wszystkie zdarzenia i partycje są używane do oceny zagregowanej kondycji jednostki, niezależnie od filtru.
  • [Opcjonalnie] Filtruj, aby wykluczyć statystyki kondycji. Jeśli nie zostanie określony, statystyki kondycji pokazują ok, ostrzeżenie i liczbę błędów dla wszystkich partycji i replik usługi.

interfejs API

Aby uzyskać kondycję usługi za pośrednictwem interfejsu API, utwórz metodę FabricClientGetServiceHealthAsync w swoim narzędziu HealthManager.

Poniższy przykład pobiera kondycję usługi o określonej nazwie usługi (URI):

ServiceHealth serviceHealth = await fabricClient.HealthManager.GetServiceHealthAsync(serviceName);

Poniższy kod pobiera kondycję usługi dla określonej nazwy usługi (URI), określając filtry i zasady niestandardowe za pośrednictwem skryptu ServiceHealthQueryDescription:

var queryDescription = new ServiceHealthQueryDescription(serviceName)
{
    EventsFilter = new HealthEventsFilter() { HealthStateFilterValue = HealthStateFilter.All },
    PartitionsFilter = new PartitionHealthStatesFilter() { HealthStateFilterValue = HealthStateFilter.Error },
};

ServiceHealth serviceHealth = await fabricClient.HealthManager.GetServiceHealthAsync(queryDescription);

PowerShell

Polecenie cmdlet do pobrania kondycji usługi to Get-ServiceFabricServiceHealth. Najpierw połącz się z klastrem przy użyciu polecenia cmdlet Connect-ServiceFabricCluster .

Następujące polecenie cmdlet pobiera kondycję usługi przy użyciu domyślnych zasad kondycji:

PS D:\ServiceFabric> Get-ServiceFabricServiceHealth -ServiceName fabric:/WordCount/WordCountService


ServiceName           : fabric:/WordCount/WordCountService
AggregatedHealthState : Warning
UnhealthyEvaluations  : 
                        Unhealthy partitions: 100% (1/1), MaxPercentUnhealthyPartitionsPerService=0%.

                        Unhealthy partition: PartitionId='af2e3e44-a8f8-45ac-9f31-4093eb897600', AggregatedHealthState='Warning'.

                            Unhealthy event: SourceId='System.FM', Property='State', HealthState='Warning', ConsiderWarningAsError=false.

PartitionHealthStates : 
                        PartitionId           : af2e3e44-a8f8-45ac-9f31-4093eb897600
                        AggregatedHealthState : Warning

HealthEvents          : 
                        SourceId              : System.FM
                        Property              : State
                        HealthState           : Ok
                        SequenceNumber        : 15
                        SentAt                : 7/13/2017 5:57:05 PM
                        ReceivedAt            : 7/13/2017 5:57:18 PM
                        TTL                   : Infinite
                        Description           : Service has been created.
                        RemoveWhenExpired     : False
                        IsExpired             : False
                        Transitions           : Error->Ok = 7/13/2017 5:57:18 PM, LastWarning = 1/1/0001 12:00:00 AM

HealthStatistics      : 
                        Replica               : 5 Ok, 0 Warning, 0 Error
                        Partition             : 0 Ok, 1 Warning, 0 Error

REST

Kondycję usługi można uzyskać za pomocą żądania GET lub żądania POST zawierającego zasady kondycji opisane w treści.

Pobieranie kondycji partycji

Zwraca kondycję jednostki partycji. Zawiera stany kondycji repliki. Dane wejściowe:

  • [Wymagane] Identyfikator partycji (GUID), który identyfikuje partycję.
  • [Opcjonalnie] Zasady kondycji aplikacji używane do zastępowania zasad manifestu aplikacji.
  • [Opcjonalnie] Filtry dla zdarzeń i replik, które określają, które wpisy są interesujące i powinny być zwracane w wyniku (na przykład tylko błędy lub zarówno ostrzeżenia, jak i błędy). Wszystkie zdarzenia i repliki są używane do oceny zagregowanej kondycji jednostki, niezależnie od filtru.
  • [Opcjonalnie] Filtruj, aby wykluczyć statystyki kondycji. Jeśli nie zostanie określona, statystyki kondycji pokazują, ile replik jest w ok, ostrzeżeniach i stanach błędów.

interfejs API

Aby uzyskać kondycję partycji za pośrednictwem interfejsu API, utwórz metodę FabricClientGetPartitionHealthAsync i wywołaj metodę HealthManager. Aby określić opcjonalne parametry, utwórz partycję PartitionHealthQueryDescription.

PartitionHealth partitionHealth = await fabricClient.HealthManager.GetPartitionHealthAsync(partitionId);

PowerShell

Polecenie cmdlet do pobrania kondycji partycji to Get-ServiceFabricPartitionHealth. Najpierw połącz się z klastrem przy użyciu polecenia cmdlet Connect-ServiceFabricCluster .

Następujące polecenie cmdlet pobiera kondycję wszystkich partycji sieci szkieletowej:/WordCount/WordCountService i filtruje stany kondycji repliki:

PS D:\ServiceFabric> Get-ServiceFabricPartition fabric:/WordCount/WordCountService | Get-ServiceFabricPartitionHealth -ReplicasFilter None

PartitionId           : af2e3e44-a8f8-45ac-9f31-4093eb897600
AggregatedHealthState : Warning
UnhealthyEvaluations  : 
                        Unhealthy event: SourceId='System.FM', Property='State', HealthState='Warning', ConsiderWarningAsError=false.

ReplicaHealthStates   : None
HealthEvents          : 
                        SourceId              : System.FM
                        Property              : State
                        HealthState           : Warning
                        SequenceNumber        : 72
                        SentAt                : 7/13/2017 5:57:29 PM
                        ReceivedAt            : 7/13/2017 5:57:48 PM
                        TTL                   : Infinite
                        Description           : Partition is below target replica or instance count.
                        fabric:/WordCount/WordCountService 7 2 af2e3e44-a8f8-45ac-9f31-4093eb897600
                          N/P RD _Node_2 Up 131444422260002646
                          N/S RD _Node_4 Up 131444422293113678
                          N/S RD _Node_3 Up 131444422293113679
                          N/S RD _Node_1 Up 131444422293118720
                          N/S RD _Node_0 Up 131444422293118721
                          (Showing 5 out of 5 replicas. Total available replicas: 5.)

                        RemoveWhenExpired     : False
                        IsExpired             : False
                        Transitions           : Ok->Warning = 7/13/2017 5:57:48 PM, LastError = 1/1/0001 12:00:00 AM

                        SourceId              : System.PLB
                        Property              : ServiceReplicaUnplacedHealth_Secondary_af2e3e44-a8f8-45ac-9f31-4093eb897600
                        HealthState           : Warning
                        SequenceNumber        : 131444445174851664
                        SentAt                : 7/13/2017 6:35:17 PM
                        ReceivedAt            : 7/13/2017 6:35:18 PM
                        TTL                   : 00:01:05
                        Description           : The Load Balancer was unable to find a placement for one or more of the Service's Replicas:
                        Secondary replica could not be placed due to the following constraints and properties:  
                        TargetReplicaSetSize: 7
                        Placement Constraint: N/A
                        Parent Service: N/A

                        Constraint Elimination Sequence:
                        Existing Secondary Replicas eliminated 4 possible node(s) for placement -- 1/5 node(s) remain.
                        Existing Primary Replica eliminated 1 possible node(s) for placement -- 0/5 node(s) remain.

                        Nodes Eliminated By Constraints:

                        Existing Secondary Replicas -- Nodes with Partition's Existing Secondary Replicas/Instances:
                        --
                        FaultDomain:fd:/4 NodeName:_Node_4 NodeType:NodeType4 UpgradeDomain:4 UpgradeDomain: ud:/4 Deactivation Intent/Status: None/None
                        FaultDomain:fd:/3 NodeName:_Node_3 NodeType:NodeType3 UpgradeDomain:3 UpgradeDomain: ud:/3 Deactivation Intent/Status: None/None
                        FaultDomain:fd:/1 NodeName:_Node_1 NodeType:NodeType1 UpgradeDomain:1 UpgradeDomain: ud:/1 Deactivation Intent/Status: None/None
                        FaultDomain:fd:/0 NodeName:_Node_0 NodeType:NodeType0 UpgradeDomain:0 UpgradeDomain: ud:/0 Deactivation Intent/Status: None/None

                        Existing Primary Replica -- Nodes with Partition's Existing Primary Replica or Secondary Replicas:
                        --
                        FaultDomain:fd:/2 NodeName:_Node_2 NodeType:NodeType2 UpgradeDomain:2 UpgradeDomain: ud:/2 Deactivation Intent/Status: None/None


                        RemoveWhenExpired     : True
                        IsExpired             : False
                        Transitions           : Error->Warning = 7/13/2017 5:57:48 PM, LastOk = 1/1/0001 12:00:00 AM

HealthStatistics      : 
                        Replica               : 5 Ok, 0 Warning, 0 Error

REST

Kondycję partycji można uzyskać za pomocą żądania GET lub żądania POST zawierającego zasady kondycji opisane w treści.

Uzyskiwanie kondycji repliki

Zwraca kondycję repliki usługi stanowej lub wystąpienia usługi bezstanowej. Dane wejściowe:

  • [Wymagane] Identyfikator partycji (GUID) i identyfikator repliki identyfikujący replikę.
  • [Opcjonalnie] Parametry zasad kondycji aplikacji używane do zastępowania zasad manifestu aplikacji.
  • [Opcjonalnie] Filtry dla zdarzeń, które określają, które wpisy są interesujące i powinny być zwracane w wyniku (na przykład tylko błędy lub zarówno ostrzeżenia, jak i błędy). Wszystkie zdarzenia są używane do oceny zagregowanej kondycji jednostki, niezależnie od filtru.

interfejs API

Aby uzyskać kondycję repliki za pośrednictwem interfejsu API, utwórz metodę FabricClientGetReplicaHealthAsync i wywołaj metodę GetReplicaHealthAsync w ramach klasy HealthManager. Aby określić zaawansowane parametry, użyj funkcji ReplicaHealthQueryDescription.

ReplicaHealth replicaHealth = await fabricClient.HealthManager.GetReplicaHealthAsync(partitionId, replicaId);

PowerShell

Polecenie cmdlet do pobrania kondycji repliki to Get-ServiceFabricReplicaHealth. Najpierw połącz się z klastrem przy użyciu polecenia cmdlet Connect-ServiceFabricCluster .

Następujące polecenie cmdlet pobiera kondycję repliki podstawowej dla wszystkich partycji usługi:

PS D:\ServiceFabric> Get-ServiceFabricPartition fabric:/WordCount/WordCountService | Get-ServiceFabricReplica | where {$_.ReplicaRole -eq "Primary"} | Get-ServiceFabricReplicaHealth


PartitionId           : af2e3e44-a8f8-45ac-9f31-4093eb897600
ReplicaId             : 131444422260002646
AggregatedHealthState : Ok
HealthEvents          : 
                        SourceId              : System.RA
                        Property              : State
                        HealthState           : Ok
                        SequenceNumber        : 131444422263668344
                        SentAt                : 7/13/2017 5:57:06 PM
                        ReceivedAt            : 7/13/2017 5:57:18 PM
                        TTL                   : Infinite
                        Description           : Replica has been created._Node_2
                        RemoveWhenExpired     : False
                        IsExpired             : False
                        Transitions           : Error->Ok = 7/13/2017 5:57:18 PM, LastWarning = 1/1/0001 12:00:00 AM

REST

Kondycję repliki można uzyskać za pomocą żądania GET lub żądania POST zawierającego zasady kondycji opisane w treści.

Pobieranie wdrożonej kondycji aplikacji

Zwraca kondycję aplikacji wdrożonej w jednostce węzła. Zawiera on wdrożone stany kondycji pakietu usługi. Dane wejściowe:

  • [Wymagane] Nazwa aplikacji (URI) i nazwa węzła (ciąg), która identyfikuje wdrożona aplikację.
  • [Opcjonalnie] Zasady kondycji aplikacji używane do zastępowania zasad manifestu aplikacji.
  • [Opcjonalnie] Filtry dla zdarzeń i wdrożonych pakietów usług, które określają, które wpisy są interesujące i powinny być zwracane w wyniku (na przykład tylko błędy lub zarówno ostrzeżenia, jak i błędy). Wszystkie zdarzenia i wdrożone pakiety usług są używane do oceny zagregowanej kondycji jednostki, niezależnie od filtru.
  • [Opcjonalnie] Filtruj, aby wykluczyć statystyki kondycji. Jeśli nie zostanie określony, statystyki kondycji pokazują liczbę wdrożonych pakietów usług w ok, ostrzeżenie i stan kondycji błędu.

interfejs API

Aby uzyskać kondycję aplikacji wdrożonej w węźle za pośrednictwem interfejsu API, utwórz FabricClient metodę GetDeployedApplicationHealthAsync i wywołaj metodę GetDeployedApplicationHealthAsync w ramach klasy HealthManager. Aby określić parametry opcjonalne, użyj polecenia DeployedApplicationHealthQueryDescription.

DeployedApplicationHealth health = await fabricClient.HealthManager.GetDeployedApplicationHealthAsync(
    new DeployedApplicationHealthQueryDescription(applicationName, nodeName));

PowerShell

Polecenie cmdlet do pobrania wdrożonej kondycji aplikacji to Get-ServiceFabricDeployedApplicationHealth. Najpierw połącz się z klastrem przy użyciu polecenia cmdlet Connect-ServiceFabricCluster . Aby dowiedzieć się, gdzie jest wdrażana aplikacja, uruchom polecenie Get-ServiceFabricApplicationHealth i przyjrzyj się wdrożonym elementom podrzędnym aplikacji.

Następujące polecenie cmdlet pobiera kondycję aplikacji fabric:/WordCount wdrożonej na _Node_2.

PS D:\ServiceFabric> Get-ServiceFabricDeployedApplicationHealth -ApplicationName fabric:/WordCount -NodeName _Node_0


ApplicationName                    : fabric:/WordCount
NodeName                           : _Node_0
AggregatedHealthState              : Ok
DeployedServicePackageHealthStates : 
                                     ServiceManifestName   : WordCountServicePkg
                                     ServicePackageActivationId : 
                                     NodeName              : _Node_0
                                     AggregatedHealthState : Ok

                                     ServiceManifestName   : WordCountWebServicePkg
                                     ServicePackageActivationId : 
                                     NodeName              : _Node_0
                                     AggregatedHealthState : Ok

HealthEvents                       : 
                                     SourceId              : System.Hosting
                                     Property              : Activation
                                     HealthState           : Ok
                                     SequenceNumber        : 131444422261848308
                                     SentAt                : 7/13/2017 5:57:06 PM
                                     ReceivedAt            : 7/13/2017 5:57:17 PM
                                     TTL                   : Infinite
                                     Description           : The application was activated successfully.
                                     RemoveWhenExpired     : False
                                     IsExpired             : False
                                     Transitions           : Error->Ok = 7/13/2017 5:57:17 PM, LastWarning = 1/1/0001 12:00:00 AM

HealthStatistics                   : 
                                     DeployedServicePackage : 2 Ok, 0 Warning, 0 Error

REST

Kondycję aplikacji można wdrożyć za pomocą żądania GET lub żądania POST zawierającego zasady kondycji opisane w treści.

Uzyskiwanie kondycji wdrożonego pakietu usługi

Zwraca kondycję wdrożonej jednostki pakietu usług. Dane wejściowe:

  • [Wymagane] Nazwa aplikacji (URI), nazwa węzła (ciąg) i nazwa manifestu usługi (ciąg), która identyfikuje wdrożony pakiet usługi.
  • [Opcjonalnie] Zasady kondycji aplikacji używane do zastępowania zasad manifestu aplikacji.
  • [Opcjonalnie] Filtry dla zdarzeń, które określają, które wpisy są interesujące i powinny być zwracane w wyniku (na przykład tylko błędy lub zarówno ostrzeżenia, jak i błędy). Wszystkie zdarzenia są używane do oceny zagregowanej kondycji jednostki, niezależnie od filtru.

interfejs API

Aby uzyskać kondycję wdrożonego pakietu usługi za pośrednictwem interfejsu API, utwórz metodę FabricClientGetDeployedServicePackageHealthAsync i wywołaj metodę GetDeployedServicePackageHealthAsync w elememencie HealthManager. Aby określić parametry opcjonalne, użyj polecenia DeployedServicePackageHealthQueryDescription.

DeployedServicePackageHealth health = await fabricClient.HealthManager.GetDeployedServicePackageHealthAsync(
    new DeployedServicePackageHealthQueryDescription(applicationName, nodeName, serviceManifestName));

PowerShell

Polecenie cmdlet do pobrania wdrożonego pakietu usługi to Get-ServiceFabricDeployedServicePackageHealth. Najpierw połącz się z klastrem przy użyciu polecenia cmdlet Connect-ServiceFabricCluster . Aby sprawdzić, gdzie jest wdrażana aplikacja, uruchom polecenie Get-ServiceFabricApplicationHealth i przyjrzyj się wdrożonym aplikacjom. Aby sprawdzić, które pakiety usług znajdują się w aplikacji, sprawdź elementy podrzędne wdrożonego pakietu usług w danych wyjściowych Get-ServiceFabricDeployedApplicationHealth .

Następujące polecenie cmdlet pobiera kondycję pakietu usługi WordCountServicePkg aplikacji fabric:/WordCount wdrożonej na _Node_2. Jednostka zawiera raporty System.Hosting służące do pomyślnej aktywacji pakietu usług i punktu wejścia oraz pomyślnej rejestracji typu usługi.

PS D:\ServiceFabric> Get-ServiceFabricDeployedApplication -ApplicationName fabric:/WordCount -NodeName _Node_2 | Get-ServiceFabricDeployedServicePackageHealth -ServiceManifestName WordCountServicePkg


ApplicationName            : fabric:/WordCount
ServiceManifestName        : WordCountServicePkg
ServicePackageActivationId : 
NodeName                   : _Node_2
AggregatedHealthState      : Ok
HealthEvents               : 
                             SourceId              : System.Hosting
                             Property              : Activation
                             HealthState           : Ok
                             SequenceNumber        : 131444422267693359
                             SentAt                : 7/13/2017 5:57:06 PM
                             ReceivedAt            : 7/13/2017 5:57:18 PM
                             TTL                   : Infinite
                             Description           : The ServicePackage was activated successfully.
                             RemoveWhenExpired     : False
                             IsExpired             : False
                             Transitions           : Error->Ok = 7/13/2017 5:57:18 PM, LastWarning = 1/1/0001 12:00:00 AM

                             SourceId              : System.Hosting
                             Property              : CodePackageActivation:Code:EntryPoint
                             HealthState           : Ok
                             SequenceNumber        : 131444422267903345
                             SentAt                : 7/13/2017 5:57:06 PM
                             ReceivedAt            : 7/13/2017 5:57:18 PM
                             TTL                   : Infinite
                             Description           : The CodePackage was activated successfully.
                             RemoveWhenExpired     : False
                             IsExpired             : False
                             Transitions           : Error->Ok = 7/13/2017 5:57:18 PM, LastWarning = 1/1/0001 12:00:00 AM

                             SourceId              : System.Hosting
                             Property              : ServiceTypeRegistration:WordCountServiceType
                             HealthState           : Ok
                             SequenceNumber        : 131444422272458374
                             SentAt                : 7/13/2017 5:57:07 PM
                             ReceivedAt            : 7/13/2017 5:57:18 PM
                             TTL                   : Infinite
                             Description           : The ServiceType was registered successfully.
                             RemoveWhenExpired     : False
                             IsExpired             : False
                             Transitions           : Error->Ok = 7/13/2017 5:57:18 PM, LastWarning = 1/1/0001 12:00:00 AM

REST

Możesz uzyskać kondycję wdrożonego pakietu usługi za pomocą żądania GET lub żądania POST zawierającego zasady kondycji opisane w treści.

Zapytania fragmentów kondycji

Zapytania fragmentów kondycji mogą zwracać elementy podrzędne klastra wielostopniowego (rekursywnie) dla filtrów wejściowych. Obsługuje zaawansowane filtry, które pozwalają na dużą elastyczność w wyborze dzieci do zwrócenia. Filtry mogą określać elementy podrzędne według unikatowego identyfikatora lub innych identyfikatorów grup i/lub stanów kondycji. Domyślnie nie są uwzględniane żadne elementy podrzędne, w przeciwieństwie do poleceń dotyczących kondycji, które zawsze zawierają elementy podrzędne pierwszego poziomu.

Zapytania dotyczące kondycji zwracają tylko elementy podrzędne pierwszego poziomu określonej jednostki na wymagane filtry. Aby uzyskać elementy podrzędne dzieci, musisz wywołać dodatkowe interfejsy API kondycji dla każdej interesującej jednostki. Podobnie, aby uzyskać kondycję określonych jednostek, musisz wywołać jeden interfejs API kondycji dla każdej żądanej jednostki. Zaawansowane filtrowanie zapytań fragmentów umożliwia zażądanie wielu interesujących elementów w jednym zapytaniu, minimalizując rozmiar komunikatu i liczbę komunikatów.

Wartość zapytania fragmentu polega na tym, że można uzyskać stan kondycji dla większej liczby jednostek klastra (potencjalnie wszystkich jednostek klastra rozpoczynających się od wymaganego katalogu głównego) w jednym wywołaniu. Możesz wyrazić złożone zapytanie dotyczące kondycji, takie jak:

  • Zwróć tylko aplikacje o błędzie, a w przypadku tych aplikacji wszystkie usługi są uwzględniane w ostrzeżeniu lub błędzie. W przypadku zwróconych usług uwzględnij wszystkie partycje.
  • Zwróć tylko kondycję czterech aplikacji określonych przez ich nazwy.
  • Zwracanie tylko kondycji aplikacji żądanego typu.
  • Zwróć wszystkie wdrożone jednostki w węźle. Zwraca wszystkie aplikacje, wszystkie wdrożone aplikacje w określonym węźle i wszystkie wdrożone pakiety usług w tym węźle.
  • Zwróć wszystkie repliki w błędzie. Zwraca wszystkie aplikacje, usługi, partycje i tylko repliki w błędzie.
  • Zwróć wszystkie aplikacje. W przypadku określonej usługi uwzględnij wszystkie partycje.

Obecnie zapytanie fragmentu kondycji jest widoczne tylko dla jednostki klastra. Zwraca fragment kondycji klastra, który zawiera:

  • Zagregowany stan kondycji klastra.
  • Lista fragmentów stanu kondycji węzłów, które przestrzegają filtrów wejściowych.
  • Lista fragmentów stanu kondycji aplikacji, które przestrzegają filtrów wejściowych. Każdy fragment stanu kondycji aplikacji zawiera listę fragmentów ze wszystkimi usługami, które przestrzegają filtrów wejściowych i listy fragmentów ze wszystkimi wdrożonych aplikacji, które przestrzegają filtrów. To samo dotyczy elementów podrzędnych usług i wdrożonych aplikacji. Dzięki temu wszystkie jednostki w klastrze mogą być potencjalnie zwracane w razie żądania w sposób hierarchiczny.

Zapytanie fragmentu kondycji klastra

Zwraca kondycję jednostki klastra i zawiera fragmenty stanu kondycji hierarchicznej wymaganych elementów podrzędnych. Dane wejściowe:

  • [Opcjonalnie] Zasady kondycji klastra używane do oceny węzłów i zdarzeń klastra.
  • [Opcjonalnie] Mapa zasad kondycji aplikacji z zasadami kondycji używanymi do zastępowania zasad manifestu aplikacji.
  • [Opcjonalnie] Filtry dla węzłów i aplikacji, które określają, które wpisy są interesujące i powinny być zwracane w wyniku. Filtry są specyficzne dla jednostki/grupy jednostek lub mają zastosowanie do wszystkich jednostek na tym poziomie. Lista filtrów może zawierać jeden ogólny filtr i/lub filtry dla określonych identyfikatorów, aby szczegółowe jednostki zwracane przez zapytanie. Jeśli są puste, elementy podrzędne nie są domyślnie zwracane. Przeczytaj więcej na temat filtrów w węzłach NodeHealthStateFilter i ApplicationHealthStateFilter. Filtry aplikacji mogą rekursywnie określać zaawansowane filtry dla elementów podrzędnych.

Wynik fragmentu obejmuje elementy podrzędne, które przestrzegają filtrów.

Obecnie zapytanie fragmentu nie zwraca ocen w złej kondycji ani zdarzeń jednostki. Te dodatkowe informacje można uzyskać przy użyciu istniejącego zapytania kondycji klastra.

interfejs API

Aby uzyskać fragment kondycji klastra, utwórz metodę FabricClientGetClusterHealthChunkAsync i wywołaj metodę GetClusterHealthChunkAsync w ramach klasy HealthManager. Możesz przekazać klasterHealthQueryDescription , aby opisać zasady kondycji i zaawansowane filtry.

Poniższy kod pobiera fragment kondycji klastra z zaawansowanymi filtrami.

var queryDescription = new ClusterHealthChunkQueryDescription();
queryDescription.ApplicationFilters.Add(new ApplicationHealthStateFilter()
    {
        // Return applications only if they are in error
        HealthStateFilter = HealthStateFilter.Error
    });

// Return all replicas
var wordCountServiceReplicaFilter = new ReplicaHealthStateFilter()
    {
        HealthStateFilter = HealthStateFilter.All
    };

// Return all replicas and all partitions
var wordCountServicePartitionFilter = new PartitionHealthStateFilter()
    {
        HealthStateFilter = HealthStateFilter.All
    };
wordCountServicePartitionFilter.ReplicaFilters.Add(wordCountServiceReplicaFilter);

// For specific service, return all partitions and all replicas
var wordCountServiceFilter = new ServiceHealthStateFilter()
{
    ServiceNameFilter = new Uri("fabric:/WordCount/WordCountService"),
};
wordCountServiceFilter.PartitionFilters.Add(wordCountServicePartitionFilter);

// Application filter: for specific application, return no services except the ones of interest
var wordCountApplicationFilter = new ApplicationHealthStateFilter()
    {
        // Always return fabric:/WordCount application
        ApplicationNameFilter = new Uri("fabric:/WordCount"),
    };
wordCountApplicationFilter.ServiceFilters.Add(wordCountServiceFilter);

queryDescription.ApplicationFilters.Add(wordCountApplicationFilter);

var result = await fabricClient.HealthManager.GetClusterHealthChunkAsync(queryDescription);

PowerShell

Polecenie cmdlet do pobrania kondycji klastra to Get-ServiceFabricClusterChunkHealth. Najpierw połącz się z klastrem przy użyciu polecenia cmdlet Connect-ServiceFabricCluster .

Poniższy kod pobiera węzły tylko wtedy, gdy znajdują się w obszarze Błąd, z wyjątkiem określonego węzła, który powinien być zawsze zwracany.

PS D:\ServiceFabric> $errorFilter = [System.Fabric.Health.HealthStateFilter]::Error;
$allFilter = [System.Fabric.Health.HealthStateFilter]::All;

$nodeFilter1 = New-Object System.Fabric.Health.NodeHealthStateFilter -Property @{HealthStateFilter=$errorFilter}
$nodeFilter2 = New-Object System.Fabric.Health.NodeHealthStateFilter -Property @{NodeNameFilter="_Node_1";HealthStateFilter=$allFilter}
# Create node filter list that will be passed in the cmdlet
$nodeFilters = New-Object System.Collections.Generic.List[System.Fabric.Health.NodeHealthStateFilter]
$nodeFilters.Add($nodeFilter1)
$nodeFilters.Add($nodeFilter2)

Get-ServiceFabricClusterHealthChunk -NodeFilters $nodeFilters


HealthState                  : Warning
NodeHealthStateChunks        : 
                               TotalCount            : 1

                               NodeName              : _Node_1
                               HealthState           : Ok

ApplicationHealthStateChunks : None

Następujące polecenie cmdlet pobiera fragment klastra z filtrami aplikacji.

PS D:\ServiceFabric> $errorFilter = [System.Fabric.Health.HealthStateFilter]::Error;
$allFilter = [System.Fabric.Health.HealthStateFilter]::All;

# All replicas
$replicaFilter = New-Object System.Fabric.Health.ReplicaHealthStateFilter -Property @{HealthStateFilter=$allFilter}

# All partitions
$partitionFilter = New-Object System.Fabric.Health.PartitionHealthStateFilter -Property @{HealthStateFilter=$allFilter}
$partitionFilter.ReplicaFilters.Add($replicaFilter)

# For WordCountService, return all partitions and all replicas
$svcFilter1 = New-Object System.Fabric.Health.ServiceHealthStateFilter -Property @{ServiceNameFilter="fabric:/WordCount/WordCountService"}
$svcFilter1.PartitionFilters.Add($partitionFilter)

$svcFilter2 = New-Object System.Fabric.Health.ServiceHealthStateFilter -Property @{HealthStateFilter=$errorFilter}

$appFilter = New-Object System.Fabric.Health.ApplicationHealthStateFilter -Property @{ApplicationNameFilter="fabric:/WordCount"}
$appFilter.ServiceFilters.Add($svcFilter1)
$appFilter.ServiceFilters.Add($svcFilter2)

$appFilters = New-Object System.Collections.Generic.List[System.Fabric.Health.ApplicationHealthStateFilter]
$appFilters.Add($appFilter)

Get-ServiceFabricClusterHealthChunk -ApplicationFilters $appFilters


HealthState                  : Error
NodeHealthStateChunks        : None
ApplicationHealthStateChunks : 
                               TotalCount            : 1

                               ApplicationName       : fabric:/WordCount
                               ApplicationTypeName   : WordCount
                               HealthState           : Error
                               ServiceHealthStateChunks : 
                                TotalCount            : 1

                                ServiceName           : fabric:/WordCount/WordCountService
                                HealthState           : Error
                                PartitionHealthStateChunks : 
                                    TotalCount            : 1

                                    PartitionId           : af2e3e44-a8f8-45ac-9f31-4093eb897600
                                    HealthState           : Error
                                    ReplicaHealthStateChunks : 
                                        TotalCount            : 5

                                        ReplicaOrInstanceId   : 131444422293118720
                                        HealthState           : Ok

                                        ReplicaOrInstanceId   : 131444422293118721
                                        HealthState           : Ok

                                        ReplicaOrInstanceId   : 131444422293113678
                                        HealthState           : Ok

                                        ReplicaOrInstanceId   : 131444422293113679
                                        HealthState           : Ok

                                        ReplicaOrInstanceId   : 131444422260002646
                                        HealthState           : Error

Następujące polecenie cmdlet zwraca wszystkie wdrożone jednostki w węźle.

PS D:\ServiceFabric> $errorFilter = [System.Fabric.Health.HealthStateFilter]::Error;
$allFilter = [System.Fabric.Health.HealthStateFilter]::All;

$dspFilter = New-Object System.Fabric.Health.DeployedServicePackageHealthStateFilter -Property @{HealthStateFilter=$allFilter}
$daFilter =  New-Object System.Fabric.Health.DeployedApplicationHealthStateFilter -Property @{HealthStateFilter=$allFilter;NodeNameFilter="_Node_2"}
$daFilter.DeployedServicePackageFilters.Add($dspFilter)

$appFilter = New-Object System.Fabric.Health.ApplicationHealthStateFilter -Property @{HealthStateFilter=$allFilter}
$appFilter.DeployedApplicationFilters.Add($daFilter)

$appFilters = New-Object System.Collections.Generic.List[System.Fabric.Health.ApplicationHealthStateFilter]
$appFilters.Add($appFilter)
Get-ServiceFabricClusterHealthChunk -ApplicationFilters $appFilters


HealthState                  : Error
NodeHealthStateChunks        : None
ApplicationHealthStateChunks : 
                               TotalCount            : 2

                               ApplicationName       : fabric:/System
                               HealthState           : Ok
                               DeployedApplicationHealthStateChunks : 
                                TotalCount            : 1

                                NodeName              : _Node_2
                                HealthState           : Ok
                                DeployedServicePackageHealthStateChunks :
                                    TotalCount            : 1

                                    ServiceManifestName   : FAS
                                    ServicePackageActivationId : 
                                    HealthState           : Ok



                               ApplicationName       : fabric:/WordCount
                               ApplicationTypeName   : WordCount
                               HealthState           : Error
                               DeployedApplicationHealthStateChunks : 
                                TotalCount            : 1

                                NodeName              : _Node_2
                                HealthState           : Ok
                                DeployedServicePackageHealthStateChunks :
                                    TotalCount            : 1

                                    ServiceManifestName   : WordCountServicePkg
                                    ServicePackageActivationId : 
                                    HealthState           : Ok

REST

Fragment kondycji klastra można pobrać za pomocą żądania GET lub żądania POST zawierającego zasady kondycji i zaawansowane filtry opisane w treści.

Zapytania ogólne

Zapytania ogólne zwracają listę jednostek usługi Service Fabric określonego typu. Są one udostępniane za pośrednictwem interfejsu API (za pośrednictwem metod w metodach FabricClient.QueryManager), poleceń cmdlet programu PowerShell i interfejsu REST. Te zapytania agregują podzapytania z wielu składników. Jednym z nich jest magazyn kondycji, który wypełnia zagregowany stan kondycji dla każdego wyniku zapytania.

Uwaga

Zapytania ogólne zwracają zagregowany stan kondycji jednostki i nie zawierają bogatych danych dotyczących kondycji. Jeśli jednostka nie jest w dobrej kondycji, możesz śledzić zapytania dotyczące kondycji, aby uzyskać wszystkie informacje o kondycji, w tym zdarzenia, stany kondycji podrzędnej i oceny w złej kondycji.

Jeśli zapytania ogólne zwracają nieznany stan kondycji jednostki, możliwe, że magazyn kondycji nie zawiera pełnych danych dotyczących jednostki. Istnieje również możliwość, że podzapytywanie do magazynu kondycji nie powiodło się (na przykład wystąpił błąd komunikacji lub magazyn kondycji został ograniczony). Postępuj zgodnie z zapytaniem o kondycję jednostki. Jeśli podzapytywanie napotkało błędy przejściowe, takie jak problemy z siecią, to zapytanie następcze może zakończyć się powodzeniem. Może również podać więcej szczegółów z magazynu kondycji o tym, dlaczego jednostka nie jest uwidoczniona.

Zapytania, które zawierają właściwość HealthState dla jednostek, to:

Uwaga

Niektóre zapytania zwracają wyniki stronicowane. Zwracanie tych zapytań jest listą pochodzącą z listy PagedList<T>. Jeśli wyniki nie pasują do komunikatu, zwracana jest tylko strona i token ContinuationToken, który śledzi, gdzie wyliczenie zostało zatrzymane. Kontynuuj wywoływanie tego samego zapytania i przekazywanie tokenu kontynuacji z poprzedniego zapytania w celu uzyskania następnych wyników.

Przykłady

Poniższy kod pobiera aplikacje w złej kondycji w klastrze:

var applications = fabricClient.QueryManager.GetApplicationListAsync().Result.Where(
  app => app.HealthState == HealthState.Error);

Następujące polecenie cmdlet pobiera szczegóły aplikacji dla aplikacji fabric:/WordCount. Zwróć uwagę, że stan kondycji jest ostrzegawczy.

PS C:\> Get-ServiceFabricApplication -ApplicationName fabric:/WordCount

ApplicationName        : fabric:/WordCount
ApplicationTypeName    : WordCount
ApplicationTypeVersion : 1.0.0
ApplicationStatus      : Ready
HealthState            : Warning
ApplicationParameters  : { "WordCountWebService_InstanceCount" = "1";
                         "_WFDebugParams_" = "[{"ServiceManifestName":"WordCountWebServicePkg","CodePackageName":"Code","EntryPointType":"Main","Debug
                         ExePath":"C:\\Program Files (x86)\\Microsoft Visual Studio
                         14.0\\Common7\\Packages\\Debugger\\VsDebugLaunchNotify.exe","DebugArguments":" {74f7e5d5-71a9-47e2-a8cd-1878ec4734f1} -p
                         [ProcessId] -tid [ThreadId]","EnvironmentBlock":"_NO_DEBUG_HEAP=1\u0000"},{"ServiceManifestName":"WordCountServicePkg","CodeP
                         ackageName":"Code","EntryPointType":"Main","DebugExePath":"C:\\Program Files (x86)\\Microsoft Visual Studio
                         14.0\\Common7\\Packages\\Debugger\\VsDebugLaunchNotify.exe","DebugArguments":" {2ab462e6-e0d1-4fda-a844-972f561fe751} -p
                         [ProcessId] -tid [ThreadId]","EnvironmentBlock":"_NO_DEBUG_HEAP=1\u0000"}]" }

Następujące polecenie cmdlet pobiera usługi ze stanem kondycji błędu:

PS D:\ServiceFabric> Get-ServiceFabricApplication | Get-ServiceFabricService | where {$_.HealthState -eq "Error"}


ServiceName            : fabric:/WordCount/WordCountService
ServiceKind            : Stateful
ServiceTypeName        : WordCountServiceType
IsServiceGroup         : False
ServiceManifestVersion : 1.0.0
HasPersistedState      : True
ServiceStatus          : Active
HealthState            : Error

Uaktualnienia klastrów i aplikacji

Podczas monitorowanego uaktualniania klastra i aplikacji usługa Service Fabric sprawdza kondycję, aby upewnić się, że wszystko pozostaje w dobrej kondycji. Jeśli jednostka jest w złej kondycji zgodnie z oceną przy użyciu skonfigurowanych zasad kondycji, uaktualnienie stosuje zasady specyficzne dla uaktualnienia w celu określenia następnej akcji. Uaktualnienie może zostać wstrzymane, aby umożliwić interakcję z użytkownikiem (np. naprawianie warunków błędu lub zmienianie zasad) lub automatyczne wycofanie do poprzedniej dobrej wersji.

Podczas uaktualniania klastra można uzyskać stan uaktualnienia klastra. Stan uaktualnienia obejmuje oceny w złej kondycji, które wskazują na to, co jest w złej kondycji w klastrze. Jeśli uaktualnienie zostanie wycofane z powodu problemów z kondycją, stan uaktualnienia zapamiętuje ostatnie przyczyny złej kondycji. Te informacje mogą pomóc administratorom zbadać, co po wycofaniu lub zatrzymaniu uaktualnienia nie powiodło się.

Podobnie podczas uaktualniania aplikacji wszystkie oceny w złej kondycji są zawarte w stanie uaktualnienia aplikacji.

Poniżej przedstawiono stan uaktualniania aplikacji dla zmodyfikowanej sieci szkieletowej:/WordCount aplikacji. Watchdog zgłosił błąd w jednej z jego replik. Uaktualnienie jest przywracane, ponieważ kontrole kondycji nie są przestrzegane.

PS C:\> Get-ServiceFabricApplicationUpgrade fabric:/WordCount

ApplicationName               : fabric:/WordCount
ApplicationTypeName           : WordCount
TargetApplicationTypeVersion  : 1.0.0.0
ApplicationParameters         : {}
StartTimestampUtc             : 4/21/2017 5:23:26 PM
FailureTimestampUtc           : 4/21/2017 5:23:37 PM
FailureReason                 : HealthCheck
UpgradeState                  : RollingBackInProgress
UpgradeDuration               : 00:00:23
CurrentUpgradeDomainDuration  : 00:00:00
CurrentUpgradeDomainProgress  : UD1

                                NodeName            : _Node_1
                                UpgradePhase        : Upgrading

                                NodeName            : _Node_2
                                UpgradePhase        : Upgrading

                                NodeName            : _Node_3
                                UpgradePhase        : PreUpgradeSafetyCheck
                                PendingSafetyChecks :
                                EnsurePartitionQuorum - PartitionId: 30db5be6-4e20-4698-8185-4bd7ca744020
NextUpgradeDomain             : UD2
UpgradeDomainsStatus          : { "UD1" = "Completed";
                                "UD2" = "Pending";
                                "UD3" = "Pending";
                                "UD4" = "Pending" }
UnhealthyEvaluations          :
                                Unhealthy services: 100% (1/1), ServiceType='WordCountServiceType', MaxPercentUnhealthyServices=0%.

                                  Unhealthy service: ServiceName='fabric:/WordCount/WordCountService', AggregatedHealthState='Error'.

                                      Unhealthy partitions: 100% (1/1), MaxPercentUnhealthyPartitionsPerService=0%.

                                      Unhealthy partition: PartitionId='a1f83a35-d6bf-4d39-b90d-28d15f39599b', AggregatedHealthState='Error'.

                                          Unhealthy replicas: 20% (1/5), MaxPercentUnhealthyReplicasPerPartition=0%.

                                          Unhealthy replica: PartitionId='a1f83a35-d6bf-4d39-b90d-28d15f39599b',
                                  ReplicaOrInstanceId='131031502346844058', AggregatedHealthState='Error'.

                                              Error event: SourceId='DiskWatcher', Property='Disk'.

UpgradeKind                   : Rolling
RollingUpgradeMode            : UnmonitoredAuto
ForceRestart                  : False
UpgradeReplicaSetCheckTimeout : 00:15:00

Przeczytaj więcej na temat uaktualniania aplikacji usługi Service Fabric.

Rozwiązywanie problemów przy użyciu ocen kondycji

Za każdym razem, gdy wystąpi problem z klastrem lub aplikacją, przyjrzyj się kondycji klastra lub aplikacji, aby wskazać, co jest złe. Oceny w złej kondycji zawierają szczegółowe informacje o tym, co wyzwoliło bieżący stan złej kondycji. Jeśli musisz, możesz przejść do szczegółów jednostek podrzędnych w złej kondycji, aby zidentyfikować główną przyczynę.

Rozważmy na przykład złą kondycję aplikacji, ponieważ istnieje raport o błędach dotyczący jednej z jego replik. Następujące polecenie cmdlet programu PowerShell pokazuje oceny w złej kondycji:

PS D:\ServiceFabric> Get-ServiceFabricApplicationHealth fabric:/WordCount -EventsFilter None -ServicesFilter None -DeployedApplicationsFilter None -ExcludeHealthStatistics


ApplicationName                 : fabric:/WordCount
AggregatedHealthState           : Error
UnhealthyEvaluations            : 
                                  Unhealthy services: 100% (1/1), ServiceType='WordCountServiceType', MaxPercentUnhealthyServices=0%.

                                  Unhealthy service: ServiceName='fabric:/WordCount/WordCountService', AggregatedHealthState='Error'.

                                    Unhealthy partitions: 100% (1/1), MaxPercentUnhealthyPartitionsPerService=0%.

                                    Unhealthy partition: PartitionId='af2e3e44-a8f8-45ac-9f31-4093eb897600', AggregatedHealthState='Error'.

                                        Unhealthy replicas: 20% (1/5), MaxPercentUnhealthyReplicasPerPartition=0%.

                                        Unhealthy replica: PartitionId='af2e3e44-a8f8-45ac-9f31-4093eb897600', ReplicaOrInstanceId='131444422260002646', AggregatedHealthState='Error'.

                                            Error event: SourceId='MyWatchdog', Property='Memory'.

ServiceHealthStates             : None
DeployedApplicationHealthStates : None
HealthEvents                    : None

Aby uzyskać więcej informacji, możesz przyjrzeć się repliki:

PS D:\ServiceFabric> Get-ServiceFabricReplicaHealth -ReplicaOrInstanceId 131444422260002646 -PartitionId af2e3e44-a8f8-45ac-9f31-4093eb897600


PartitionId           : af2e3e44-a8f8-45ac-9f31-4093eb897600
ReplicaId             : 131444422260002646
AggregatedHealthState : Error
UnhealthyEvaluations  : 
                        Error event: SourceId='MyWatchdog', Property='Memory'.

HealthEvents          : 
                        SourceId              : System.RA
                        Property              : State
                        HealthState           : Ok
                        SequenceNumber        : 131444422263668344
                        SentAt                : 7/13/2017 5:57:06 PM
                        ReceivedAt            : 7/13/2017 5:57:18 PM
                        TTL                   : Infinite
                        Description           : Replica has been created._Node_2
                        RemoveWhenExpired     : False
                        IsExpired             : False
                        Transitions           : Error->Ok = 7/13/2017 5:57:18 PM, LastWarning = 1/1/0001 12:00:00 AM

                        SourceId              : MyWatchdog
                        Property              : Memory
                        HealthState           : Error
                        SequenceNumber        : 131444451657749403
                        SentAt                : 7/13/2017 6:46:05 PM
                        ReceivedAt            : 7/13/2017 6:46:05 PM
                        TTL                   : Infinite
                        Description           : 
                        RemoveWhenExpired     : False
                        IsExpired             : False
                        Transitions           : Warning->Error = 7/13/2017 6:46:05 PM, LastOk = 1/1/0001 12:00:00 AM

Uwaga

Oceny w złej kondycji pokazują pierwszą przyczynę, dla którego jednostka jest oceniana pod kątem bieżącego stanu kondycji. Może istnieć wiele innych zdarzeń, które wyzwalają ten stan, ale nie są one odzwierciedlane w ocenach. Aby uzyskać więcej informacji, przejdź do szczegółów jednostek kondycji, aby ustalić wszystkie raporty w złej kondycji w klastrze.

Następne kroki

Używanie raportów kondycji systemu do rozwiązywania problemów

Dodawanie niestandardowych raportów kondycji usługi Service Fabric

Jak zgłaszać i sprawdzać kondycję usługi

Lokalne monitorowanie i diagnozowanie usług

Uaktualnianie aplikacji usługi Service Fabric