連載
» 2007年02月01日 00時00分 公開

無償ながら強力なログ解析ツールLog Parserを活用する:第2回 多彩なLog Parserの出力機能 (2/4)

[小板公一,マイクロソフト株式会社]

 Log Parser単独でもログ分析は可能だが、特にデータが大量にある場合には、SQL ServerのAnalysis Services(分析サービス)を利用することで、膨大なデータを効率的かつ多角的に分析することができる。これを行うには、データをSQL Serverにインポートする必要がある。この際のデータのインポートには、SQL Serverのインポート・ウィザードを使うこともできるが、Log ParserのSQL出力形式を使って、ログ内の必要なエントリだけをSQL Serverにインポートすることが可能である。ここでは、IISのWebサーバ・ログ(W3C拡張ログ形式)を例に取り、Log Parserを利用して、指定したエントリだけをログからSQL Serverにインポートしてみよう。

 ただし、Log ParserのSQL出力形式を使うためには、あらかじめODBC(Open DataBase Connectivity)による接続設定が必要である。以下で紹介する例では、ODBCソースとして“LocalServer”というDSN(ODBC Data Source Name)が、すでに登録されているものとする。またデータをインポートするSQL Server側に“MyReport”というデータベースと“inetlog”テーブルが事前に作成されているものとする。今回の構成を図にすると以下のようになる。

サンプルの構成
LogParserスクリプトを使って、IISログをSQLデータベースにインポートする。

 今回の例では、データベース・システムとしてSQL Server 2005を使用し、MyReportデータベースを作成、以下のクエリにてinetlogテーブルを作成した。SQL Server 2000上に作成する場合は、テーブルのレコードの最大バイト数(8060バイト)に注意してテーブルを作成してほしい。

CREATE TABLE [dbo].[inetlog](
     [LogTime] [datetime] NULL,
     [c-ip] [nvarchar](15) COLLATE Japanese_CI_AS NULL,
     [cs-username] [nvarchar](36) COLLATE Japanese_CI_AS NULL,
     [s-ip] [nvarchar](15) COLLATE Japanese_CI_AS NULL,
     [s-port] [int] NULL,
     [cs-method] [nvarchar](10) COLLATE Japanese_CI_AS NULL,
     [cs-uri-stem] [nvarchar](256) COLLATE Japanese_CI_AS NULL,
     [cs-uri-query] [nvarchar](2048) COLLATE Japanese_CI_AS NULL,
     [sc-status] [int] NULL,
     [sc-substatus] [int] NULL,
     [sc-win32-status] [int] NULL,
     [sc-bytes] [int] NULL,
     [cs-bytes] [int] NULL,
     [time-taken] [int] NULL,
     [cs-version] [nvarchar](10) COLLATE Japanese_CI_AS NULL,
     [cs-host] [nvarchar](256) COLLATE Japanese_CI_AS NULL,
     [cs-User-Agent] [nvarchar](256) COLLATE Japanese_CI_AS NULL,
     [cs-Cookie] [nvarchar](2048) COLLATE Japanese_CI_AS NULL,
     [cs-Referer] [nvarchar](2048) COLLATE Japanese_CI_AS NULL
)

 以下のファイルをSQLImport.txtとしてLog Parser.exeと同じフォルダに保存する。

' SQLImport.txt
Select
     LogTime,
     c-ip,
     cs-username,
     s-ip,
     s-port,
     cs-method,
     cs-uri-stem,
     cs-uri-query,
     sc-status,
     sc-substatus,
     sc-win32-status,
     sc-bytes,
     cs-bytes,
     time-taken,
     cs-version,
     cs-host,
     cs(User-Agent),
     cs(Cookie),
     cs(Referer)
Using
     TO_LOCALTIME(TO_TIMESTAMP(Date, Time)) As LogTime
Into
     inetlog
From
     -- IIS W3C 拡張ログ形式が保存されているフォルダを指定する
     C:\Windows\system32\IISLogs\*.*

IISログからSQL ServerにデータをインポートするためのLog Parserスクリプト

 このスクリプトでは、最後の行で指定したフォルダのIISログ・ファイル(C:\Windows\system32\IISLogs\*.*)からデータを取り出し、時刻情報をローカル時間に変換したうえで(TO_LOCALTIME(……))、inetlogテーブルにログ情報を出力する。

 スクリプトを実行するには、コマンド・プロンプトから次のようにLog Parserを実行する。

LogParser file:SQLImport.txt -i:IISW3C -o:SQL -database:MyReport -dsn:LocalServer

 Log Parserのスクリプト・ファイル(file: オプション)を指定し、データの入力形式としてIISログを指定(-i: オプション)、出力形式としてSQL形式を指定して(-o: オプション)、LocalServer データベース・ソース(-dsn:オプション)のMyReportデータベース(-database:オプション)にデータをインポートしている。

 Log Parserを解説するという本稿の主眼から外れるので、これ以上は説明しないが、SQL Serverを使用したWebログの解析についてさらに詳しく知りたければ、以下のサポート技術情報を参照されたい。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。