第2回 多彩なLog Parserの出力機能:無償ながら強力なログ解析ツールLog Parserを活用する(2/4 ページ)
Log Parser活用編。Webサーバ・ログのSQLデータベースへのインポート、ログ情報からのグラフ作成などを行う。
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”テーブルが事前に作成されているものとする。今回の構成を図にすると以下のようになる。
今回の例では、データベース・システムとして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ログ・ファイル(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.