LogParser 2.2 を用いた URLScan 3.x ログのデータ マイニング
発行日 : 2008 年 10 月 22 日 (作業者 : robmcm(英語))
更新日 : 2009 年 2 月 19 日 (作業者 : robmcm(英語))
Microsoft は、バージョン 3.1 の URLScan をリリースしました。このバージョンの優れた新機能の 1 つに、W3C 拡張ログ ファイル形式に準拠するログ ファイルがあります。これによって管理者は、Microsoft の LogParser 2.2 (英語) ユーティリティ (SQL スタイルのクエリを作成して有益な情報を抽出できる、Microsoft のフリーウェアのユーティリティ) など、ほとんどすべての一般的なログ ユーティリティを使用して、URLScan アクティビティを解析できます。
このチュートリアルの内容
- はじめに
- URLScan と LogParser のダウンロードとインストール
- URLScan ログ ファイル
- データのクエリ
- 簡単なクエリ
- フィルター クエリ
- グループ化、作表、並べ替えクエリ
- まとめ
- クライアント IP に基づく要求のカウントと要求数に基づくデータの並べ替え
- 拒否理由に基づく拒否された要求のカウント
- サイト ID に基づく、別々のログ ファイルへの要求の分割
はじめに
URLScan と LogParser のダウンロードとインストール
URLScan をダウンロードできる場所は、次のトピックの「URLScan の取得」セクションに記載されています。
注 : 32 ビット版 Windows と 64 ビット版 Windows で異なるダウンロード ファイルがあります。
LogParser は、次の URL から取得できます。
https://www.iis.net/go/1287 (英語)
注 : LogParser は 32 ビット アプリケーションですが、64 ビット版 Windows システムで使用できます。
必須ではありませんが、Logparser.exe を PATH 内のフォルダーにコピーすると、システム上の任意のフォルダーから LogParser を実行できます。
URLScan ログ ファイル
URLScan ログ ファイルの検索
既定では、URLScan は %WinDir%\System32\Inetsrv\Urlscan にインストールされます。この場所には、Urlscan.ini ファイルが格納されます(別の場所に URLScan をインストールした場合は、Urlscan.ini ファイルを検索して、URLScan のインストール場所を見つける必要があるでしょう)。Urlscan.ini ファイルの [Options] セクションには、既定で "Logs" に設定されている LoggingDirectory のエントリがあります。つまり、URLScan ログ ファイルの既定のディレクトリは %WinDir%\System32\Inetsrv\Urlscan\Logs です。
ログ ファイル名
URLScan ログ ファイルは、次の規則で名前が付けられます。
Urlscan.mmddyy.log
それぞれの意味は次のとおりです。
mm = 月
dd = 日
yy = 年
ログ ファイル フィールド
次の表は、利用可能なフィールドを示したものです。
フィールド 説明 Date 要求日付 (YYYY-MM-DD 形式) Time 要求時間 (UTC 時間) c-ip 要求を実行したクライアントの IP アドレス s-siteid 要求を受け取った Web サイトの ID cs-method 要求の HTTP メソッド cs-uri 要求の URL x-action 実行されたアクション。次のようなものがあります。 -ログ記録および許可-拒否x-reason アクションの理由。次のようなものがあります。 -要求ヘッダーが長すぎます-コンテンツの長さが長すぎます-許可されていないヘッダーが検出されました-許可されていないクエリ文字列シーケンスが検出されました-許可されていない URL シーケンスが検出されました-パス内でドットが検出されました-拡張子は使用できません-URLScan ルールに適合しませんでした-ハイビット文字が検出されました-クエリ文字列が長すぎます-2 番目のパスの正規化に失敗しました-URL が長すぎます-動詞は使用できませんx-context アクションをトリガーした要求の部分。次のようなものがあります。 -コンテンツの長さ-ファイル拡張子-HTTP_ALL_RAW-HTTP メソッド-クエリ文字列-要求ヘッダー-URLcs-data アクションをトリガーした要求データ x-control トリガーの原因となった構成管理データ。たとえば、URLScan ルールの拒否文字列が原因で要求が拒否された場合、特定の拒否文字列の一覧が表示されます。
データのクエリ
簡単なクエリ
すべての選択
発行できる最も簡単 (かつ最も役に立たない) クエリは以下のとおりです。まず、このクエリから見ていきましょう。
logparser.exe "SELECT * FROM Urlscan.*.log" -i:w3c
このクエリの動作を分析すると、次のようになります。
- すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードからすべてのフィールドを選択します ("SELECT *")。
- ログ ファイルの入力タイプを "W3C 形式" に指定します ("-i:w3c")。
注 : 必ず、入力ファイル形式を "W3C 形式" に指定する必要があります。指定しなければ、URLScan ログを解析できません。
クエリを発行する特定のフィールドの選択
返されるフィールドを指定することにより、表示するデータ量を制限できます。
logparser.exe "SELECT date,time,c-ip,x-action FROM Urlscan.*.log" -i:w3c
このクエリは次のように動作します。
- すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードから特定の 4 つのフィールドのみを選択します ("SELECT date,time,c-ip,x-action")。
- ログ ファイルの入力タイプを "W3C 形式" に指定します ("-i:w3c")。
これにより、結果に表示される情報量を大幅に減らすことができます。
別の形式へのログのエクスポート
前述のように、すべてのログにあるすべてのレコードを選択することは、Microsoft Excel、Microsoft Access、SQL Server などの別のアプリケーションを使用して URLScan 情報を解析することに関心がなければ、おそらくそれほど有益ではありません。別のアプリケーションで URLScan 情報を解析する場合は、次のように、データのすべてをコンマで区切られたファイルにエクスポートできます。
logparser.exe "SELECT * INTO Urlscan.csv FROM Urlscan.*.log" -i:w3c -o:csv
このクエリは次のように動作します。
- すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードからすべてのフィールドを選択します ("SELECT *")。
- すべてのレコードをコンマで区切られたファイルに挿入します ("INTO Urlscan.csv")。
- 入力ファイル タイプを "W3C 形式" に指定します ("-i:w3c")。
- 出力ファイル タイプを "CSV 形式" に指定します ("-o:csv")。
次の構文を使用すると、タブで区切られたファイルに簡単にエクスポートできます。
logparser.exe "SELECT * INTO Urlscan.tsv FROM Urlscan.*.log" -i:w3c -o:tsv
フィルター クエリ
一般的に、LogParser と SQL クエリの優れた機能の 1 つは、WHERE 句を使用して基準を指定することにより、表示するデータ量をフィルタリングできる点です。次のようなフィルタリングがあります。
IP アドレスに基づくフィルタリング
たとえば特定のクライアント IP アドレスからの要求をすべて表示するには、以下の構文を使用できます。
logparser.exe "SELECT * FROM Urlscan.*.log WHERE c-ip='192.168.1.1'" -i:w3c
このクエリは次のように動作します。
- すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードからすべてのフィールドを選択します ("SELECT *")。
- 特定のクライアント IP アドレスに基づいて結果をフィルタリングします ("WHERE c-ip='192.168.1.1'")。
- 入力ファイル タイプを "W3C 形式" に指定します ("-i:w3c")。
URLScan アクションに基づくフィルタリング
次の構文を使用して、URLScan の拒否に基づくフィルタリングを行うこともできます。
logparser.exe "SELECT * FROM Urlscan.*.log WHERE x-action='Rejected'" -i:w3c
このクエリは次のように動作します。
- すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードからすべてのフィールドを選択します ("SELECT *")。
- URLScan が要求を拒否した結果をフィルタリングします ("WHERE x-action='Rejected'")。
- 入力ファイル タイプを "W3C 形式" に指定します ("-i:w3c")。
一意性に基づくフィルタリング
返されるフィールドを指定し、一意性に基づきデータをグループ化することにより、表示されるデータ量をフィルタリングできます。このためには、次の構文で示すように DISTINCT 句を追加します。
logparser "SELECT DISTINCT c-ip FROM Urlscan.*.log" -i:w3c
このクエリは次のように動作します。
- すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードから、一意のクライアント IP アドレスのみを選択します ("SELECT DISTINCT c-ip")。
- 入力ファイル タイプを "W3C 形式" に指定します ("-i:w3c")。
グループ化、作表、並べ替えクエリ
フィールド別の要求のカウント
SQL スタイルのクエリのもう 1 つの優れた機能は、データを表形式で表現できることです。以下の例は、クライアント IP アドレスに基づいて要求の数を取得する方法を示します。
logparser.exe "SELECT c-ip, COUNT(*) FROM Urlscan.*.log GROUP BY c-ip" -i:w3c
このクエリは次のように動作します。
- すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードから、クライアント IP アドレスと要求数のみを選択します ("SELECT c-ip, COUNT(*)")。
- クライアント IP アドレスに基づいて要求数をグループ化します ("GROUP BY c-ip")。
- 入力ファイル タイプを "W3C 形式" に指定します ("-i:w3c")。
フィールドに基づくデータの並べ替え
次の例に示すように、ORDER BY 句を使用すると、結果をさらに便利な形に並べ替えることができます。
logparser.exe "SELECT x-action,x-reason,c-ip,cs-uri FROM Urlscan.*.log ORDER BY x-action,x-reason" -i:w3c
このクエリは次のように動作します。
- すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードから、特定の 4 つのフィールドを選択します ("SELECT x-action,x-reason,c-ip,cs-uri")。
- URLScan アクションとアクションの理由に基づいて、データを昇順に並べ替えます ("ORDER BY x-action,x-reason")。
- 入力ファイル タイプを "W3C 形式" に指定します ("-i:w3c")。
まとめ
クライアント IP に基づく要求のカウントと要求数に基づくデータの並べ替え
前述の要求カウント クエリの例から始めると、次の例に示すように、AS 句を使用して要求カウント フィールドの名前をさらに実用的な名前に変更できます。
logparser.exe "SELECT c-ip, COUNT(*) AS c-request-count FROM Urlscan.*.log GROUP BY c-ip" -i:w3c
これは、次の例に示すように、数に基づいてデータを並べ替えるのに役立ちます。
logparser.exe "SELECT c-ip, COUNT(*) AS c-request-count FROM Urlscan.*.log GROUP BY c-ip ORDER BY c-request-count DESC" -i:w3c
このクエリは次のように動作します。
- すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードから、クライアント IP アドレスと要求数のみを選択します ("SELECT c-ip, COUNT(*)")。
- クライアント IP アドレスに基づいて要求数をグループ化します ("GROUP BY c-ip")。
- 要求数に基づいて、データを降順に並べ替えます ("ORDER BY c-request-count DESC")。
- 入力ファイル タイプを "W3C 形式" に指定します ("-i:w3c")。
拒否理由に基づく拒否された要求のカウント
前述の例と少し似ていますが、以下の構文では、拒否に基づいて結果をフィルタリングし、各理由が発生する回数をカウントします。
logparser.exe "SELECT x-reason, COUNT(*) AS c-request-count FROM Urlscan.*.log WHERE x-action='Rejected' GROUP BY x-reason ORDER BY c-request-count DESC" -i:w3c
このクエリは次のように動作します。
- すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードから、理由と要求数のみを選択します ("SELECT x-reason, COUNT(*)")。
- 拒否に基づいて結果をフィルタリングします ("WHERE x-action='Rejected'")。
- 理由に基づいて要求数をグループ化します ("GROUP BY x-reason")。
- 要求数に基づいて、データを降順に並べ替えます ("ORDER BY c-request-count DESC")。
- 入力ファイル タイプを "W3C 形式" に指定します ("-i:w3c")。
サイト ID に基づく、別々のログ ファイルへの要求の分割
URLScan では、すべてのログ エントリは共通のログ ファイルに書き込まれますが、サイト別にデータを表示したい場合があります。次の例では、サイト ID ごとに名前が付けられた一意のログ ファイルを作成することにより、サイト別のファイルに URLScan ログを分割します。この例は、前述の例より少し複雑で、バッチ ファイルとして作成されています。
logparser.exe "SELECT DISTINCT s-siteid INTO siteids.tsv FROM Urlscan.*.log" -i:W3C -o:tsv -headers:off for /f %%a in (siteids.tsv) do ( logparser.exe "SELECT * INTO W3SVC%%a.log FROM Urlscan.*.log WHERE s-siteid='%%a' ORDER BY date,time" -i:W3C -o:w3c )
このバッチ ファイルは次のように動作します。
- 一意のサイト ID の一覧を含む、タブで区切られたファイルを作成します。
- サイト ID を含むタブで区切られたファイルを調べるループを作成します。
- 特定のサイト ID のすべてのフィールドを選択し、サイトごとに新しい W3C 形式のファイルを作成します。