Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: Locale di Azure 2311.2 e versioni successive; Windows Server 2022, Windows Server 2019
Questo articolo fornisce informazioni dettagliate sui guasti del servizio di monitoraggio della salute in Azure Local e Windows Server.
Informazioni sui guasti del servizio salute
Il Servizio sanitario monitora costantemente il cluster Storage Spaces Direct per rilevare i problemi e generare "anomalie". Un cmdlet visualizza eventuali anomalie correnti, consentendo di verificare facilmente la salute della distribuzione senza esaminare ogni entità o funzionalità. Gli errori sono progettati per essere precisi, facili da comprendere e correggibili.
Ogni errore contiene cinque campi importanti:
- Gravità
- Descrizione del problema
- Passaggi successivi consigliati per risolvere il problema
- Identificazione delle informazioni sull'ente responsabile del guasto
- La posizione fisica (se applicabile)
Ad esempio, di seguito viene riportato un errore tipico:
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
Nota
La posizione fisica viene derivata dalla configurazione del dominio di errore. Per ulteriori informazioni sui domini di errore, vedere Consapevolezza dei domini di errore. Se non si specificano queste informazioni, il campo della posizione è meno utile. Ad esempio, può visualizzare solo il numero di slot.
Per informazioni di riferimento sui guasti, vedere Riferimento ai guasti del servizio integrità.
Analisi della causa radice
Il Servizio Sanitario può valutare la causalità potenziale tra le entità guaste per identificare e combinare i guasti che possono essere conseguenze dello stesso problema sottostante. Riconoscendo le catene di effetti, è possibile generare report più sintetici. Ad esempio, se un server è inattivo, è previsto che tutte le unità all'interno del server siano anche senza connettività. Di conseguenza, verrà generato un solo errore relativo alla causa principale; in questo caso, il server.
Uso in PowerShell
Per visualizzare eventuali errori correnti in PowerShell, eseguire il cmdlet seguente:
Get-HealthFault
In questo modo vengono restituiti eventuali errori che influiscono sul cluster Spazi di archiviazione diretta complessivo. In genere, questi errori riguardano l'hardware o la configurazione. Se non sono presenti errori, il cmdlet non restituisce nulla.
Nota
In un ambiente non di produzione e a proprio rischio, è possibile sperimentare questa funzionalità provocando intenzionalmente i difetti. Ad esempio, è possibile eseguire questa operazione rimuovendo un disco fisico o arrestando un nodo. Dopo la visualizzazione dell'errore, inserire nuovamente il disco fisico o riavviare il nodo per far scomparire l'errore.
Utilizzo in .NET e C#
Questa sezione illustra come connettersi al Servizio Sanitario, utilizzare gli oggetti individuati ed eseguire interrogazioni di errore.
Connessione
Per eseguire una query sul servizio sanitario, si stabilisce una CimSession con il cluster. A tale scopo, sono necessarie alcune operazioni disponibili solo in Microsoft .NET completo, ovvero non è possibile eseguire questa operazione direttamente da un'app Web o per dispositivi mobili. Gli esempi di codice in questa sezione usano C#, la scelta più semplice per questo livello di accesso ai dati.
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;
}
Il nome utente specificato deve essere un amministratore locale del computer di destinazione.
È consigliabile costruire password SecureString direttamente dall'input dell'utente in tempo reale, in modo che la password non venga mai archiviata in memoria in testo non crittografato. In questo modo è possibile attenuare un'ampia gamma di problemi di sicurezza. Ma in pratica, costruire come sopra è comune a scopo di prototipazione.
Individuare gli oggetti
Dopo aver stabilito CimSession, è possibile interrogare la Strumentazione gestione Windows (WMI) nel cluster.
Prima di poter ottenere errori o metriche, è necessario ottenere istanze di diversi oggetti pertinenti. Prima di tutto, ottieni il MSFT_StorageSubSystem che rappresenta Storage Spaces Direct nel cluster. A tale scopo, è possibile ottenere ogni MSFT_StorageNode nel cluster e ogni MSFT_Volume dei volumi di dati. Infine, è necessario ottenere il MSCluster_ClusterHealthService, il servizio di integrità stesso.
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();
}
Si tratta degli stessi oggetti che si ottengono in PowerShell usando cmdlet come Get-StorageSubSystem, Get-StorageNode e Get-Volume.
È possibile accedere a tutte le stesse proprietà, documentate in Classi API di gestione archiviazione.
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());
}
Errori della query
Richiama Diagnosi per ottenere eventuali errori correnti identificati nell'ambito di CimInstance di destinazione, che può essere il cluster o qualsiasi volume.
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!
}
}
}
Facoltativo: classe MyFault
Può essere opportuno costruire e rendere persistente la propria rappresentazione degli errori. Ad esempio, la classe MyFault archivia diverse proprietà chiave degli errori, tra cui FaultId, che possono essere usate in un secondo momento per associare gli aggiornamenti, rimuovere le notifiche o deduplicare nel caso in cui lo stesso errore venga rilevato più volte.
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));
}
L'elenco completo delle proprietà in ogni errore (DiagnoseResult) è documentato più avanti nella sezione Proprietà di errore .
Eventi di errore
Quando vengono creati, rimossi o aggiornati guasti, il Servizio di integrità genera eventi WMI. Questi elementi sono essenziali per mantenere sincronizzato lo stato dell'applicazione senza eseguire frequenti polling e possono essere utili per determinare quando inviare avvisi di posta elettronica, ad esempio. Per sottoscrivere questi eventi, il codice di esempio seguente usa il modello di progettazione Observer.
Prima di tutto, iscriviti agli eventi 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);
}
Implementare quindi un observer il cui metodo OnNext() viene richiamato ogni volta che viene generato un nuovo evento.
Ogni evento contiene ChangeType che indica se viene creato, rimosso o aggiornato un errore e il relativo FaultId.
Inoltre, ogni evento contiene tutte le proprietà dell'errore stesso.
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
}
}
Informazioni sul ciclo di vita degli errori
Gli errori non devono essere contrassegnati come "visti" o risolti dall'utente. Vengono creati quando il Servizio integrità osserva un problema e vengono rimossi automaticamente solo dopo che il Servizio integrità non può più osservare il problema. In generale, ciò riflette che il problema è stato risolto.
In alcuni casi, tuttavia, gli errori possono essere rilevati dal Servizio sanitario, ad esempio dopo un failover, connettività intermittente e così via. Per questo motivo, può essere opportuno rendere persistente la propria rappresentazione degli errori, in modo che sia possibile deduplicare facilmente. Ciò è particolarmente importante se si inviano avvisi di posta elettronica o equivalenti.
Proprietà del difetto
La tabella seguente presenta diverse proprietà chiave dell'oggetto di errore. Per lo schema completo, esaminare la classe MSFT_StorageDiagnoseResult in storagewmi.mof.
| Proprietà | Esempio |
|---|---|
| ID di Errore | {12345-12345-12345-12345-12345} |
| TipoDiGuasto | Microsoft.Health.FaultType.Volume.Capacità |
| Motivo | "Il volume sta esaurendo lo spazio disponibile." |
| Gravità Percepita | 5 |
| DescrizioneOggettoGuasto | Contoso XYZ9000 Numero di serie 123456789 |
| PosizioneOggettoDifettosa | Rack A06, UR 25, Slot 11 |
| Azioni Consigliate | {"Espandi il volume.", "Migra i carichi di lavoro su altri volumi."} |
FaultId: ID univoco nell'ambito di un cluster.
PerceivedSeverity: PerceivedSeverity = { 4, 5, 6 } = { "Informational", "Warning", e "Error" }, o colori equivalenti, ad esempio blu, giallo e rosso.
FaultingObjectDescription: informazioni sulle parti per l'hardware, in genere vuote per gli oggetti software.
FaultingObjectLocation: informazioni sulla posizione per l'hardware, in genere vuote per gli oggetti software.
RecommendedActions: elenco di azioni consigliate indipendenti e non in un ordine specifico. Oggi, questo elenco è spesso di lunghezza pari a 1.
Proprietà dell'evento di errore
La tabella seguente presenta diverse proprietà chiave dell'evento di errore. Per lo schema completo, esaminare la classe MSFT_StorageFaultEvent in storagewmi.mof.
Si noti changetype che indica se viene creato, rimosso o aggiornato un errore e FaultId. Un evento contiene anche tutte le proprietà dell'errore interessato.
| Proprietà | Esempio |
|---|---|
| TipoDiModifica | 0 |
| ID di Errore | {12345-12345-12345-12345-12345} |
| TipoDiGuasto | Microsoft.Health.FaultType.Volume.Capacità |
| Motivo | "Il volume sta esaurendo lo spazio disponibile." |
| Gravità Percepita | 5 |
| DescrizioneOggettoGuasto | Contoso XYZ9000 Numero di serie 123456789 |
| PosizioneOggettoDifettosa | Rack A06, UR 25, Slot 11 |
| Azioni Consigliate | {"Espandi il volume.", "Migra i carichi di lavoro su altri volumi."} |
ChangeType: ChangeType = { 0, 1, 2 } = { "Create", "Remove", "Update" }.
Riferimento agli errori del servizio sanitario
Il Servizio di Monitoraggio della Salute in Azure locale e Windows Server può individuare guasti nei vari componenti del sistema, inclusi archiviazione, rete e risorse di calcolo.
Per una panoramica dettagliata degli errori di sistema di integrità, inclusi le mappature della gravità degli errori, le impostazioni di integrità (tipi di dati, associazioni di errore, valori predefiniti e descrizioni) e l'elenco delle metriche raccolte, scarica il foglio di calcolo Errori del Servizio Integrità.
Considerazioni sui guasti del servizio di salute:
Alcuni guasti sono disabilitati per impostazione predefinita. Per abilitare un guasto, impostare l'impostazione di salute corrispondente su true. Ad esempio, il tipo di errore
Microsoft.Health.FaultType.PhysicalDisk.HighLatency.AverageIOè disabilitato per impostazione predefinita. Per abilitarla, impostare l'impostazione di statoSystem.Storage.PhysicalDisk.HighLatency.Threshold.Tail.Enabledsu true.Lo stato di salute dei componenti dell'alloggiamento di archiviazione, come ventole, alimentatori e sensori, è derivato dai SCSI Enclosure Services (SES). Se il fornitore non fornisce queste informazioni, il servizio sanitario non può visualizzarlo.