Zum Inhalt springen

Storage Spaces Direct (S2D) Monitoring mit PowerShell

Hard-Disk

Storage Spaces Direct (S2D) Monitoring mit PowerShell: Regelmäßig (Windows Aufgabenplanung) verschiedene Health-Checks ausführen und bei erkannten Problemen eine E-Mail senden.

Das nachstehende Script überwacht meinen Windows Server 2019 S2D-Cluster. Da glücklicherweise nicht alle vom Script erkennbaren Probleme eingetreten sind, hat das Script allerdings nur Beta-Status! D.h. es kann sein, dass nicht alles richtig erkannt/ausgewertet und somit gesendet werden!

Das Script sollte regelmäßig (z.B. stündlich) über die Windows Aufgabenplanung ausgeführt werden. Die Einstellungen müssen natürlich entsprechend angepasst werden!

# Einstellungen
$clusterName = "CLUSTERNAME"
$mailTo = "empfaenger@domain.at"
$mailFrom = "absender@domain.at"
$mailSubject = "S2D-Status"
$mailSMTP = "smtp.domain.at"

# Mail-HTML-Header
$mailHtmlHeader = @"
<style>
body, td {font-size:14px;}
TABLE {border-width: 1px; border-style: solid; border-color: black; border-collapse: collapse;}
TD {border-width: 1px; padding: 3px; border-style: solid; border-color: black;}
H2 {font-size:18px;}
</style>
"@

# Cluster-Nodes ermitteln
$allClusterNodes = Get-ClusterNode -Cluster $clusterName

# Cluster-Nodes online/offline
$onlineClusterNodes = @()
$offlineClusterNodes = @()
foreach ($clusterNode in $clusterNodes){
    if(Test-Connection $clusterNode -Count 2 -Quiet){
        # Cluster-Node online
        $onlineClusterNodes += $clusterNode
    } else {
        # Cluster-Node offline
        $offlineClusterNodes += $clusterNode
    }
}

# StoragePool HealthStatus
$unHealthyStoragePool = Get-StoragePool -CimSession $clusterName -IsPrimordial $false | where HealthStatus -ne Healthy

# Degraded Storage
$degradedStorage = $onlineClusterNodes | Get-ClusterPerf -CimSession $clusterName -ClusterNodeSeriesName ClusterNode.Storage.Degraded | where value -ne 0

# Storage Jobs
$storageJobs = Get-StorageJob -CimSession $clusterName

# Physische Datenträger
$physicalDisks = Get-StoragePool -IsPrimordial $false | Get-PhysicalDisk | Select Model, Manufacturer, FirmwareVersion,HealthStatus | where HealthStatus -ne "Healthy" | sort model

# Ausgabe
$sendMail = $false
$mailbody = " "
$mailbody | ConvertTo-Html -Head $mailHtmlHeader
if(($offlineClusterNodes | Out-String) -ne ""){
    $mailbody += "<h2>Cluster-Nodes offline</h2>"
    $mailbody += $offlineClusterNodes | ConvertTo-Html -Property NodeName
    $sendMail = $true
}

if(($unHealthyStoragePool | Out-String) -ne ""){
    $mailbody += "<h2>StoragePool unhealthy</h2>"
    $mailbody += $unHealthyStoragePool | ConvertTo-Html -Property FriendlyName,OperationalStatus,HealthStatus
    $sendMail = $true
}

if(($degradedStorage | Out-String) -ne ""){
    $mailbody += "<h2>StoragePool degraded</h2>"
    $mailbody += $degradedStorage | ConvertTo-Html -Property Series,Time,Value,Unit
    $sendMail = $true
}

if(($storageJobs | Out-String) -ne ""){
    $mailbody += "<h2>Storage Jobs</h2>"
    $mailbody += $storageJobs | ConvertTo-Html -Property Name,ElapsedTime,JobState,PercentComplete,IsBackgroundTask
    $sendMail = $true
}

if(($physicalDisks | Out-String) -ne ""){
    $mailbody += "<h2>Physical Disks</h2>"
    $mailbody += $physicalDisks | ConvertTo-Html -Property Model,Manufacturer,FirmwareVersion,HealthStatus
    $sendMail = $true
}

# Bei Fehlern Mail senden
if($sendMail -eq $true){
    Send-MailMessage -To $mailTo -From $mailFrom -Subject $mailSubject -SmtpServer $mailSMTP -Body $mailBody -BodyAsHtml -encoding ([System.Text.Encoding]::UTF8)
}Code-Sprache: PHP (php)

Mehr Infos: Get-ClusterPerf, Get-PhysicalDisk, Get-StorageJob, Get-StoragePool, Send-MailMessage

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

13 − vier =