
みなさんこんにちは!
過去数年間、私たちは監視できるものと監視すべきものすべて、単純なログからZabbixに至るまで多くのツールに慣れており、すべてを接続することができました。 また、Microsoftは優れたWinRMツールを提供してくれました。これを使用して、オペレーティングシステム以降のステータスを監視できます。 しかし、軟膏にはいつもハエがありますが、実際には、このハエの軟膏での「バイパス」についてお話します。
前述のように、IT構造を監視するために必要なすべてのツールがありますが、WindowsコアのIntel RAIDアレイのステータスを監視するための「自動化された」ツールがないことがありました。 私たちが通常の「黄色の腺」について話しているという事実にあなたの注意を引きます。
Intelのソフトウェア、高速ストレージおよびマトリックスストレージが存在することは誰もが知っていますが、残念ながら標準のWindowsコアでは動作せず、raidcfg32ユーティリティもあります。コマンドラインモードで動作し、手動モードでサービスを提供し、手動モードでもステータスを表示できます。 アメリカは誰にとっても発見されていないと思います。
RAIDのステータスを絶えずまたは手動で確認するか、仮想化サーバーの障害を待つのは最良の選択ではありません。
オートメーション自動化Intel raidの陰湿な計画を実装するために、
主なツール:
- Powershell
- イベントログ
- Raidcfg32.exe
- 補助:
- Winrm
- Rsyslog
- ログアナライザー
まず、RAIDコントローラーのドライバーをインストールする必要があります。
cmd.exe pnputil.exe -i -a
[* .infへのパス]
raidcfg32.exe
を
c:\raidcfg32\
コピーし
c:\raidcfg32\
ドライバーが正しくインストールされているか確認してください:
cmd.exe C:\raidcfg32\raidcfg32.exe /stv
RAIDとディスクのステータスを取得できれば、すべて問題ありません。
アプリケーションログにソースを作成します。
*その後、すべてがPowerShellで行われます New-EventLog -Source "RAID" -LogName "Application"
raid statusリクエストを実行し、解析を簡素化するために引用符を削除し、ファイルのコンテンツを添付します。
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"
キーワードを探しています。以下の単語のいずれかが見つかった場合、trueRAIDがファイルerrorRAID.txtに表示されます。これはエラーを示し、一致が見つからない場合はfalseが記録されます。
$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
記録されたtrueとfalseでファイルを接続し、ファイルでtrueを探し、trueが見つかった場合、それをエラーに置き換え、falseを情報に置き換えます。
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
EntryType.txtファイルの内容を含め、Falseを削除して、正しい-EntryTypeを表示します。これがメッセージの「レベル」になります。
EventLogにメッセージを書き込みます。キーワードが見つかった場合、メッセージレベルは「エラー」、見つからない場合は「情報」になります。
$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
コードを* .ps1に保存します
スケジューラでスクリプトを実行するタスクを作成します。タスクを1日1回、ダウンロードするたびに実行します。
別のWindows OSのログがイベントログに収集される場合、ログコレクターで「RAID」ソースを作成する必要があります。その例を次に示します。
Adison rsyslog for Windowsを介してログをrsyslogに転送します。
出力はこの写真です:

UPD。
店舗スペースの使用に関しては、オンボードのWindowsコアを備えたすべてのサーバーがブランチで使用され、1つのサーバーのみがブランチにインストールされます。
Windowsログ用 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。
クライアントのzabbix configで次を作成します。
UserParameter = raid.status、powershell c:\ raidcfg32 \ raidstatusZabbix.ps1
zabbixで、新しいraid.status数値データ項目を追加します。 トリガーを作成します-0の場合はすべて問題なく、1の場合は問題ありません。
ps2スクリプトは少し変更されます。
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