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

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

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

 最初に、IISのログを分析し、アクセスの多い上位10個の動的ページ(.aspx)の参照数をグラフ表示する例を紹介した。この例では、Log Parserのコマンドライン・オプションで出力形式としてチャートを指定し(-o:chart オプション)、チャートのオプションとして3Dグラフを指定して(-chartType:Column3Dオプション)グラフを作成した。

 自分が見るだけなら多少不親切でも大して問題はないが、例えば分析結果を第三者に見せたりする場合には、チャートの見せ方をカスタマイズして、あれこれ工夫したいだろう。Log Parserでチャート出力形式を選択したときには、構成スクリプトと呼ばれるチャートのカスタマイズ用ファイルを指定することで、チャートを加工できるようになっている。この構成スクリプトの簡単な利用例を紹介しておこう。

 ここでは、Program Files以下にある各サブ・フォルダのサイズ(そのフォルダに含まれるファイル・サイズの総計)と、フォルダ内に含まれるファイル数を調査し、フォルダ・サイズが上位5件のフォルダにつき、フォルダ・サイズとファイル数をそれぞれ棒グラフと折れ線グラフで、両者を複合グラフとして重ねて表示する(2軸表示する)スクリプトを作成する。

 まず、フォルダ・サイズとファイル数を調査するLog Parserスクリプトは次のとおりである。

-- DiskSpace.txt
Select
     Top 5
     Folder,
     FolderSize,
     FileCount
Using
     DIV(TO_REAL(Sum(Size)), 1000000) As FolderSize,
     Count(Name) As FileCount,
     EXTRACT_TOKEN(EXTRACT_PATH(Path), 2, '\\') As Folder
Into
     DiskSpace.gif
From
     'C:\Program Files\*.*'
Group by Folder
Order by FolderSize
Desc

フォルダ・サイズとファイル数を調査するLog Parserスクリプト

 8行目のDIV(……)では、フォルダ・サイズを表示させる際に、単位をMbytes表示とするために、実数値を1000000で割っている(Kbytes、Gbytes単位にしたければ、母数となる数値を変更する)。

 10行目のEXTRACT_TOKEN(……)では、フォルダ名のみを表示させるため、EXTRACT_PATHでファイルパスのフォルダ部分のみを取得し、その後EXTRACT_TOKENでC:\Program Files\ 直下のフォルダ名を取得している。Program Filesの位置が異なる場合には、指定したパスに含まれる \ 記号の数に応じて第2引数を変更する。

 チャートの出力形式をカスタマイズするには、これとは別に構成スクリプトを用意する。構成スクリプトは、JScriptまたはVBScript言語で記述されたスクリプト・ファイルである。この構成スクリプトを記述することで、Log Parserからチャート形式で作成されたチャート(図表)をカスタマイズできるわけだ。

 この構成スクリプト内では、ChartSpaceオブジェクトとchartオブジェクトという2つのグローバル・オブジェクト(Office Webコンポーネント・モデルのChartSpace オブジェクトのインスタンス)を参照できる。これらのオブジェクトのメソッドやプロパティを操作することで、構成スクリプトによるチャートのカスタマイズが可能になる。以下に具体例を示すが、ChartSpaceオブジェクト・モデルの詳細については、以下のMSDNのページを参照していただきたい。

 ここでは、棒グラフと折れ線グラフを重ねて表示するための構成スクリプトをVBScriptで作成し、DiskSpace_Chart.txtという名前でLog Parserのインストールフォルダに保存する。スクリプトは以下のとおりである。

' DiskSpace_Chart.txt
' Constants プロパティの取得
Set objConst = chartSpace.Constants

' 各データの取得 (FolderSize と FileCount)
Set objFolderSize = chart.SeriesCollection(0)
Set objFileCount = chart.SeriesCollection(1)

objFileCount.Type = objConst.chChartTypeColumnClustered
objFileCount.Ungroup True

' グラフタイトル
chartSpace.HasChartSpaceTitle = True
chartSpace.ChartSpaceTitle.Caption = "フォルダサイズとファイル数"

' 左グラフ(FolderSize)
objFolderSize.Caption = "フォルダサイズ(MB)"
objFolderSize.Type = objConst.chChartTypeColumnClustered
' 左グラフ軸(FolderSize)
Set objAxisLeft = chart.Axes(objConst.chAxisPositionLeft)

' 右グラフ(FileCount)
objFileCount.Caption = "ファイル数"
objFileCount.Type = objConst.chChartTypeLine

' 左グラフとの分離
objFileCount.Ungroup True

' 右グラフ軸(FileCount)
Set objAxisRight = chart.Axes.Add(objFileCount.Scalings(objConst.chDimValues))
objAxisRight.Position = objConst.chAxisPositionRight
objAxisRight.HasMajorGridLines = False

チャートをカスタマイズするための構成ファイルの例
ChartSpaceオブジェクトの名前付き定数を利用するために、最初にchartSpace.Constantsプロパティを取得している(名前付き定数を使用しない場合は、MSDNドキュメントの「Office Webコンポーネントの定数」を参考にして、数値での指定も可能である)。次に、FolderSizeを左グラフとして、FileCountを右グラフとしてグラフ作成するため、SeriesCollectionからそれぞれオブジェクトを取得し(chart.SeriesCollection(0)と、chart.SeriesCollection(1))、カスタマイズしている。最初に左グラフのカスタマイズを行い、その後異なる目盛を指定するためにobjFileCount.Ungroupメソッドを呼び出し、右グラフをカスタマイズする。

 構成スクリプトは、Log Parserの実行時、チャート出力形式(-o:chart)のオプションとして指定する。具体的には、次のようにする。

ogParser file:DiskSpace.txt -i:fs -recurse:-1 -stats:on -o:chart -config:DiskSpace_Chart.txt -view:on

 すでに説明したとおり、“-i:fs”は入力形式としてファイル/ディレクトリ情報を指定するオプションで、“-recurse:-1”はサブ・フォルダをすべて再帰的に検査するオプションだ。“-stats:on”はLog Parserのグローバル・スイッチで、コマンドの実行完了時に統計情報を表示する指定である。そして“-o:chart”で出力形式としてチャートを指定し、“-config:DiskSpace_Chart.txt”として構成スクリプトを指定している。繰り返しになるが、“-view:on”は、図表イメージの表示を指示するチャート出力形式のオプションである。

 Log Parserを実行すると、次のようなグラフが表示される。

チャートのカスタマイズの例
各フォルダのサイズを棒グラフ、フォルダに含まれるファイル数を折れ線グラフとし、両者を1つのグラフとして複合表示している。

 Officeグラフ・コンポーネントを使用した複合グラフの作成については、以下のサポート技術情報も参照されたい。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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