Partilhar via


Ver as falhas do Serviço de Saúde

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ção System.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.

Referências adicionais