Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: Azure Local 2311.2 i nowsze; Windows Server 2022, Windows Server 2019
Ten artykuł zawiera szczegółowe informacje o usterkach usługi zdrowotnej w Azure lokalny i Windows Server.
Informacje o błędach usługi zdrowotnej
Usługa Monitorowania Zdrowotności stale monitoruje klaster Storage Spaces Direct w celu wykrywania problemów i generowania "błędów". Jedno polecenie cmdlet wyświetla wszystkie bieżące błędy, co pozwala na łatwą weryfikację stanu wdrożenia bez konieczności przeglądania każdej jednostki lub funkcji z kolei. Błędy zostały tak zaprojektowane, aby były dokładne, łatwe do zrozumienia i możliwe do podjęcia działań.
Każda usterka zawiera pięć ważnych pól:
- Ważność
- Opis problemu
- Zalecane następne kroki w celu rozwiązania problemu
- Informacje identyfikujące błędną jednostkę
- Jej lokalizacja fizyczna (jeśli dotyczy)
Na przykład poniżej przedstawiono typowy błąd:
Severity: MINOR
Reason: Connectivity has been lost to the physical disk.
Recommendation: Check that the physical disk is working and properly connected.
Part: Manufacturer Contoso, Model XYZ9000, Serial 123456789
Location: Seattle DC, Rack B07, Node 4, Slot 11
Uwaga
Fizyczna lokalizacja jest określana na podstawie konfiguracji domeny błędów. Aby uzyskać więcej informacji na temat domen błędów, zobacz Rozpoznawanie domeny błędów. Jeśli te informacje nie są podane, pole lokalizacji jest mniej przydatne. Może na przykład wyświetlać tylko numer miejsca.
Aby uzyskać informacje o błędach, zobacz Referencje dotyczące błędów serwisu zdrowia.
Analiza głównej przyczyny
Usługi zdrowotne mogą ocenić potencjalną przyczynowość wśród jednostek odpowiedzialnych za usterki w celu zidentyfikowania i połączenia usterek będących skutkiem tego samego podstawowego problemu. Dzięki rozpoznawaniu powiązanych efektów, raporty stają się mniej rozmowne. Jeśli na przykład serwer nie działa, oczekuje się, że wszystkie dyski w ramach serwera również nie będą miały łączności. W związku z tym dla głównej przyczyny zostanie zgłoszony tylko jeden błąd — w tym przypadku serwer.
Użycie w programie PowerShell
Aby wyświetlić wszystkie bieżące błędy w programie PowerShell, uruchom następujące polecenie cmdlet:
Get-HealthFault
To spowoduje wyświetlenie wszelkich błędów dotyczących działania całego klastra Storage Spaces Direct. Najczęściej te błędy odnoszą się do sprzętu lub konfiguracji. Jeśli nie ma żadnych błędów, polecenie cmdlet nie zwraca nic.
Uwaga
W środowisku nieprodukcyjnym i na własne ryzyko można eksperymentować z tą funkcją, wyzwalając błędy samodzielnie. Można to zrobić na przykład, usuwając jeden dysk fizyczny lub zamykając jeden węzeł. Po pojawieniu się błędu ponownie wstaw dysk fizyczny lub ponownie uruchom węzeł, aby usunąć błąd.
Użycie na platformie .NET i C#
W tej sekcji przedstawiono sposób nawiązywania połączenia z Usługą zdrowotną, używania obiektów odnajdywania i wykonywania zapytań dotyczących błędów.
Połącz
Aby wykonać zapytanie dotyczące usług zdrowotnych, należy ustanowić CimSession z klastrem. W tym celu będziesz potrzebować pewnych rzeczy, które są dostępne tylko w pełnej wersji platformy Microsoft .NET, co oznacza, że nie można tego zrobić bezpośrednio z poziomu aplikacji internetowej lub mobilnej. Przykłady kodu w tej sekcji używają języka C#, najprostszego wyboru dla tej warstwy dostępu do danych.
using System.Security;
using Microsoft.Management.Infrastructure;
public CimSession Connect(string Domain = "...", string Computer = "...", string Username = "...", string Password = "...")
{
SecureString PasswordSecureString = new SecureString();
foreach (char c in Password)
{
PasswordSecureString.AppendChar(c);
}
CimCredential Credentials = new CimCredential(
PasswordAuthenticationMechanism.Default, Domain, Username, PasswordSecureString);
WSManSessionOptions SessionOptions = new WSManSessionOptions();
SessionOptions.AddDestinationCredentials(Credentials);
Session = CimSession.Create(Computer, SessionOptions);
return Session;
}
Podana nazwa użytkownika powinna być administratorem lokalnym komputera docelowego.
Zalecamy konstruowanie SecureString hasła bezpośrednio z danych wejściowych użytkownika w czasie rzeczywistym, aby hasło nigdy nie było przechowywane w pamięci w postaci zwykłego tekstu. Pomaga to wyeliminować różne problemy związane z bezpieczeństwem. Jednak w praktyce konstruowanie go tak jak powyżej jest powszechne w celach prototypowych.
Odnajdywanie obiektów
Po ustanowieniu cimSession można wykonywać zapytania dotyczące instrumentacji zarządzania Windows (WMI) w klastrze.
Zanim będziesz mógł uzyskać Błędy lub Metryki, musisz zdobyć instancje kilku istotnych obiektów. Najpierw uzyskaj MSFT_StorageSubSystem, które reprezentuje Storage Spaces Direct w klastrze. W tym celu można uzyskać każdy MSFT_StorageNode w klastrze i każdy wolumin danych MSFT_Volume. Na koniec musisz pobrać MSCluster_ClusterHealthService, czyli samą usługę kondycji.
CimInstance Cluster;
List<CimInstance> Nodes;
List<CimInstance> Volumes;
CimInstance HealthService;
public void DiscoverObjects(CimSession Session)
{
// Get MSFT_StorageSubSystem for Storage Spaces Direct
Cluster = Session.QueryInstances(@"root\microsoft\windows\storage", "WQL", "SELECT * FROM MSFT_StorageSubSystem")
.First(Instance => (Instance.CimInstanceProperties["FriendlyName"].Value.ToString()).Contains("Cluster"));
// Get MSFT_StorageNode for each cluster node
Nodes = Session.EnumerateAssociatedInstances(Cluster.CimSystemProperties.Namespace,
Cluster, "MSFT_StorageSubSystemToStorageNode", null, "StorageSubSystem", "StorageNode").ToList();
// Get MSFT_Volumes for each data volume
Volumes = Session.EnumerateAssociatedInstances(Cluster.CimSystemProperties.Namespace,
Cluster, "MSFT_StorageSubSystemToVolume", null, "StorageSubSystem", "Volume").ToList();
// Get MSFT_StorageHealth itself
HealthService = Session.EnumerateAssociatedInstances(Cluster.CimSystemProperties.Namespace,
Cluster, "MSFT_StorageSubSystemToStorageHealth", null, "StorageSubSystem", "StorageHealth").First();
}
Są to te same obiekty, które otrzymujesz w programie PowerShell przy użyciu poleceń cmdlet, takich jak Get-StorageSubSystem, Get-StorageNode i Get-Volume.
Dostęp do wszystkich tych samych właściwości można uzyskać, które są opisane w Klasy interfejsu API zarządzania pamięcią.
using System.Diagnostics;
foreach (CimInstance Node in Nodes)
{
// For illustration, write each node's Name to the console. You could also write State (up/down), or anything else!
Debug.WriteLine("Discovered Node " + Node.CimInstanceProperties["Name"].Value.ToString());
}
Błędy zapytań
Wywołaj Diagnose, aby zdiagnozować ewentualne bieżące błędy związane z docelowym CimInstance, które może być klastrem lub dowolnym woluminem.
public void GetFaults(CimSession Session, CimInstance Target)
{
// Set Parameters (None)
CimMethodParametersCollection FaultsParams = new CimMethodParametersCollection();
// Invoke API
CimMethodResult Result = Session.InvokeMethod(Target, "Diagnose", FaultsParams);
IEnumerable<CimInstance> DiagnoseResults = (IEnumerable<CimInstance>)Result.OutParameters["DiagnoseResults"].Value;
// Unpack
if (DiagnoseResults != null)
{
foreach (CimInstance DiagnoseResult in DiagnoseResults)
{
// TODO: Whatever you want!
}
}
}
Opcjonalnie: Klasa MyFault
Może to mieć sens, aby skonstruować i utrwalać własną reprezentację błędów. Na przykład klasa MyFault przechowuje kilka kluczowych właściwości błędów, w tym FaultId, które mogą być używane później do kojarzenia aktualizacji, usuwania powiadomień lub deduplikacji w przypadku wykrycia tego samego błędu wiele razy.
public class MyFault {
public String FaultId { get; set; }
public String Reason { get; set; }
public String Severity { get; set; }
public String Description { get; set; }
public String Location { get; set; }
// Constructor
public MyFault(CimInstance DiagnoseResult)
{
CimKeyedCollection<CimProperty> Properties = DiagnoseResult.CimInstanceProperties;
FaultId = Properties["FaultId" ].Value.ToString();
Reason = Properties["Reason" ].Value.ToString();
Severity = Properties["PerceivedSeverity" ].Value.ToString();
Description = Properties["FaultingObjectDescription"].Value.ToString();
Location = Properties["FaultingObjectLocation" ].Value.ToString();
}
}
List<MyFault> Faults = new List<MyFault>;
foreach (CimInstance DiagnoseResult in DiagnoseResults)
{
Faults.Add(new Fault(DiagnoseResult));
}
Pełna lista właściwości w każdym błędzie (DiagnoseResult) jest udokumentowana w dalszej części sekcji Właściwości błędu.
Zdarzenia błędów
Podczas tworzenia, usuwania lub aktualizowania błędów, Usługa Zdrowia generuje zdarzenia WMI. Są one niezbędne do zapewnienia synchronizacji stanu aplikacji bez częstego sondowania i mogą pomóc w określeniu, kiedy na przykład wysyłać alerty e-mail. Aby zapisać się na te zdarzenia, poniższy przykładowy kod korzysta z wzorca projektowego obserwatora.
Najpierw zasubskrybuj zdarzenia MSFT_StorageFaultEvent.
public void ListenForFaultEvents()
{
IObservable<CimSubscriptionResult> Events = Session.SubscribeAsync(
@"root\microsoft\windows\storage", "WQL", "SELECT * FROM MSFT_StorageFaultEvent");
// Subscribe the Observer
FaultsObserver<CimSubscriptionResult> Observer = new FaultsObserver<CimSubscriptionResult>(this);
IDisposable Disposeable = Events.Subscribe(Observer);
}
Następnie zaimplementuj obserwatora, którego metoda OnNext() jest wywoływana za każdym razem, gdy zostanie wygenerowane nowe zdarzenie.
Każde zdarzenie zawiera wartość ChangeType , która wskazuje, czy błąd został utworzony, usunięty, czy zaktualizowany oraz odpowiedni identyfikator FaultId.
Ponadto każde zdarzenie zawiera wszystkie właściwości samego błędu.
class FaultsObserver : IObserver
{
public void OnNext(T Event)
{
// Cast
CimSubscriptionResult SubscriptionResult = Event as CimSubscriptionResult;
if (SubscriptionResult != null)
{
// Unpack
CimKeyedCollection<CimProperty> Properties = SubscriptionResult.Instance.CimInstanceProperties;
String ChangeType = Properties["ChangeType"].Value.ToString();
String FaultId = Properties["FaultId"].Value.ToString();
// Create
if (ChangeType == "0")
{
Fault MyNewFault = new MyFault(SubscriptionResult.Instance);
// TODO: Whatever you want!
}
// Remove
if (ChangeType == "1")
{
// TODO: Use FaultId to find and delete whatever representation you have...
}
// Update
if (ChangeType == "2")
{
// TODO: Use FaultId to find and modify whatever representation you have...
}
}
}
public void OnError(Exception e)
{
// Handle Exceptions
}
public void OnCompleted()
{
// Nothing
}
}
Opis cyklu życia błędów
Błędy nie mają być oznaczone jako "widoczne" lub rozwiązane przez użytkownika. Są one tworzone, gdy Usługa zdrowotna obserwuje problem i są usuwane automatycznie dopiero wtedy, gdy Usługa zdrowotna nie może już go obserwować. Ogólnie rzecz biorąc, oznacza to, że problem został rozwiązany.
Jednak w niektórych przypadkach błędy mogą zostać ponownie wykryte przez Służbę Zdrowia, takie jak po awarii i przełączeniu, sporadycznym połączeniu i tak dalej. Z tego powodu sensowne może być utrwalenie własnego przedstawienia błędów, aby móc łatwo dokonywać deduplikacji. Jest to szczególnie ważne, jeśli wysyłasz alerty e-mail lub równoważne.
Właściwości usterki
W poniższej tabeli przedstawiono kilka kluczowych właściwości obiektu błędów. Aby uzyskać pełny schemat, sprawdź klasę MSFT_StorageDiagnoseResult w pliku storagewmi.mof.
Własność | Przykład |
---|---|
Identyfikator błędu | {12345-12345-12345-12345-12345} |
Typ błędu | Microsoft.Health.FaultType.Vołumen.Pojemność |
Przyczyna | "Brak dostępnego miejsca na woluminie". |
Postrzegana surowość | 5 |
OpisObiektuUsterki | Contoso XYZ9000 Nr. seryjny 123456789 |
LokalizacjaObiektuZawodzącego | Stojak A06, RU 25, Gniazdo 11 |
Zalecaneakcje | {"Rozszerz wolumen.", "Migruj obciążenia robocze do innych wolumenów."} |
FaultId: Unikalne ID w obrębie jednego klastra.
PerceivedSeverity: PerceivedSeverity = { 4, 5, 6 } = { "Informacyjne", "Ostrzeżenie", i "Błąd" }, lub odpowiadające kolory takie jak niebieski, żółty i czerwony.
FaultingObjectDescription: Informacje o części sprzętu, zazwyczaj puste dla obiektów programowych.
FaultingObjectLocation: informacje o lokalizacji sprzętu, zwykle puste dla obiektów oprogramowania.
RecommendedActions: lista zalecanych działań, które są niezależne i w żadnej określonej kolejności. Obecnie ta lista ma często długość 1.
Właściwości zdarzenia usterki
W poniższej tabeli przedstawiono kilka kluczowych właściwości zdarzenia błędu. Aby uzyskać pełny schemat, sprawdź klasę MSFT_StorageFaultEvent w pliku storagewmi.mof.
Zwróć uwagę na typ ChangeType , który wskazuje, czy błąd jest tworzony, usuwany, czy aktualizowany, oraz FaultId. Zdarzenie zawiera również wszystkie właściwości błędu, którego dotyczy problem.
Własność | Przykład |
---|---|
TypZmiany | 0 |
Identyfikator błędu | {12345-12345-12345-12345-12345} |
Typ błędu | Microsoft.Health.FaultType.Vołumen.Pojemność |
Przyczyna | "Brak dostępnego miejsca na woluminie". |
Postrzegana surowość | 5 |
OpisObiektuUsterki | Contoso XYZ9000 Nr. seryjny 123456789 |
LokalizacjaObiektuZawodzącego | Stojak A06, RU 25, Gniazdo 11 |
Zalecaneakcje | {"Rozszerz wolumen.", "Migruj obciążenia robocze do innych wolumenów."} |
ChangeType: ChangeType = { 0, 1, 2 } = { "Create", "Remove", "Update" }.
Dokumentacja błędów usługi monitorowania zdrowia systemu
Usługa zdrowotna na platformie Microsoft Azure na miejscu oraz w systemie Windows Server może wykrywać błędy w różnych składnikach systemu, w tym w przechowywaniu, sieci i zasobach obliczeniowych.
Aby uzyskać szczegółowy przegląd błędów zdrowia, w tym mapowania poziomu poważności błędów, ustawień zdrowia (typów danych, powiązania błędów, wartości domyślnych i opisów) oraz listy zebranych metryk, pobierz arkusz kalkulacyjny błędów usługi zdrowia.
Rozważania dotyczące błędów usługi zdrowotnej:
Niektóre błędy są domyślnie wyłączone. Aby włączyć usterkę, ustaw odpowiednie ustawienie stanu na wartość prawda. Na przykład domyślnie wyłączony jest typ błędu
Microsoft.Health.FaultType.PhysicalDisk.HighLatency.AverageIO
. Aby ją włączyć, ustaw ustawienieSystem.Storage.PhysicalDisk.HighLatency.Threshold.Tail.Enabled
kondycji na true.Kondycja składników obudowy pamięci masowej, takich jak wentylatory, zasilacze i czujniki, pochodzi z programu usług obudowy SCSI (SES). Jeśli dostawca nie dostarczy tych informacji, usługa zdrowotna nie może ich wyświetlić.