CodeZine(コードジン)

特集ページ一覧

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

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2006/09/20 00:00
目次

例4:IISのアクセスログからHTMLを生成

 例3のチャート(PageView.gif)だけでは見にくいので、見栄えの良いHTMLを生成してみましょう。

クエリの実行

 例4の特徴は、HTMLに出力していることです。HTMLに出力するために、「テンプレート」という出力形式を利用しています。テンプレートファイルは、「ヘッダー」「本文」「フッター」という3つのセクションに分かれたテキストファイルで、「-tpl:」というパラメータで指定します。

IISのログからHTMLを生成
LogParser -i:IISW3C -o:TPL -tpl:PageView.tpl "SELECT TOP 10
 cs-uri-stem AS uri,COUNT(*) AS view INTO PageView.html
 FROM ex060221.log GROUP BY uri ORDER BY view DESC"

 このクエリを実行すると、HTMLファイル「PageView.html」が生成されます。

PageView.html
PageView.html

テンプレート出力形式(-o:TPL)の設定

 この例で使用したテンプレートファイル「PageView.tpl」の中身を見てみましょう(Log Parserでは通例的に「*.tpl」という拡張子をテンプレートファイルにつけます)。

テンプレートファイル(PageView.tpl)
<!-- ヘッダ部 -->
<lpheader>
    <html>
    <head><title>アクセス集計</title></head>
    <body>
    <table border="1" cellpadding="2" cellspacing="2">
    <tr>
        <th colspan="2" align="center">アクセス数TOP10</th>
    </tr>
    <tr>
        <th>ページ</th>
        <th>カウント</th>
    </tr>
</lpheader>

<!-- ボディ部 -->
<lpbody>
    <tr>
        <td>%uri%</td>
        <td>%view%</td>
    </tr>
</lpbody>

<!-- フッタ部 -->
<lpfooter>
    </table>
    <img src="PageView.gif" alt="チャート" width="768" heiight="576"><br />
    </body>
    </html>
</lpfooter>

 「ヘッダー」に<lpheader>、「本文」に<lpbody>、「フッター」に<lpfooter>というタグを付加している以外は普通のHTMLであることがお分かりになると思います。そして、設定したい列名を「%uri%」「%view%」というように指定すると、値が埋め込まれたHTMLが出力されます。

 例3と例4ではIISのログを例に紹介しましたが、「パフォーマンスログと警告」から出力できるCPU/メモリ使用率などからチャートやHTMLを生成することもできるでしょう。

例5:アプリケーションログをチェックしてメールで送信

 最後の例として、アプリケーションのログをチェックして、過去10分以内に「FATAL」というレベルのエラーが発生していたら、メールで通知するという仕組みを作ってみましょう。

 なお、この例では、WSH(Windows Scripting Host)というスクリプトを利用します。さらに、Windowsタスクを利用して監視の自動化を図ってみます。

テキストファイルの監視(TEXTLINE入力形式)

 アプリケーションが出力するログは、一般的なテキストファイルです。

ログファイルの例(sample.log)
2006-06-23 17:37:58,608 [2768] FATAL MyTeam.Sample - 致命的なエラーです。
2006-05-27 20:43:45,618 [2768] ERROR MyTeam.Sample - 重大なエラーです。
2006-05-26 20:43:45,618 [2768] WARN  MyTeam.Sample - 警告です。
2006-05-22 20:43:45,638 [2768] INFO  MyTeam.MyProgram.Sample - 情報です。
2006-04-21 20:43:45,638 [2768] DEBUG MyTeam.MyProgram.Sample - デバッグです。

 テキストファイルをリソースとして読み込むときは、「TEXTLINE」という入力形式を指定します。TEXTLINEの場合、次の列名を利用することができます。

TEXTLINE入力形式の列名
名前 説明
LogFilename STRING ファイルのフルパス
Index INTEGER 行番号
Text STRING テキスト行の内容

 ここではText列のみ使用します。

テキストファイルから特定行を抽出するクエリ

 ログファイル(sample.log)から「FATAL(致命的)」が含まれる行を抽出します。

テキストファイルを読み込む
LogParser -i:TEXTLINE -o:CSV "SELECT Text INTO CheckLogToMail.csv
 FROM sample.log WHERE Text Like '%FATAL%'"

 このクエリでは、LIKE句を使用しています。LIKE句では、SQLと同様に「_」は任意の1文字、「%」は0個以上の文字列に一致します。ここでは、%を前後につけて前後方一致でチェックしています。

過去10分以内に発生したログを抽出するクエリ

 さらに、過去10分以内に発生したログを抽出する条件を追加します。

テキストファイルを読み込む
LogParser -i:TEXTLINE -o:CSV "SELECT Text INTO CheckLogToMail.csv
 FROM sample.log WHERE Text Like '%FATAL%' AND
 TO_TIMESTAMP(SUBSTR(Text,0,19),'yyyy-MM-dd hh:mm:ss') >=
 TO_LOCALTIME( SUB( SYSTEM_TIMESTAMP(), TIMESTAMP( '10', 'mm' ) ) )"

 このクエリでは、関数を利用しています。

関数の利用

 基本構文に加えて、クエリでは関数を使って文字列操作や計算などを行うことができます。ここでは、次の5つの関数を利用しています(なお、関数の一覧は最後の補足にまとめています)。

  1. TO_TIMESTAMP(文字列,書式)
    ……文字列を書式日時に変換
  2. SUBSTR(文字列,開始位置,文字数)
    ……指定位置から長さ分の部分文字列を抽出
  3. TO_LOCALTIME
    ……世界協定時刻(UTC)から現地時刻に変換
  4. SUB(値1,値2)
    ……2つの値(数値/文字/日時)の差を計算
  5. SYSTEM_TIMESTAMP()
    ……世界協定時刻(UTC)のシステム日時

 まず「TO_TIMESTAMP(SUBSTR(Text,0,19),'yyyy-MM-dd hh:mm:ss')」でログの発生時刻を取得します。ログファイルの先頭から19文字をSUBSTR関数で取得し、さらにTO_TIMESTAMP関数でTIMESTAMPデータ型へ変換しています。

 次に「TO_LOCALTIME( SUB( SYSTEM_TIMESTAMP(), TIMESTAMP( '10', 'mm' ) ) )」で過去10分間を取得します。SYSTEM_TIMESTAMPの世界協定現在時刻からSUB関数で10分を引きます。そして、日本の時刻に変換するTO_LOCALTIME関数を実行します。

 この2つの値を比較し、過去10分以内の発生であるかをチェックしています。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

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

著者プロフィール

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

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

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

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5