SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Log Parserでログを統合的に扱い運用保守に役立てる

Log Parserでログを統合的に扱い運用保守に役立てる(実践編)

IISのログの整形/アプリケーションログの自動監視を行う


  • X ポスト
  • このエントリーをはてなブックマークに追加

WSH(Windows Script Host)から実行

 それでは、WSH(Windows Script Host)と呼ばれるスクリプト環境でクエリを実行してみましょう。WSHでは、JScpirt(*.js)、VBScript(*.vbs)、XML(*.wfs)などの形式でスクリプトを記述できます。ここでは、「CheckLogToMail.vbs」という名前のテキストファイルを作成しVBScriptでプログラミングします。

VBScriptでLog Parserを実行(CheckLogToMail.vbs)
'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のスクリプトはダブルクリックでも実行できますが、メッセージをコマンドプロンプトに出力させたいため、コマンドプロンプトから次のように入力します。

コマンドプロンプトから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では、次の流れでプログラミングを行いました。

  1. CreateObject("MSUtil.LogQuery")
    ……Log Parserのメインオブジェクトの生成
  2. CreateObject("MSUtil.LogQuery.TextLineInputFormat")
    ……入力形式(テキスト)オブジェクトの生成
  3. CreateObject("MSUtil.LogQuery.CSVOutputFormat")
    ……出力形式(CSV)オブジェクトの生成
  4. strQuery
    ……クエリの設定
  5. LogQuery.ExecuteBatch
    ……クエリの実行

 なお、LogQueryオブジェクトからクエリを実行するメソッドは、ExecuteBatchメソッドとExecuteメソッドの2つがあります。両メソッドとも引数に「クエリ/入力形式/出力形式」を設定できるところは同じです。ただし戻り値が、ExecuteBatchメソッドの場合は成否のブール値ですが、Executeメソッドの場合は結果セットのLogRecordSetオブジェクトになります。そのため、ファイルなどへのアウトプットの場合はExecuteBatchメソッドを、データを読み込んで細かい制御を行いたいときはExcecuteメソッドを使うと良いでしょう。

 Log Parserのスクリプトでの利用についての詳細は、ヘルプの[リファレンス]-[COM API]を参照してください。

メールを送信するVBScript

 それでは出力したCSVファイルを読み込み、メールを送信してみましょう。以下のコードを「CheckLogToMail.vbs」に追記します。

VBScriptでメールを送信(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を使ってメールを送信する』が参考になります。

メール通知の関連情報
 log4jやlog4netでログ出力をしている場合は、smtpアペンダの利用も検討してみてください。
 「イベントログ」のイベントをトリガーにする場合は、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回定時チェックが行われ、エラーがあった場合にはメールにて通知されるようになります。

次のページ
補足1:LogParser.exeのパラメータ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Log Parserでログを統合的に扱い運用保守に役立てる連載記事一覧
この記事の著者

WINGSプロジェクト 青木 淳夫(アオキ アツオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/541 2008/08/21 21:11

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング