Sdílet prostřednictvím


Získání historie výkonu clusteru

Platí pro: Azure Local, verze 23H2 a 22H2; Windows Server 2022, Windows Server 2019

Služba Health Service snižuje práci potřebnou k získání informací o výkonu a kapacitě za provozu z vašeho clusteru Prostory úložiště s přímým přístupem. Jedna rutina poskytuje kurátorovaný seznam základních metrik, které se shromažďují efektivně a agregují dynamicky napříč uzly s integrovanou logikou pro detekci členství v clusteru. Všechny hodnoty jsou poskytované v reálném čase a platí jen pro daný okamžik.

Použití v PowerShellu

K získání metrik pro celý cluster Prostory úložiště s přímým přístupem použijte následující rutinu:

Get-ClusterPerformanceHistory

Tip

Pomocí aliasu Get-ClusterPerf uložte některé klávesové zkratky.

Můžete také získat metriky pro jeden konkrétní svazek nebo server:

Get-Volume -FileSystemLabel <Label> | Get-ClusterPerformanceHistory

Get-StorageNode -Name <Name> | Get-ClusterPerformanceHistory

Využití v .NET a C#

V těchto částech se dozvíte, jak se připojit ke službě Health Service, použít zjistit objekty a implementovat pozorovatele k zahájení metrik streamování.

Propojit

Pro dotazování služby Health Service vytvoříte cimSession s clusterem. K tomu potřebujete některé věci, které jsou k dispozici pouze v plném rozsahu microsoft .NET, což znamená, že to nemůžete snadno udělat přímo z webové nebo mobilní aplikace. Ukázky kódu v této části používají jazyk C#, což je nejjednodušší volba pro tuto vrstvu přístupu k datům.

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;
}

Zadané uživatelské jméno by mělo být místním správcem cílového počítače.

Doporučujeme vytvořit řetězec SecureString hesla přímo ze vstupu uživatele v reálném čase, aby heslo nikdy nebyl uložen v paměti v nezašifrované podobě. To pomáhá zmírnit celou řadu problémů se zabezpečením. V praxi je ale pro účely vytváření prototypů běžné, jak je uvedeno výše.

Zjišťování objektů

Se zavedenou cimsession můžete dotazovat rozhraní WMI (Windows Management Instrumentation) v clusteru.

Než budete moct získat chyby nebo metriky, musíte získat instance několika relevantních objektů. Nejprve získejte MSFT_StorageSubSystem, který představuje Prostory úložiště s přímým přístupem v clusteru. Pomocí toho můžete získat všechny MSFT_StorageNode v clusteru a každý MSFT_Volume datových svazků. Nakonec potřebujete získat MSCluster_ClusterHealthService, samotnou službu Health Service.

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 MSCluster_ClusterHealthService itself
    HealthService = session.QueryInstances(@"root\MSCluster", "WQL", "SELECT * FROM MSCluster_ClusterHealthService").First();
}

Jedná se o stejné objekty, které získáte v PowerShellu pomocí rutin, jako jsou Get-StorageSubSystem, Get-StorageNode a Get-Volume.

Ke všem stejným vlastnostem, které jsou popsané ve třídách rozhraní API služby Storage Management, máte přístup.

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());
}

Vyvoláním metody GetMetric zahájíte ukázky streamování seznamu základních metrik založených na zadaných názvech metrik z parametru MetricName , které se shromažďují efektivně a agregují dynamicky napříč uzly s integrovanou logikou pro detekci členství v clusteru. Ukázky přicházejí na základě zadaného časového rámce z parametru StreamName .

Úplný seznam dostupných metrik najdete v historii výkonu pro Prostory úložiště s přímým přístupem.

IObserver.OnNext()

Tento vzorový kód používá vzor návrhu pozorovatele k implementaci pozorovatele, jehož OnNext() metoda je vyvolána při příchodu každé nové ukázky metrik. Jeho OnCompleted() metoda je volána if/when streaming end. Můžete ho například použít k opětovnému zavedení streamování, aby pokračoval neomezeně dlouho.

class MetricsObserver<T> : IObserver<T>
{
    public void OnNext(T Result)
    {
        // Cast
        CimMethodStreamedResult StreamedResult = Result as CimMethodStreamedResult;

        if (StreamedResult != null)
        {
            CimInstance Metric = (CimInstance)StreamedResult.ItemValue;
            Console.WriteLine("MetricName: " + Metric.CimInstanceProperties["MetricId"].Value);
            IEnumerable<CimInstance> Records = (IEnumerable<CimInstance>)Metric.CimInstanceProperties["Records"].Value;

            foreach (CimInstance Record in Records)
            {
                // Each Record has "TimeStamp" and "Value. For Illustration, just print the metric"
                Console.WriteLine(record.CimInstanceProperties["TimeStamp"] + ": " + record.CimInstanceProperties["Value"]);

            }

            // TODO: Whatever you want!
        }
    }
    public void OnError(Exception e)
    {
        // Handle Exceptions
    }
    public void OnCompleted()
    {
        // Reinvoke BeginStreamingMetrics(), defined in the next section
    }
}

Zahájení streamování

Pomocí definovaného pozorovatele můžete začít streamovat.

Zadejte cílovou hodnotu CimInstance , na kterou chcete nastavit rozsah metrik. Může to být cluster, libovolný uzel nebo jakýkoli svazek.

Parametr count je počet vzorků před ukončením streamování.

CimInstance Target = Cluster; // From among the objects discovered in DiscoverObjects()

public void BeginStreamingMetrics(CimSession Session, CimInstance HealthService, CimInstance Target)
{
    // Set Parameters
    CimMethodParametersCollection MetricsParams = new CimMethodParametersCollection();
    string[] metricNames = new string[] { "ClusterNode.Cpu.Usage,ClusterNode=RRN44-13-01", "ClusterNode.Cpu.Usage.Host,ClusterNode=RRN44-13-01" };
    MetricsParams.Add(CimMethodParameter.Create("MetricName", metricNames, CimType.StringArray, CimFlags.In));
    MetricsParams.Add(CimMethodParameter.Create("StreamName", "LastHour", CimType.String, CimFlags.In));

    // Enable WMI Streaming
    CimOperationOptions Options = new CimOperationOptions();
    Options.EnableMethodResultStreaming = true;
    // Invoke API
    CimAsyncMultipleResults<CimMethodResultBase> InvokeHandler;
    InvokeHandler = Session.InvokeMethodAsync(
        HealthService.CimSystemProperties.Namespace, HealthService, "GetMetric", MetricsParams, Options
        );
    // Subscribe the Observer
    MetricsObserver<CimMethodResultBase> Observer = new MetricsObserver<CimMethodResultBase>(this);
    IDisposable Disposeable = InvokeHandler.Subscribe(Observer);
}

Tyto metriky se dají vizualizovat, ukládat do databáze nebo používat jakýmkoli způsobem, jak vidíte.

Další odkazy