Windows CoreでRAIDアレイを監視する

画像



みなさんこんにちは!



過去数年間、私たちは監視できるものと監視すべきものすべて、単純なログからZabbixに至るまで多くのツールに慣れており、すべてを接続することができました。 また、Microsoftは優れたWinRMツールを提供してくれました。これを使用して、オペレーティングシステム以降のステータスを監視できます。 しかし、軟膏にはいつもハエがありますが、実際には、このハエの軟膏での「バイパス」についてお話します。



前述のように、IT構造を監視するために必要なすべてのツールがありますが、WindowsコアのIntel RAIDアレイのステータスを監視するための「自動化された」ツールがないことがありました。 私たちが通常の「黄色の腺」について話しているという事実にあなたの注意を引きます。



Intelのソフトウェア、高速ストレージおよびマトリックスストレージが存在することは誰もが知っていますが、残念ながら標準のWindowsコアでは動作せず、raidcfg32ユーティリティもあります。コマンドラインモードで動作し、手動モードでサービスを提供し、手動モードでもステータスを表示できます。 アメリカは誰にとっても発見されていないと思います。



RAIDのステータスを絶えずまたは手動で確認するか、仮想化サーバーの障害を待つのは最良の選択ではありません。



オートメーション自動化Intel raidの陰湿な計画を実装するために、

主なツール:





まず、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
      
      








All Articles