はじめに
Webサーバやアプリケーションから重要なログが出力されていたとしても、そのログの情報を見落としてしまうことがあります。そこで、本稿では、そのままでは見にくいログファイルから見栄えの良いグラフやHTMLを生成したり、危険度の高いエラーが出力されたときに自動でメールを送信する方法について紹介します。
本稿は、別稿『Log Parserでログを統合的に扱い運用保守に役立てる(基本編)』の続編となっています。Log Parserに関する概要およびインストール方法については、別稿の内容を参照してください。
対象読者
Windows、Windows Serverで開発や運用を行っている方を対象としています。
必要な環境
本稿の内容ならびにダウンロードファイルのクエリを実行するためには、Log Parserをインストールする必要があります。
ダウンロードファイルの概要
ダウンロードファイルには、Log Parserを実行するバッチファイルと、そのクエリを動かすためのサンプルログファイルが含まれています。本稿で解説している例を動かしたい場合は、ダウンロードファイルを解凍し、Log Parserをインストールしたフォルダ(既定では「C:\Program Files\Log Parser 2.2」)に配置してください。
例3:IISのアクセスログからチャートを生成
基本編の例1と例2に引き続き、応用としてIISで運用しているWebサイトの分析を行い、チャート(グラフ)を生成してみましょう。
IISのログ設定
まず、最初にIISのログの説明をしておきます。IISでログを出力するには管理ツールである[インターネット インフォメーション サービス]-[既定のWebサイトのプロパティ]-[Webサイト]タグで設定を行います。
切替タイミングと出力先は、[ログ収集を有効にする]横の[プロパティ]ウィンドウで設定します。
さらに出力する項目は、[拡張プロパティ]タグで設定します。
このW3C拡張ログファイル形式で出力されるログは次のようなイメージになります。
#Software: Microsoft Internet Information Services 5.1 #Version: 1.0 #Fields: time c-ip cs-method cs-uri-stem sc-status 18:06:05 127.0.0.1 GET /iishelp/Default.htm 200 18:06:12 127.0.0.1 GET /iishelp/iis/misc/default.asp 200 18:06:12 127.0.0.1 GET /iishelp/iis/misc/contents.asp 200 18:06:12 127.0.0.1 GET /iishelp/iis/misc/navbar.asp 200 18:06:12 127.0.0.1 GET /iishelp/iis/htm/core/iiwltop.htm 200 (以下略)
クエリの実行
ここでは、IISのログファイルからアクセス数の多いページをチャートとして生成してみます。
LogParser -i:IISW3C -o:CHART "SELECT TOP 10 cs-uri-stem AS uri, COUNT(*) AS view INTO PageView.gif FROM ex060221.log GROUP BY uri ORDER BY view DESC" -chartType:Column3D -groupSize:1024x768
このクエリを実行すると、INTOで指定した画像「PageView.gif」が生成されます。
なお、チャートを生成するためには「Office WEBコンポーネント」が必要になります。このコンポーネントは、通常、Office 2000(XP/2003)とともにインストールされますが、Webサイトからダウンロードすることも可能です。
IISのログファイルのチェック(IISW3C)
IISから「W3C拡張ログファイル形式」のログを出力しているため、入力形式に「-i:IISW3C」を指定します。IISW3C形式の場合、主に次の列名を指定することができます。
名前 | 型 | 説明 |
LogFilename | STRING |
ログファイルのフルパス |
LogRow | INTEGER |
行番号 |
date | TIMESTAMP |
日付(世界協定時刻(UTC)) |
time | TIMESTAMP |
時刻(世界協定時刻(UTC)) |
c-ip | STRING |
クライアントのIPアドレス |
cs-username | STRING |
ユーザーの名前(匿名ユーザーの場合はNULL) |
s-sitename | STRING |
IISサービス名(サイトインスタンス番号) |
s-computername | STRING |
サーバーの名前 |
s-ip | STRING |
サーバーのIPアドレス |
s-port | INTEGER |
サーバーのポート番号 |
cs-method | STRING |
HTTP命令(またはFTP操作) |
cs-uri-stem | STRING |
HTTPのURI(またはFTP操作の対象) |
cs-uri-query | STRING |
HTTPのURIクエリ(クエリがない場合はNULL) |
sc-status | INTEGER |
HTTP(またはFTP)のステータスコード |
sc-win32-status | INTEGER |
ステータスコードに関連付けられたWindowsのステータスコード |
sc-bytes | INTEGER |
サーバーから送信した応答バイト数 |
cs-bytes | INTEGER |
クライアントから送信した要求バイト数 |
time-taken | INTEGER |
サーバーが要求を受信してから最終応答するまでの経過時間(ミリ秒) |
cs-version | STRING |
クライアント要求のHTTPバージョン |
cs-host | STRING |
クライアント要求のホストヘッダ |
cs(User-Agent) | STRING |
クライアント要求のユーザーエージェントヘッダ |
cs(Cookie) | STRING |
クライアント要求のCookieヘッダ |
cs(Referer) | STRING |
クライアント要求の参照元ヘッダ |
IISの拡張プロパティでログ出力するように設定した列名を選択してください。
列の別名
なお、クエリでは列に別名をつけることができます。ここでは、「cs-uri-stem」に「uri」という別名を、「COUNT(*)」に「view」という別名を指定しています。別名をつけるには「SELECT cs-uri-stem AS uri, COUNT(*) AS view ~」というように「AS」で指定します。
GROUP BYと集計関数
特定の列で集計処理を行いたい場合には「GROUP BY」を利用します。ここでは、「cs-uri-stem」を集計して、ページ毎のビューを計算しています。なお、COUNT(*)のように、集計した項目を計算して一つの値を返す関数を「集計関数」と呼びます。
Log Parserでは、COUNT以外にも、次のような集計関数が用意されています。
集合関数名 | 説明 |
COUNT | 項目数 |
SUM | 合計 |
AVG | 平均 |
MAX | 最大値 |
MIN | 最小値 |
PROPCOUNT | COUNTの結果の比率 |
PROPSUM | SUMの結果の比率 |
チャート出力形式(-o:CHART)の設定
チャートを生成する「-o:CHART」出力形式では、チャート化する列の指定方法に特徴があります。まず最初の列に「表示する名前」を設定します。今回の場合は「uri(ページ名)」を指定しています。次に、2番目の列に「数」を設定します。今回の場合は「view(アクセス数)」を指定しています。
チャート出力形式(-o:CHART)のパラメータ
さらに、チャート専用のパラメータを2つ設定しています。ひとつはチャートの形を表す「-chartType:」で、ここでは立体的な柱型の「Column3D」を設定しています。もうひとつは、サイズを表す「-groupSize:」で「1024x768」を設定しています。
この設定をすることで、IISのログファイルから、直感的に分かりやすいチャートを生成することができます。なお、IISのログ解析に役立つクエリについては、eXperts ConnectionのLogParserフォーラムに情報がありますので参考にすると良いでしょう。