2010年06月08日 (火) 14:22 | 編集
以前の記事でPowerShellでサーバ監視の簡単なスクリプトを
作るといっていたものができたので、貼り付け
追加でsmtpサービスを入れたり、basp21を入れたりせずにメール送信できるところが
ちょっと気に入っています。(PowerShell環境をインストールする方が面倒くさかったりしますが
)
いろいろなサイトを参考に、客先に出すものでもなかったので、
動けばいいというレベルです。。
概要は以下のようなものです。
・24H前までに発生したイベントログ(システム・アプリケーション)を
Dドライブのレポート用ファイルに記載
・あるファイルに記載している監視したいサービスの一覧ファイルを
読み込んで、そのサービスが正常に起動しているか確認
・ディスク容量確認
・デイリーのバックアップファイルのサイズ確認
・robocopyのログファイルから、EXTRA行を除いた行をレポートファイルに記載
・上記情報を記載したファイル内容を読み込み、smtpのbodyに貼り付けて
メール送信
上記をWindows Server 2003のタスクにスケジュールし、実施しています。
> powerShell D:\Reports\report.ps1
という内容のbatファイルを作成して実施
内容を適宜変えていただき、ファイルのパスなども変更いただければ
用途があえばお役に立てるかもしれません
###-----report.ps1-----###
$yyyymmdd = (Get-Date).ToString("yyyyMMdd")
$yyyymmdd1 = (get-date).AddDays(-1).ToString("yyyyMMdd")
$fileName = $yyyymmdd + "_report.txt"
$fileNamePath = "D:\Reports\"+$fileName
$robocopyFile = $yyyymmdd1 + "_robocopy_err_log.txt"
$robocopyFilePath = "D:\robocopy\"+$robocopyFile
New-Item $fileNamePath -Type File
#ファイル書込み
Add-Content -encoding unicode $fileNamePath -Value $yyyymmdd" ---- サーバ名 Daily Report ----"
#改行書込み
Add-Content -encoding unicode $fileNamePath `r
Add-Content -encoding unicode $fileNamePath -Value "■24H前までに発生したイベントログ(システム)"
#イベントログ(system)内容取得
get-eventlog -Logname system | Where {$_.timegenerated -gt (get-date).AddDays(-1)} | Format-List * >> $fileNamePath
Add-Content -encoding unicode $fileNamePath -Value "■24H前までに発生したイベントログ(アプリケーション)"
#イベントログ(Application)内容取得
get-eventlog -Logname application | Where {$_.timegenerated -gt (get-date).AddDays(-1)} | Format-List * >> $fileNamePath
Add-Content -encoding unicode $fileNamePath -Value "■サービス稼動チェック"
$t= get-content D:\Reports\Monitoring_Services.txt
$s = $t | foreach-object{get-service $_}
$hush = @{}
$s | foreach-object{$hush[$_.DisplayName]=$_.status}
$hush >> $fileNamePath
#改行書込み
Add-Content -encoding unicode $fileNamePath `r
Add-Content -encoding unicode $fileNamePath `r
Add-Content -encoding unicode $fileNamePath -Value "■ディスク容量チェック"
$disks = get-wmiobject Win32_LogicalDisk | ?{$_.DriveType -eq 3}
foreach ($disk in $disks)
{
$a = $a + "ドライブレター: " + $disk.DeviceID + "`r"
$a = $a + "容量: " + ("{0,6:0.00}" -F ($disk.Size / 1GB)) + " GB" + "`r"
$a = $a + "空き容量: " + ("{0,6:0.00}" -F ($disk.FreeSpace / 1GB)) + " GB" + "`r"
$used = [Long]$disk.Size - [Long]$disk.FreeSpace
$a = $a + "使用量: " + ("{0,6:0.00}" -F ($used / 1GB)) + " GB" + "`r" + "`r"
}
$a >> $fileNamePath
#改行書込み
Add-Content -encoding unicode $fileNamePath `r
Add-Content -encoding unicode $fileNamePath `r
#バックアップファイルサイズ調査
Add-Content -encoding unicode $fileNamePath -Value "■D:\サーバ名_backup\サーバ名_FullBackup.bkf ファイルサイズ(GB)"
$diskSize = (Get-ChildItem "D:\サーバ名_backup\サーバ名_FullBackup.bkf").Length /1GB
$diskSize = [math]::round($diskSize,2)
$diskSize >> $fileNamePath
#■正規表現によるファイルから特定の行を取得
Add-Content -encoding unicode $fileNamePath "■前日分のRobocopy ミラーリングログ"
cat $robocopyFilePath |? {!($_ -match "\*EXTRA")} >> $fileNamePath
$sr = New-Object System.IO.StreamReader($fileNamePath)
#$sr.CurrentEncoding
$mBody = $sr.ReadToEnd()
$mail = New-Object System.Net.Mail.MailMessage
$mail.to.Add("メールアドレス1")
$mail.to.Add("メールアドレス2")
$mail.to.Add("メールアドレス3")
$mail.Subject = "----サーバ名 Daily Report----"
$mail.Body = $mBody
$mail.BodyEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
$smtp = New-Object System.Net.Mail.SmtpClient("メールサーバ名 or IPアドレス")
$smtp.Send($mail)
-----以下、実行結果の内容例-----
20100608 ---- サーバ名 Daily Report ----
■24H前までに発生したイベントログ(システム)
EventID : 7036
MachineName : サーバ名
Data : {}
Index : 3819
Category : (0)
CategoryNumber : 0
EntryType : Information
Message : Microsoft Software Shadow Copy Provider サービスは、stopped 状態に入
りました。
Source : Service Control Manager
ReplacementStrings : {Microsoft Software Shadow Copy Provider, stopped}
InstanceId : 1073748860
TimeGenerated : 2010/06/08 7:12:38
TimeWritten : 2010/06/08 7:12:38
UserName :
Site :
Container :
■24H前までに発生したイベントログ(アプリケーション)
EventID : 8019
MachineName : サーバ名
Data : {}
Index : 1988
Category : (0)
CategoryNumber : 0
EntryType : Information
Message : 操作の終了:
操作は正常終了しました。
詳細は、バックアップ レポートを参照してください。
Source : NTBackup
ReplacementStrings : {
操作は正常終了しました。}
InstanceId : 8019
TimeGenerated : 2010/06/08 7:06:41
TimeWritten : 2010/06/08 7:06:41
UserName :
Site :
Container :
■サービス稼動チェック
Name Value
---- -----
HP Insight Storage Agents Running
APC PBE Server Running
Terminal Services Running
Windows Management Instrume... Running
Event Log Running
HP Smart Array SAS/SATA Eve... Running
HP ProLiant System Shutdown... Running
Server Running
Logical Disk Manager Running
HP Insight Server Agents Running
Distributed File System Running
APC PBE Agent Running
HP Insight Foundation Agents Running
HP ProLiant Remote Monitor ... Running
HP Storage Server Managemen... Running
HP Insight NIC Agent Running
DNS Client Running
Remote Procedure Call (RPC) Running
Net Logon Running
■ディスク容量チェック
ドライブレター: C:
容量: 15.00 GB
空き容量: 6.35 GB
使用量: 8.64 GB
ドライブレター: D:
容量: 936.90 GB
空き容量: 484.88 GB
使用量: 452.02 GB
■D:\サーバ名_backup\サーバ名_FullBackup.bkf ファイルサイズ(GB)
250.2
■前日分のRobocopy ミラーリングログ
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows :: Version XP010
-------------------------------------------------------------------------------
Started : Mon Jun 07 13:30:00 2010
Source : D:\data\
Dest : \\サーバ名\D$\data\
Files : *.*
Options : *.* /NDL /NFL /TEE /S /E /COPY:DAT /PURGE /MIR /NP /R:1000000 /W:30
------------------------------------------------------------------------------
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 93516 27 93489 0 0 10
Files : 765181 649 764532 0 0 72
Bytes : 172.842 g 717.29 m 172.141 g 0 0 7.61 m
Times : 0:27:05 0:00:48 0:00:00 0:26:16
Speed : 15429737 Bytes/sec.
Speed : 882.896 MegaBytes/min.
Ended : Mon Jun 07 14:27:05 2010
作るといっていたものができたので、貼り付け
追加でsmtpサービスを入れたり、basp21を入れたりせずにメール送信できるところが
ちょっと気に入っています。(PowerShell環境をインストールする方が面倒くさかったりしますが
いろいろなサイトを参考に、客先に出すものでもなかったので、
動けばいいというレベルです。。
概要は以下のようなものです。
・24H前までに発生したイベントログ(システム・アプリケーション)を
Dドライブのレポート用ファイルに記載
・あるファイルに記載している監視したいサービスの一覧ファイルを
読み込んで、そのサービスが正常に起動しているか確認
・ディスク容量確認
・デイリーのバックアップファイルのサイズ確認
・robocopyのログファイルから、EXTRA行を除いた行をレポートファイルに記載
・上記情報を記載したファイル内容を読み込み、smtpのbodyに貼り付けて
メール送信
上記をWindows Server 2003のタスクにスケジュールし、実施しています。
> powerShell D:\Reports\report.ps1
という内容のbatファイルを作成して実施
内容を適宜変えていただき、ファイルのパスなども変更いただければ
用途があえばお役に立てるかもしれません
###-----report.ps1-----###
$yyyymmdd = (Get-Date).ToString("yyyyMMdd")
$yyyymmdd1 = (get-date).AddDays(-1).ToString("yyyyMMdd")
$fileName = $yyyymmdd + "_report.txt"
$fileNamePath = "D:\Reports\"+$fileName
$robocopyFile = $yyyymmdd1 + "_robocopy_err_log.txt"
$robocopyFilePath = "D:\robocopy\"+$robocopyFile
New-Item $fileNamePath -Type File
#ファイル書込み
Add-Content -encoding unicode $fileNamePath -Value $yyyymmdd" ---- サーバ名 Daily Report ----"
#改行書込み
Add-Content -encoding unicode $fileNamePath `r
Add-Content -encoding unicode $fileNamePath -Value "■24H前までに発生したイベントログ(システム)"
#イベントログ(system)内容取得
get-eventlog -Logname system | Where {$_.timegenerated -gt (get-date).AddDays(-1)} | Format-List * >> $fileNamePath
Add-Content -encoding unicode $fileNamePath -Value "■24H前までに発生したイベントログ(アプリケーション)"
#イベントログ(Application)内容取得
get-eventlog -Logname application | Where {$_.timegenerated -gt (get-date).AddDays(-1)} | Format-List * >> $fileNamePath
Add-Content -encoding unicode $fileNamePath -Value "■サービス稼動チェック"
$t= get-content D:\Reports\Monitoring_Services.txt
$s = $t | foreach-object{get-service $_}
$hush = @{}
$s | foreach-object{$hush[$_.DisplayName]=$_.status}
$hush >> $fileNamePath
#改行書込み
Add-Content -encoding unicode $fileNamePath `r
Add-Content -encoding unicode $fileNamePath `r
Add-Content -encoding unicode $fileNamePath -Value "■ディスク容量チェック"
$disks = get-wmiobject Win32_LogicalDisk | ?{$_.DriveType -eq 3}
foreach ($disk in $disks)
{
$a = $a + "ドライブレター: " + $disk.DeviceID + "`r"
$a = $a + "容量: " + ("{0,6:0.00}" -F ($disk.Size / 1GB)) + " GB" + "`r"
$a = $a + "空き容量: " + ("{0,6:0.00}" -F ($disk.FreeSpace / 1GB)) + " GB" + "`r"
$used = [Long]$disk.Size - [Long]$disk.FreeSpace
$a = $a + "使用量: " + ("{0,6:0.00}" -F ($used / 1GB)) + " GB" + "`r" + "`r"
}
$a >> $fileNamePath
#改行書込み
Add-Content -encoding unicode $fileNamePath `r
Add-Content -encoding unicode $fileNamePath `r
#バックアップファイルサイズ調査
Add-Content -encoding unicode $fileNamePath -Value "■D:\サーバ名_backup\サーバ名_FullBackup.bkf ファイルサイズ(GB)"
$diskSize = (Get-ChildItem "D:\サーバ名_backup\サーバ名_FullBackup.bkf").Length /1GB
$diskSize = [math]::round($diskSize,2)
$diskSize >> $fileNamePath
#■正規表現によるファイルから特定の行を取得
Add-Content -encoding unicode $fileNamePath "■前日分のRobocopy ミラーリングログ"
cat $robocopyFilePath |? {!($_ -match "\*EXTRA")} >> $fileNamePath
$sr = New-Object System.IO.StreamReader($fileNamePath)
#$sr.CurrentEncoding
$mBody = $sr.ReadToEnd()
$mail = New-Object System.Net.Mail.MailMessage
$mail.to.Add("メールアドレス1")
$mail.to.Add("メールアドレス2")
$mail.to.Add("メールアドレス3")
$mail.Subject = "----サーバ名 Daily Report----"
$mail.Body = $mBody
$mail.BodyEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
$smtp = New-Object System.Net.Mail.SmtpClient("メールサーバ名 or IPアドレス")
$smtp.Send($mail)
-----以下、実行結果の内容例-----
20100608 ---- サーバ名 Daily Report ----
■24H前までに発生したイベントログ(システム)
EventID : 7036
MachineName : サーバ名
Data : {}
Index : 3819
Category : (0)
CategoryNumber : 0
EntryType : Information
Message : Microsoft Software Shadow Copy Provider サービスは、stopped 状態に入
りました。
Source : Service Control Manager
ReplacementStrings : {Microsoft Software Shadow Copy Provider, stopped}
InstanceId : 1073748860
TimeGenerated : 2010/06/08 7:12:38
TimeWritten : 2010/06/08 7:12:38
UserName :
Site :
Container :
■24H前までに発生したイベントログ(アプリケーション)
EventID : 8019
MachineName : サーバ名
Data : {}
Index : 1988
Category : (0)
CategoryNumber : 0
EntryType : Information
Message : 操作の終了:
操作は正常終了しました。
詳細は、バックアップ レポートを参照してください。
Source : NTBackup
ReplacementStrings : {
操作は正常終了しました。}
InstanceId : 8019
TimeGenerated : 2010/06/08 7:06:41
TimeWritten : 2010/06/08 7:06:41
UserName :
Site :
Container :
■サービス稼動チェック
Name Value
---- -----
HP Insight Storage Agents Running
APC PBE Server Running
Terminal Services Running
Windows Management Instrume... Running
Event Log Running
HP Smart Array SAS/SATA Eve... Running
HP ProLiant System Shutdown... Running
Server Running
Logical Disk Manager Running
HP Insight Server Agents Running
Distributed File System Running
APC PBE Agent Running
HP Insight Foundation Agents Running
HP ProLiant Remote Monitor ... Running
HP Storage Server Managemen... Running
HP Insight NIC Agent Running
DNS Client Running
Remote Procedure Call (RPC) Running
Net Logon Running
■ディスク容量チェック
ドライブレター: C:
容量: 15.00 GB
空き容量: 6.35 GB
使用量: 8.64 GB
ドライブレター: D:
容量: 936.90 GB
空き容量: 484.88 GB
使用量: 452.02 GB
■D:\サーバ名_backup\サーバ名_FullBackup.bkf ファイルサイズ(GB)
250.2
■前日分のRobocopy ミラーリングログ
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows :: Version XP010
-------------------------------------------------------------------------------
Started : Mon Jun 07 13:30:00 2010
Source : D:\data\
Dest : \\サーバ名\D$\data\
Files : *.*
Options : *.* /NDL /NFL /TEE /S /E /COPY:DAT /PURGE /MIR /NP /R:1000000 /W:30
------------------------------------------------------------------------------
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 93516 27 93489 0 0 10
Files : 765181 649 764532 0 0 72
Bytes : 172.842 g 717.29 m 172.141 g 0 0 7.61 m
Times : 0:27:05 0:00:48 0:00:00 0:26:16
Speed : 15429737 Bytes/sec.
Speed : 882.896 MegaBytes/min.
Ended : Mon Jun 07 14:27:05 2010