Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: Azure Local 2311.2 e posterior; Windows Server 2022, Windows Server 2019
Este artigo fornece informações detalhadas sobre falhas do Serviço de Saúde no Azure Local e no Windows Server.
Sobre falhas no Serviço de Saúde
O Serviço de Saúde monitora constantemente o cluster do Storage Spaces Direct para detetar problemas e gerar "falhas". Um cmdlet exibe todas as falhas atuais, permitindo verificar facilmente a integridade da sua implementação sem examinar cada entidade ou recurso por vez. As falhas foram concebidas para serem precisas, fáceis de compreender e que permitem ação.
Cada falha contém cinco campos importantes:
- Gravidade
- Descrição do problema
- Próximas etapas recomendadas para resolver o problema
- Informações de identificação para a entidade com falha
- A sua localização física (se aplicável)
Por exemplo, eis uma falha comum:
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
A localização física é derivada da sua configuração de domínio de falhas. Para obter mais informações sobre domínios de falha, consulte Reconhecimento de domínio de falha. Se você não fornecer essas informações, o campo de localização será menos útil. Por exemplo, isso pode mostrar apenas o número do slot.
Para obter informações de referência sobre falhas, consulte Referência de falhas do Serviço de Saúde.
Análise de causa raiz
O Serviço de Saúde pode avaliar a causalidade potencial entre as entidades culpadoras para identificar e combinar falhas que são consequências do mesmo problema subjacente. Ao reconhecer cadeias de causa e efeito, tal produz relatórios menos detalhados. Por exemplo, se um servidor estiver inativo, espera-se que todas as unidades dentro do servidor também estejam sem conectividade. Portanto, apenas uma falha será atribuída à causa raiz - neste caso, o servidor.
Utilização no PowerShell
Para ver quaisquer falhas atuais no PowerShell, execute o seguinte cmdlet:
Get-HealthFault
Isso retorna quaisquer falhas que afetem o cluster geral do Storage Spaces Direct. Na maioria das vezes, essas falhas estão relacionadas ao hardware ou à configuração. Se não houver falhas, o cmdlet não retornará nada.
Nota
Em um ambiente de não produção, e por sua conta e risco, você pode experimentar esse recurso acionando falhas por conta própria. Por exemplo, pode-se fazer isso removendo um disco físico ou desligando um nó. Depois de a falha aparecer, volte a inserir o disco físico ou reinicie o nó para fazer com que a falha desapareça.
Uso em .NET e C#
Esta seção mostra como se conectar ao Serviço de Saúde, usar objetos de descoberta e executar consultas de falha.
Conectar
Para consultar o Serviço de Saúde, você estabelece uma CimSession com o cluster. Para fazer isso, você precisará de algumas coisas que só estão disponíveis no Microsoft .NET completo, o que significa que você não pode fazer isso prontamente diretamente de um aplicativo Web ou móvel. Os exemplos de código nesta seção usam C#, a opção mais simples para essa camada de acesso a dados.
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;
}
O nome de usuário fornecido deve ser um administrador local do computador de destino.
Recomendamos construir o Password SecureString diretamente da entrada do usuário em tempo real, para que a senha nunca seja armazenada na memória em texto não criptografado. Isso ajuda a mitigar uma variedade de preocupações de segurança. Mas, na prática, construí-lo como acima é comum para fins de prototipagem.
Descobrir objetos
Com o CimSession estabelecido, você pode consultar a Instrumentação de Gerenciamento do Windows (WMI) no cluster.
Antes de obter Falhas ou Métricas, é necessário obter instâncias de vários objetos relevantes. Primeiro, obtenha o MSFT_StorageSubSystem que representa os Espaços de Armazenamento Diretos no cluster. Usando isso, você pode obter todos os MSFT_StorageNode no cluster e cada MSFT_Volume dos volumes de dados. Finalmente, necessita obter o MSCluster_ClusterHealthService, o próprio Serviço de Saúde do Cluster.
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();
}
Esses são os mesmos objetos que você obtém no PowerShell usando cmdlets como Get-StorageSubSystem, Get-StorageNode e Get-Volume.
Você pode acessar todas as mesmas propriedades, documentadas em Storage Management API Classes.
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());
}
Erros na consulta
Invoque Diagnose para obter quaisquer falhas atuais relacionadas com a CimInstance de destino, que pode ser o cluster ou qualquer 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!
}
}
}
Opcional: classe MyFault
Pode fazer sentido criar e manter a sua própria representação de erros. Por exemplo, a classe MyFault armazena várias propriedades principais de falhas, incluindo o FaultId, que pode ser usado posteriormente para associar atualizações, remover notificações ou desduplicar caso a mesma falha seja detetada várias vezes.
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));
}
A lista completa de propriedades em cada falha (DiagnoseResult) é documentada posteriormente na seção Propriedades da falha .
Eventos de falha
Quando as falhas são criadas, removidas ou atualizadas, o Health Service gera eventos WMI. Eles são essenciais para manter o estado do aplicativo sincronizado sem sondagens frequentes e podem ajudar em coisas como determinar quando enviar alertas por e-mail, por exemplo. Para se inscrever nesses eventos, o código de exemplo a seguir usa o Padrão de Design do Observador.
Em primeiro lugar, inscreva-se nos eventos 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);
}
Em seguida, implemente um Observer cujo método OnNext() é invocado sempre que um novo evento é gerado.
Cada evento contém ChangeType que indica se uma falha é criada, removida ou atualizada e o FaultId relevante.
Além disso, cada evento contém todas as propriedades da falha em si.
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
}
}
Compreender o ciclo de vida da falha
As falhas não se destinam a ser marcadas como "vistas" ou resolvidas pelo utilizador. São criados quando o Serviço de Saúde observa um problema, e só são removidos automaticamente depois de o Serviço de Saúde já não conseguir observar o problema. Em geral, isso reflete que o problema foi corrigido.
No entanto, em alguns casos, as falhas podem ser redescobertas pelo Serviço de Saúde, como após um failover, conectividade intermitente e assim por diante. Por esta razão, pode fazer sentido manter a sua própria representação de erros, para que possa facilmente desduplicar. Isso é especialmente importante se você enviar alertas por e-mail ou equivalente.
Propriedades de falha
A tabela a seguir apresenta várias propriedades principais do objeto de falha. Para obter o esquema completo, inspecione a classe MSFT_StorageDiagnoseResult em storagewmi.mof.
Propriedade | Exemplo |
---|---|
Identificador de Falha | {12345-12345-12345-12345-12345} |
Tipo de falha | Microsoft.Health.FaultType.Volume.Capacity |
Razão | "O volume está ficando sem espaço disponível." |
Gravidade Percebida | 5 |
DescriçãoDoObjetoComFalha | Contoso XYZ9000 N.º de Série 123456789 |
Localização do Objeto com Falha | Estante A06, RU 25, Slot 11 |
Ações Recomendadas | {"Expandir o volume.", "Migrar cargas de trabalho para outros volumes."} |
FaultId: ID exclusivo dentro do escopo de um cluster.
PerceivedSeverity: PerceivedSeverity = { 4, 5, 6 } = { "Informativo", "Aviso" e "Erro" }, ou cores equivalentes como azul, amarelo e vermelho.
FaultingObjectDescription: Informação sobre partes de hardware, geralmente deixada em branco para objetos de software.
FaultingObjectLocation: Informações de localização para hardware, normalmente em branco para objetos de software.
RecommendedActions: Lista de ações recomendadas que são independentes e sem ordem específica. Hoje, esta lista é muitas vezes de comprimento 1.
Propriedades do evento de falha
A tabela a seguir apresenta várias propriedades principais do evento de falha. Para obter o esquema completo, inspecione a classe MSFT_StorageFaultEvent em storagewmi.mof.
Observe o ChangeType que indica se uma falha está sendo criada, removida ou atualizada e o FaultId. Um evento também contém todas as propriedades da falha afetada.
Propriedade | Exemplo |
---|---|
TipoDeAlteração | 0 |
Identificador de Falha | {12345-12345-12345-12345-12345} |
Tipo de falha | Microsoft.Health.FaultType.Volume.Capacity |
Razão | "O volume está ficando sem espaço disponível." |
Gravidade Percebida | 5 |
DescriçãoDoObjetoComFalha | Contoso XYZ9000 N.º de Série 123456789 |
Localização do Objeto com Falha | Estante A06, RU 25, Slot 11 |
Ações Recomendadas | {"Expandir o volume.", "Migrar cargas de trabalho para outros volumes."} |
ChangeType: ChangeType = { 0, 1, 2 } = { "Criar", "Remover", "Atualizar" }.
Referência de falhas do Serviço de Saúde
O Serviço de Saúde no Azure Local e no Windows Server pode detetar falhas em vários componentes do sistema, incluindo armazenamento, rede e recursos de computação.
Para obter uma visão geral detalhada das falhas de integridade, incluindo mapeamentos de gravidade de falhas, configurações de integridade (tipos de dados, associações de falhas, valores padrão e descrições) e a lista de métricas coletadas, baixe a planilha de falhas do Serviço de Integridade .
Considerações para falhas do Serviço de Saúde:
Algumas falhas são desativadas por padrão. Para habilitar uma falha, defina a configuração de integridade correspondente como true. Por exemplo, o tipo
Microsoft.Health.FaultType.PhysicalDisk.HighLatency.AverageIO
de falha está desativado por padrão. Para habilitá-lo, defina a configuraçãoSystem.Storage.PhysicalDisk.HighLatency.Threshold.Tail.Enabled
de integridade como true.O estado dos componentes do compartimento de armazenamento, como ventiladores, fontes de alimentação e sensores, é obtido a partir dos Serviços de Gabinete SCSI (SES). Se o seu fornecedor não fornecer essas informações, o Serviço de Saúde não poderá exibi-las.