Integritätsdienst-BerichteHealth Service reports

Gilt für WindowsServer 2016Applies to Windows Server 2016

Was sind Berichte?What are reports

Der Integritätsdienst verringert den Arbeitsaufwand zum Abrufen von Leistungs- und Kapazitätsinformationen aus Ihrem "direkte Speicherplätze"-Cluster.The Health Service reduces the work required to get live performance and capacity information from your Storage Spaces Direct cluster. Ein neues Cmdlet bietet eine geordnete Liste wichtiger Metriken, die effizient gesammelt und knotenübergreifend dynamisch, mithilfe integrierter Logik zum Erkennen der Clustermitgliedschaft.One new cmdlet provides a curated list of essential metrics, which are collected efficiently and aggregated dynamically across nodes, with built-in logic to detect cluster membership. Alle Werte sind nur in Echtzeit und Point-in-Time.All values are real-time and point-in-time only.

Verwendung in PowerShellUsage in PowerShell

Verwenden Sie dieses Cmdlet zum Abrufen von Metriken für den gesamten "direkte Speicherplätze"-Cluster:Use this cmdlet to get metrics for the entire Storage Spaces Direct cluster:

Get-StorageSubSystem Cluster* | Get-StorageHealthReport

Das optionale Anzahl Parameter gibt an, wie viele Gruppen mit Werten in einer zweiten Intervallen zurückgegeben.The optional Count parameter indicates how many sets of values to return, at one second intervals.

Get-StorageSubSystem Cluster* | Get-StorageHealthReport -Count <Count>  

Sie können auch Metriken für ein bestimmtes Volume oder Server abrufen:You can also get metrics for one specific volume or server:

Get-Volume -FileSystemLabel <Label> | Get-StorageHealthReport -Count <Count>  

Get-StorageNode -Name <Name> | Get-StorageHealthReport -Count <Count>

Verwendung in .NET und C#Usage in .NET and C#

Eine Verbindung herstellenConnect

Zum Abfragen der Integritätsdienst, müssen Sie zum Herstellen einer CimSession mit dem Cluster.In order to query the Health Service, you will need to establish a CimSession with the cluster. Zu diesem Zweck Sie einige Dinge benötigt werden, die nur im vollständigen .NET verfügbar sind, d.h. Sie leicht dies direkt von einem Webserver oder mobile Anwendung nicht möglich.To do so, you will need some things that are only available in full .NET, meaning you cannot readily do this directly from a web or mobile app. Diese Codebeispiele werden C#-, die einfachste Wahl für diese Datenzugriffsschicht verwenden.These code samples will use C#, the most straightforward choice for this data access layer.

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

Der angegebene Benutzername sollte ein lokaler Administrator des Ziels Computer sein.The provided Username should be a local Administrator of the target Computer.

Es wird empfohlen, dass Sie das Kennwort erstellen, SecureString direkt von Benutzereingaben in Echtzeit, also ihr Kennwort wird niemals im Arbeitsspeicher gespeichert in Klartext.It is recommended that you construct the Password SecureString directly from user input in real-time, so their password is never stored in memory in cleartext. Dadurch wird eine Vielzahl von Sicherheitsbedenken verringern.This helps mitigate a variety of security concerns. Erstellen sie wie oben in der Praxis allgemeinen Zwecken Prototypen ist jedoch.But in practice, constructing it as above is common for prototyping purposes.

Ermitteln von ObjektenDiscover objects

Mit der CimSession eingerichtet wurde, können Sie Windows-Verwaltungsinstrumentation (Windows Management Instrumentation, WMI) auf dem Cluster Abfragen.With the CimSession established, you can query Windows Management Instrumentation (WMI) on the cluster.

Bevor Sie Fehler oder Metriken abrufen können, müssen Sie Instanzen von mehreren relevante Objekte abzurufen.Before you can get faults or metrics, you will need to get instances of several relevant objects. Zuerst wird die MSFT_StorageSubSystem des Clusters "direkte Speicherplätze" darstellt.First, the MSFT_StorageSubSystem which represents Storage Spaces Direct on the cluster. Verwenden, erhalten Sie alle MSFT_StorageNode im Cluster, und alle MSFT_Volume, die Datenvolumes.Using that, you can get every MSFT_StorageNode in the cluster, and every MSFT_Volume, the data volumes. Abschließend müssen Sie die MSFT_StorageHealth, die Integrität selbst zu bedienen.Finally, you will need the MSFT_StorageHealth, the Health Service itself, too.

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

Hierbei handelt es sich um die gleichen Objekte, die Sie erhalten in PowerShell mithilfe des Cmdlets wie Get-StorageSubSystem, Get-StorageNode, und Get-Volume.These are the same objects you get in PowerShell using cmdlets like Get-StorageSubSystem, Get-StorageNode, and Get-Volume.

Sie können Zugriff auf die gleichen Eigenschaften behandelt Storage Management API Classes.You can access all the same properties, documented at 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());
}

Rufen Sie GetReport um Beispiele für eine Experten verwaltet Liste wichtiger Metriken, die effizient gesammelt und knotenübergreifend dynamisch, mithilfe integrierter Logik zum Erkennen der Clustermitgliedschaft streamen zu beginnen.Invoke GetReport to begin streaming samples of an expert-curated list of essential metrics, which are collected efficiently and aggregated dynamically across nodes, with built-in logic to detect cluster membership. Beispiele werden jede Sekunde danach ankommen.Samples will arrive every second thereafter. Alle Werte sind nur in Echtzeit und Point-in-Time.All values are real-time and point-in-time only.

Metriken für drei Bereiche gestreamt werden können: das Cluster, einen beliebigen Knoten oder ein Volume.Metrics can be streamed for three scopes: the cluster, any node, or any volume.

Die vollständige Liste der verfügbaren Metriken auf jeder Ebene in Windows Server2016 dokumentiert ist.The complete list of metrics available at each scope in Windows Server 2016 is documented below.

IObserver.OnNext()IObserver.OnNext()

Dieser Beispielcode verwendet die Beobachterentwurfsmuster einen Beobachter implementieren, deren OnNext() Methode wird aufgerufen, wenn jedes neue Beispiel Metriken eingehen.This sample code uses the Observer Design Pattern to implement an Observer whose OnNext() method will be invoked when each new sample of metrics arrives. Die OnCompleted() -Methode wird aufgerufen, wenn beim Streamen von endet.Its OnCompleted() method will be called if/when streaming ends. Z.B. können Sie es verwenden, um dieses Streaming, damit es auf unbestimmte Zeit fortgesetzt wird.For example, you might use it to reinitiate streaming, so it continues indefinitely.

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

        if (StreamedResult != null)
        {
            // For illustration, you could store the metrics in this dictionary
            Dictionary<string, string> Metrics = new Dictionary<string, string>();

            // Unpack
            CimInstance Report = (CimInstance)StreamedResult.ItemValue;
            IEnumerable<CimInstance> Records = (IEnumerable<CimInstance>)Report.CimInstanceProperties["Records"].Value;
            foreach (CimInstance Record in Records)
            {
                /// Each Record has "Name", "Value", and "Units"
                Metrics.Add(
                    Record.CimInstanceProperties["Name"].Value.ToString(),
                    Record.CimInstanceProperties["Value"].Value.ToString()
                    );
            }

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

Streaming beginnenBegin streaming

Mit der Beobachter definiert können Sie das Streaming beginnen.With the Observer defined, you can begin streaming.

Geben Sie das Ziel CimInstance die Metriken beschränkt werden sollen.Specify the target CimInstance to which you want the metrics scoped. Der Cluster, einen beliebigen Knoten oder ein Volume möglich.It can be the cluster, any node, or any volume.

Count-Parameter ist die Anzahl der Proben Streaming endet.The count parameter is the number of samples before streaming ends.

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();
    MetricsParams.Add(CimMethodParameter.Create("TargetObject", Target, CimType.Instance, CimFlags.In));
    MetricsParams.Add(CimMethodParameter.Create("Count", 999, CimType.UInt32, CimFlags.In));
    // Enable WMI Streaming
    CimOperationOptions Options = new CimOperationOptions();
    Options.EnableMethodResultStreaming = true;
    // Invoke API
    CimAsyncMultipleResults<CimMethodResultBase> InvokeHandler;
    InvokeHandler = Session.InvokeMethodAsync(
        HealthService.CimSystemProperties.Namespace, HealthService, "GetReport", MetricsParams, Options
        );
    // Subscribe the Observer
    MetricsObserver<CimMethodResultBase> Observer = new MetricsObserver<CimMethodResultBase>(this);
    IDisposable Disposeable = InvokeHandler.Subscribe(Observer);
}

Diese Metriken können selbstverständlich in einer Datenbank gespeichert oder verwendet in der gewünschten Weise eigenem dargestellt werden.Needless to say, these metrics can be visualized, stored in a database, or used in whatever way you see fit.

Eigenschaften von BerichtenProperties of reports

Jedes Sample Metriken ist eine "Bericht" enthält viele "Datensätzen", die einzelnen Metriken entsprechen.Every sample of metrics is one "report" which contains many "records" corresponding to individual metrics.

Überprüfen Sie für das vollständige Schema, das MSFT_StorageHealthReport und MSFT_HealthRecord Klassen im storagewmi.mof.For the full schema, inspect the MSFT_StorageHealthReport and MSFT_HealthRecord classes in storagewmi.mof.

Jede Metrik hat nur drei Eigenschaften, gemäß der folgenden Tabelle.Each metric has just three properties, per this table.

EigenschaftProperty BeispielExample
NameName IOLatencyAverageIOLatencyAverage
WertValue 0.000210.00021
EinheitenUnits 33

Einheiten = {0, 1, 2, 3, 4}, wobei 0 = "Bytes", 1 = "BytesPerSecond", 2 = "CountPerSecond", 3 = "Seconds", oder 4 = "Prozentsatz".Units = { 0, 1, 2, 3, 4 }, where 0 = "Bytes", 1 = "BytesPerSecond", 2 = "CountPerSecond", 3 = "Seconds", or 4 = "Percentage".

AbdeckungCoverage

Im Folgenden sind die Metriken für die einzelnen Bereiche in Windows Server2016 verfügbar.Below are the metrics available for each scope in Windows Server 2016.

MSFT_StorageSubSystemMSFT_StorageSubSystem

NameName EinheitenUnits
CPUUsageCPUUsage 44
CapacityPhysicalPooledAvailableCapacityPhysicalPooledAvailable 00
CapacityPhysicalPooledTotalCapacityPhysicalPooledTotal 00
CapacityPhysicalTotalCapacityPhysicalTotal 00
CapacityPhysicalUnpooledCapacityPhysicalUnpooled 00
CapacityVolumesAvailableCapacityVolumesAvailable 00
CapacityVolumesTotalCapacityVolumesTotal 00
IOLatencyAverageIOLatencyAverage 33
IOLatencyReadIOLatencyRead 33
IOLatencyWriteIOLatencyWrite 33
IOPSReadIOPSRead 22
IOPSTotalIOPSTotal 22
IOPSWriteIOPSWrite 22
IOThroughputReadIOThroughputRead 11
IOThroughputTotalIOThroughputTotal 11
IOThroughputWriteIOThroughputWrite 11
MemoryAvailableMemoryAvailable 00
MemoryTotalMemoryTotal 00

MSFT_StorageNodeMSFT_StorageNode

NameName EinheitenUnits
CPUUsageCPUUsage 44
IOLatencyAverageIOLatencyAverage 33
IOLatencyReadIOLatencyRead 33
IOLatencyWriteIOLatencyWrite 33
IOPSReadIOPSRead 22
IOPSTotalIOPSTotal 22
IOPSWriteIOPSWrite 22
IOThroughputReadIOThroughputRead 11
IOThroughputTotalIOThroughputTotal 11
IOThroughputWriteIOThroughputWrite 11
MemoryAvailableMemoryAvailable 00
MemoryTotalMemoryTotal 00

MSFT_VolumeMSFT_Volume

NameName EinheitenUnits
CapacityAvailableCapacityAvailable 00
CapacityTotalCapacityTotal 00
IOLatencyAverageIOLatencyAverage 33
IOLatencyReadIOLatencyRead 33
IOLatencyWriteIOLatencyWrite 33
IOPSReadIOPSRead 22
IOPSTotalIOPSTotal 22
IOPSWriteIOPSWrite 22
IOThroughputReadIOThroughputRead 11
IOThroughputTotalIOThroughputTotal 11
IOThroughputWriteIOThroughputWrite 11

Siehe auchSee also