WSH(Windows Script Host)から実行
それでは、WSH(Windows Script Host)と呼ばれるスクリプト環境でクエリを実行してみましょう。WSHでは、JScpirt(*.js)、VBScript(*.vbs)、XML(*.wfs)などの形式でスクリプトを記述できます。ここでは、「CheckLogToMail.vbs」という名前のテキストファイルを作成しVBScriptでプログラミングします。
'Log Parserのメインオブジェクトの生成 Set oLogQuery = CreateObject("MSUtil.LogQuery") '入力形式オブジェクト(-i:TEXTLINE)の生成 Set oEVTInputFormat = CreateObject("MSUtil.LogQuery.TextLineInputFormat") '出力形式(-o:CSV)オブジェクトの生成 Set oCSVOutputFormat = CreateObject("MSUtil.LogQuery.CSVOutputFormat") 'クエリを生成 strQuery = "SELECT Text INTO CheckLogToMail.csv FROM sample.log" strQuery = strQuery & " WHERE Text Like '%FATAL%' AND" strQuery = strQuery & " TO_TIMESTAMP(SUBSTR(Text,0,19),'yyyy-MM-dd hh:mm:ss')" strQuery = strQuery & " >= TO_LOCALTIME( SUB( SYSTEM_TIMESTAMP()," strQuery = strQuery & " TIMESTAMP( '10', 'mm' ) ) )" 'クエリを実行し、CSVファイルを出力 oLogQuery.ExecuteBatch strQuery, oEVTInputFormat, oCSVOutputFormat
VBScriptのスクリプトはダブルクリックでも実行できますが、メッセージをコマンドプロンプトに出力させたいため、コマンドプロンプトから次のように入力します。
CScript CheckLogToMail.vbs
コマンドプロンプト上にエラーが表示されていなければ、正しくCSVファイルが出力されているはずです。
Log Parserのコンポーネントモデル
Log Parserはスクリプトから使えるCOMコンポーネント(LogParser.dll)という形で公開され、インストール時にシステムに登録されます(そのため「C:\Program Files\Log Parser 2.2」以外のフォルダからでもスクリプトを実行できます)。Log Parserが公開しているオブジェクトは次のとおりです。
オブジェクト名 | 説明 |
LogQuery | LogParserのメインオブジェクト。クエリの実行を制御。 |
入力形式オブジェクト | サポートされている入力形式(イベントログの場合:MSUtil.LogQuery.EventLogInputFormat) |
出力形式オブジェクト | サポートされている出力形式(チャートの場合:MSUtil.LogQuery.ChartOutputFormat) |
LogRecord | クエリ実行結果の1行 |
LogRecordSet | クエリ実行結果のログ全体 |
このVBScriptでは、次の流れでプログラミングを行いました。
CreateObject("MSUtil.LogQuery")
……Log Parserのメインオブジェクトの生成CreateObject("MSUtil.LogQuery.TextLineInputFormat")
……入力形式(テキスト)オブジェクトの生成CreateObject("MSUtil.LogQuery.CSVOutputFormat")
……出力形式(CSV)オブジェクトの生成strQuery
……クエリの設定LogQuery.ExecuteBatch
……クエリの実行
なお、LogQuery
オブジェクトからクエリを実行するメソッドは、ExecuteBatch
メソッドとExecute
メソッドの2つがあります。両メソッドとも引数に「クエリ/入力形式/出力形式」を設定できるところは同じです。ただし戻り値が、ExecuteBatch
メソッドの場合は成否のブール値ですが、Execute
メソッドの場合は結果セットのLogRecordSet
オブジェクトになります。そのため、ファイルなどへのアウトプットの場合はExecuteBatch
メソッドを、データを読み込んで細かい制御を行いたいときはExcecute
メソッドを使うと良いでしょう。
Log Parserのスクリプトでの利用についての詳細は、ヘルプの[リファレンス]-[COM API]を参照してください。
メールを送信するVBScript
それでは出力したCSVファイルを読み込み、メールを送信してみましょう。以下のコードを「CheckLogToMail.vbs」に追記します。
'ファイルを操作するオブジェクトの生成 Set oFSO = WScript.CreateObject("Scripting.FileSystemObject") 'CSVファイルの有無をチェック If oFSO.FileExists("CheckLogToMail.csv") = True Then 'メール送信用のオブジェクトの生成 Set oMsg = CreateObject("CDO.Message") '送信元、送信先、タイトルの設定 oMsg.From = "LogParserFrom@gmail.com" oMsg.To = "LogParserTo@gmail.com" oMsg.Subject = "[自動送信]XXシステムのエラー通知(" & Now & ")" 'CSVファイルをオープン Set oOutput = oFSO.OpenTextFile("CheckLogToMail.csv") '本文の設定 oMsg.TextBody = "下記のエラーが発生しました。" & vbCrlf & vbCrlf oMsg.TextBody = oMsg.TextBody + oOutput.ReadAll 'CSVファイルをクローズ oOutput.Close 'メール送信 oMsg.Send End If
このコードを含めてスクリプトを実行すると、エラーがあった場合には以下のメールが送信されます。
VBScriptからメールを送信する方法については、『Windows標準機能とWSHを使ってメールを送信する』が参考になります。
「イベントログ」のイベントをトリガーにする場合は、eventtriggersというツールの利用も検討してみてください。
「パフォーマンスログと警告」のデータを参照している場合は、[警告]-[トリガされたときの操作]-[次のプログラムを実行する]の利用も検討してみてください。
監視の自動化
さらに監視を楽にするために、手動によるチェックではなく、タスクによる自動チェックにします。ここでは、Windowsタスクを利用して24時間365日、自動チェックする設定を行います。
次の手順で設定を行っています。
設定方法
(1)タスクを開く
[コントロールパネル]の中の[タスク]を開きます。
(2)新しいタスクの作成
右クリックメニューから[新規]-[タスク]を選択します。タスクの名前を「エラー監視」とします。
(3)タスクの設定
「エラー監視」タスクを右クリックし、[プロパティ]をクリックします。
[タスク]タブで、[実行するファイル名]に「cscript "C:\Program Files\Log Parser 2.2\CheckLogToMail.vbs"」、[開始]に「"C:\Program Files\Log Parser 2.2\"」、と設定します。アカウントのパスワードを求められたら実行権限のあるユーザーとパスワードを設定してください。
[スケジュール]タブで、[開始時刻]を「0:00」に設定します。
[スケジュール]タブの[詳細設定]ボタンをクリックします。詳細設定ウィンドウで、[タスクを繰り返し実行]にチェックを入れ、[間隔]を「10分」に、[継続時間]を「24時間」に設定します。
[OK]を押して、タスクの設定を終了します。
タスクを設定する方法については、『タスク・スケジューラとWSHで定例処理を実現する』が参考になるでしょう。
以上、この設定により、10分に1回定時チェックが行われ、エラーがあった場合にはメールにて通知されるようになります。