Überwachen von RAID-Arrays in Windows Core

Bild

Hallo allerseits!

In den letzten Jahren haben wir uns an alles gewöhnt, was überwacht werden kann und sollte, viele Tools, von einfachen Protokollen bis hin zu Zabbix, und alles, was verbunden werden kann. Microsoft hat uns wiederum ein hervorragendes WinRM-Tool zur Verfügung gestellt, mit dem wir den Status von Betriebssystemen und darüber hinaus überwachen können. Aber wie immer ist eine Fliege in der Salbe, in der Tat werden wir über den "Bypass" dieser Fliege in der Salbe sprechen.

Wie oben erwähnt, verfügen wir über alle erforderlichen Tools zur Überwachung der IT-Struktur. Es ist jedoch vorgekommen, dass wir kein „automatisiertes“ Tool zur Überwachung des Status von Intel RAID-Arrays in Windows Core haben. Ich mache Sie darauf aufmerksam, dass es sich um die übliche "gelbe Drüse" handelt.

Wir alle wissen, dass es Software von Intel, Rapid und Matrix Storage gibt, aber leider funktioniert es nicht auf Standard-Windows-Kern, es gibt auch ein Dienstprogramm raidcfg32, es funktioniert im Befehlszeilenmodus, kann im manuellen Modus warten und den Status anzeigen, auch im manuellen Modus . Ich denke, Amerika ist für niemanden entdeckt worden.

Es ist nicht die beste Wahl, den Raid-Status ständig oder manuell zu überprüfen oder darauf zu warten, dass der Virtualisierungsserver ausfällt.

Um den heimtückischen Plan für die Automatisierung von Intel Raid zu implementieren, verwenden wir die
wichtigsten Tools:

  • Powershell
  • Ereignisprotokoll
  • Raidcfg32.exe
  • Hilfs:
  • Winrm
  • Rsyslog
  • Loganalyzer

Der erste Schritt ist die Installation des Treibers für den RAID-Controller:
cmd.exe pnputil.exe -i -a[Pfad zu * .inf]

Kopieren raidcfg32.exenach c:\raidcfg32\

Überprüfen Sie, ob der Treiber korrekt installiert ist:
cmd.exe C:\raidcfg32\raidcfg32.exe /stv

Wenn wir den Status von RAID und Festplatten erhalten, ist alles in Ordnung.

Erstellen Sie eine Quelle im Anwendungsprotokoll:

* Dann erfolgt alles in Powershell

New-EventLog -Source "RAID" -LogName "Application"

Wir führen eine RAID-Statusanfrage durch, entfernen Anführungszeichen, um das Parsen zu vereinfachen, und hängen den Inhalt der Datei an.

c:\RAIDCFG32\RAIDCFG32.exe /stv > c:\RAIDCFG32\raidcfgStatus.txt
Get-Content "c:\RAIDCFG32\raidcfgStatus.txt" | ForEach-Object {$_ -replace ('"'),' '} > c:\RAIDCFG32\raidstatus.txt
$1 = Get-Content c:\RAIDCFG32\raidstatus.txt
$2 = "$1"

Wir suchen nach Schlüsselwörtern. Wenn eines der folgenden Wörter gefunden wird, erscheint trueRAID in der Datei errorRAID.txt. Dies weist auf einen Fehler hin. Wenn keine Übereinstimmungen gefunden werden, wird false aufgezeichnet.

$2 -match "failed" > c:\RAIDCFG32\errorRAID.txt
$2 -match "disabled" >> c:\RAIDCFG32\errorRAID.txt
$2 -match "degraded" >> c:\RAIDCFG32\errorRAID.txt
$2 -match "rebuild" >> c:\RAIDCFG32\errorRAID.txt
$2 -match "updating" >> c:\RAIDCFG32\errorRAID.txt
$2 -match "critical" >> c:\RAIDCFG32\errorRAID.txt

Wir verbinden die Datei mit dem aufgezeichneten true und false. Suchen Sie in der Datei nach true. Wenn true gefunden wird, ersetzen Sie es durch Error. Ersetzen Sie false durch Information.

Notieren Sie das Ergebnis in EntryType.txt

$3 = Get-Content c:\RAIDCFG32\errorRAID.txt
$4 = "$3"
$5 = $4 -match "true"
$6 = "$5"
$7 = $6 -replace "true", "Error" > c:\RAIDCFG32\EntryType.txt
$8 = $6 -replace "false", "Information" >> c:\RAIDCFG32\EntryType.txt

Wir fügen den Inhalt der EntryType.txt-Datei ein und löschen False darin, wodurch der richtige -EntryType angezeigt wird, der wiederum die „Ebene“ der Nachricht darstellt.

Wir schreiben eine Nachricht in EventLog. Wenn Schlüsselwörter gefunden werden, lautet die Nachrichtenebene Fehler, wenn sie nicht gefunden werden, dann Information.

$9 = Get-Content c:\RAIDCFG32\EntryType.txt
$10 = "$9"
$11 = $10 -replace "False"
Write-EventLog -LogName Application -Source "RAID" -EventID 9999 -EntryType "$11" -Message "$1"
exit

Wir speichern den Code in * .ps1.

Wir erstellen eine Aufgabe im Scheduler, um das Skript auszuführen. Ich führe die Aufgabe 1 Mal pro Tag und bei jedem Download aus.

Wenn die Protokolle eines anderen Windows-Betriebssystems im Ereignisprotokoll erfasst werden, müssen Sie auf dem Protokollkollektor eine RAID-Quelle erstellen. Ein Beispiel finden Sie oben.

Wir transportieren Protokolle über Adison rsyslog für Windows zu rsyslog.

Die Ausgabe ist dieses Bild:

Bild

UPD.
In Bezug auf die Nutzung von Speicherplatz werden alle Server mit integriertem Windows-Core in Zweigstellen verwendet, nur ein Server wird in einer Zweigstelle installiert, und der Core wird verwendet, um einen „kostenlosen“ Hypervisor zu erhalten und die Lizenzkosten zu senken.

für Windows-Protokolle
c:\RAIDCFG32\RAIDCFG32.exe /stv > c:\RAIDCFG32\raidcfgStatus.txt
Get-Content "c:\RAIDCFG32\raidcfgStatus.txt" | ForEach-Object {$_ -replace ('"'),' '} > c:\RAIDCFG32\raidstatus.txt
$1 = Get-Content c:\RAIDCFG32\raidstatus.txt
$2 = "$1"
$2 -match "failed" > c:\RAIDCFG32\errorRAID.txt
$2 -match "disabled" >> c:\RAIDCFG32\errorRAID.txt
$2 -match "degraded" >> c:\RAIDCFG32\errorRAID.txt
$2 -match "rebuild" >> c:\RAIDCFG32\errorRAID.txt
$2 -match "updating" >> c:\RAIDCFG32\errorRAID.txt
$2 -match "critical" >> c:\RAIDCFG32\errorRAID.txt
$3 = Get-Content c:\RAIDCFG32\errorRAID.txt
$4 = "$3"
$5 = $4 -match "true"
$6 = "$5"
$7 = $6 -replace "true", "Error" > c:\RAIDCFG32\EntryType.txt
$8 = $6 -replace "false", "Information" >> c:\RAIDCFG32\EntryType.txt
$9 = Get-Content c:\RAIDCFG32\EntryType.txt
$10 = "$9"
$11 = $10 -replace "False"
Write-EventLog -LogName Application -Source "RAID" -EventID 9999 -EntryType "$11" -Message "$1"



UPD2.
In der zabbix-Konfiguration auf dem Client
fügen wir Folgendes hinzu : UserParameter = raid.status, Powershell c: \ raidcfg32 \ raidstatusZabbix.ps1
In zabbix fügen wir ein neues Datenelement hinzu, raid.status, numerisch. Wir erstellen einen Trigger - wenn 0, dann ist alles in Ordnung, wenn 1 dann Ärger.
Das ps2-Skript ändert sich ein wenig:
für zabbix
c:\RAIDCFG32\RAIDCFG32.exe /stv > c:\RAIDCFG32\raidcfgStatus.txt
Get-Content "c:\RAIDCFG32\raidcfgStatus.txt" | ForEach-Object {$_ -replace ('"'),' '} > c:\RAIDCFG32\raidstatus.txt
$1 = Get-Content c:\RAIDCFG32\raidstatus.txt
$2 = "$1"
$2 -match "failed" > c:\RAIDCFG32\errorRAID.txt
$2 -match "disabled" >> c:\RAIDCFG32\errorRAID.txt
$2 -match "degraded" >> c:\RAIDCFG32\errorRAID.txt
$2 -match "rebuild" >> c:\RAIDCFG32\errorRAID.txt
$2 -match "updating" >> c:\RAIDCFG32\errorRAID.txt
$2 -match "critical" >> c:\RAIDCFG32\errorRAID.txt
$3 = Get-Content c:\RAIDCFG32\errorRAID.txt
$4 = "$3"
$5 = $4 -match "true"
$6 = "$5"
$7 = $6 -replace "true", "1" > c:\RAIDCFG32\EntryType.txt
$8 = $6 -replace "false", "0" >> c:\RAIDCFG32\EntryType.txt
$9 = Get-Content c:\RAIDCFG32\EntryType.txt
$10 = "$9"
$11 = $10 -replace "False"
$11


Jetzt auch beliebt: