SHOEISHA iD

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

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

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

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

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


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

例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分以内の発生であるかをチェックしています。

次のページ
WSH(Windows Script Host)から実行

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

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

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

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング