UNIX系のOSでは、ログをテキスト形式のファイルで記録することが多いが、Windowsサーバで同様の機能を提供するイベントログは独自のバイナリ形式になっている。そのため、ログの確認をテキストエディタで行うことはできず、[イベントビューア]管理ツールを使って表示する必要がある。
イベントビューアは、単独の管理ツールとして[スタート]-[管理ツール]以下の[イベントビューア]を選択して実行する。これ以外にも、[スタート]-[管理ツール]以下の[コンピュータの管理]を選択すると実行できる[コンピュータの管理]管理ツールで、左側のツリー画面にある [システム ツール]-[イベントビューア]以下のツリーを展開する方法でもイベントビューアを利用できる。どちらの方法でも、表示するログそのものは同じだ。
Windowsのイベントログには、Windows自身の動作について記録する「システムログ」、Windows上で動作するアプリケーションソフトに関する情報を記録する「アプリケーションログ」、そして監査ログなどのセキュリティ関連情報を記録する「セキュリティログ」の3種類がある。そして、これらのログのそれぞれについて、「情報」「警告」「エラー」の3種類に分けて情報を記録している。
前回の本連載で取り上げた監査機能のログはセキュリティログに記録しているため、イベントビューアの画面左側にあるツリー画面で[セキュリティ]を選択すると、記録したログの一覧を画面右側に表示する。その中から、詳しい内容を確認したいイベントをダブルクリックすると、別画面でログの内容を表示する仕組みだ。
また、この画面にある[↑][↓]を使うと前後のログに移動できるので、いちいち画面を閉じなくても、連続するログの内容を順番に見ていくことができる。
監査ログを確認する
前回の本連載で取り上げた監査ログの場合、イベントログを表示させたときの内容は以下のようになっている。
なお、イベントビューアの既定値ではすべてのイベントログを表示しているが、それでは数が多すぎて、目的のログを探し出すのが難しくなることがある。その場合には、フィルタ機能を活用したい。
これは、指定した条件に合致するイベントログだけを表示させる機能のことだ。左側のツリー画面で設定したいイベントの種類を選択してから、[操作]-[カスタムビューの作成]、あるいは右クリックして[カスタムビューの作成]を選択すると表示するダイアログで設定できる。
ここでは日付の範囲を[ログの日付]で選択できるほか、イベントログの種類(情報・警告・エラー)やイベントログのソースも条件に使用できる。たとえばオブジェクトアクセスの監査では、イベントID「560」のログだけを表示するようにフィルタを設定すると、目的のイベントログを見つけ出すのが容易になる。
イベントビューアのログをエクスポートする
Windowsサーバのイベントログに限ったことではないが、ログというのは記録しておくだけでは意味がなく、定期的なチェックや保存を行ってこそ意味がある。
ところが、Windowsサーバのイベントログにはサイズ上限があり、それを超えるログを記録すると古い方からログを消してしまうため、そのままではせっかく記録したログがなくなってしまう。
ハードディスクの容量に余裕があれば、サイズ上限を拡大することで問題を先送りできるが、いずれは限界がくるから同じことだ。逆に、上書きを禁止すると新しいログの追加記録を阻害する可能性がある。それに、サーバの故障などによってログを失う可能性もあるので、別の場所にログを書き出す必要がなくなるわけではない。
そこで、特に監査機能を利用している場合には、定期的にイベントログをエクスポートして保存しておくようにしたい。
監査ログは[セキュリティログ]に記録してあるので、イベントビューアで[セキュリティログ]を選択して、 [操作]-[イベントに名前を付けて保存]を選択するか、あるいは右クリックして[イベントに名前を付けて保存]を選択する。続いて表示するダイアログでファイル名と保存場所を指定すると、イベントログをエクスポートする。
Windows Server 2003の場合、拡張子「.evt」を持つ独自形式のファイルを出力する(Windows Server 2008では「.evtx」)。イベントビューアで[操作]-[ログファイルを開く]を選択すると表示する画面で、エクスポートしたファイル、それとログの種類を指定してから[開く]をクリックすると、エクスポートしたログファイルの内容を確認できる。
なお、エクスポート作業をいちいち手作業で行っていると、作業を忘れる可能性がある。そこで、以下のような内容のスクリプトを用意して、スケジュール機能を使って定期実行するとよい。
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate,(Backup)}!\" & _
strComputer & "\root\cimv2")
Set colLogFiles = objWMIService.ExecQuery _
("Select * from Win32_NTEventLogFile where LogFileName='System'")
Set colItems = objWMIService.ExecQuery("Select * from Win32_LocalTime")
strLogFile = "C:\LogFiles\"
For Each objItem in colItems
strLogFile = strLogFile & objItem.Year & "-"
strLogFile = strLogFile & objItem.Month & "-"
strLogFile = strLogFile & objItem.Day & ".evt"
WScript.Echo strLogFile
Next
For Each objLogfile in colLogFiles
errBackupLog = objLogFile.BackupEventLog(strLogFile)
If errBackupLog <> 0 Then
Wscript.Echo "The Application event log could not be backed up."
Else
objLogFile.ClearEventLog(strLogFile)
End If
Next
これは、イベントログのうちセキュリティログをエクスポートした上で、既存のログを消去するスクリプトだ。エクスポートを行った際に既存のログを消去するのは、エクスポート先でログが重複する事態を防ぎ、無駄なデータを溜め込まないようにするためだ。
また、このスクリプトでは(お世辞にもスマートとはいえないやり方だが)ファイル名にその日の日付を使用するようになっているので、1日に1回ずつ実行していれば、出力するファイルの名前は重複しない。出力先のフォルダは「C:\LogFiles\」としているが、これはスクリプトの当該箇所を書き換えれば変更可能だ。
本連載で使用している富士通のPCサーバ「PRIMERGY ECONEL 100 S2」「PRIMERGY TX120」の詳細は、同社のWebを参照してください。また、高鹿陽介氏によるレビュー記事も掲載中です。