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 の取得」セクションに記載されています。

/page.aspx/473/

: 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 メソッド
-クエリ文字列
-要求ヘッダー
-URL
cs-data アクションをトリガーした要求データ
x-control トリガーの原因となった構成管理データ。たとえば、URLScan ルールの拒否文字列が原因で要求が拒否された場合、特定の拒否文字列の一覧が表示されます。

データのクエリ

簡単なクエリ

すべての選択

発行できる最も簡単 (かつ最も役に立たない) クエリは以下のとおりです。まず、このクエリから見ていきましょう。

logparser.exe "SELECT * FROM Urlscan.*.log" -i:w3c

このクエリの動作を分析すると、次のようになります。

  1. すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードからすべてのフィールドを選択します ("SELECT *")。
  2. ログ ファイルの入力タイプを "W3C 形式" に指定します ("-i:w3c")。

: 必ず、入力ファイル形式を "W3C 形式" に指定する必要があります。指定しなければ、URLScan ログを解析できません。

クエリを発行する特定のフィールドの選択

返されるフィールドを指定することにより、表示するデータ量を制限できます。

logparser.exe "SELECT date,time,c-ip,x-action FROM Urlscan.*.log" -i:w3c

このクエリは次のように動作します。

  1. すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードから特定の 4 つのフィールドのみを選択します ("SELECT date,time,c-ip,x-action")。
  2. ログ ファイルの入力タイプを "W3C 形式" に指定します ("-i:w3c")。

これにより、結果に表示される情報量を大幅に減らすことができます。

別の形式へのログのエクスポート

前述のように、すべてのログにあるすべてのレコードを選択することは、Microsoft Excel、Microsoft Access、SQL Server などの別のアプリケーションを使用して URLScan 情報を解析することに関心がなければ、おそらくそれほど有益ではありません。別のアプリケーションで URLScan 情報を解析する場合は、次のように、データのすべてをコンマで区切られたファイルにエクスポートできます。

logparser.exe "SELECT * INTO Urlscan.csv FROM Urlscan.*.log" -i:w3c -o:csv

このクエリは次のように動作します。

  1. すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードからすべてのフィールドを選択します ("SELECT *")。
  2. すべてのレコードをコンマで区切られたファイルに挿入します ("INTO Urlscan.csv")。
  3. 入力ファイル タイプを "W3C 形式" に指定します ("-i:w3c")。
  4. 出力ファイル タイプを "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

このクエリは次のように動作します。

  1. すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードからすべてのフィールドを選択します ("SELECT *")。
  2. 特定のクライアント IP アドレスに基づいて結果をフィルタリングします ("WHERE c-ip='192.168.1.1'")。
  3. 入力ファイル タイプを "W3C 形式" に指定します ("-i:w3c")。

URLScan アクションに基づくフィルタリング

次の構文を使用して、URLScan の拒否に基づくフィルタリングを行うこともできます。

logparser.exe "SELECT * FROM Urlscan.*.log WHERE x-action='Rejected'" -i:w3c

このクエリは次のように動作します。

  1. すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードからすべてのフィールドを選択します ("SELECT *")。
  2. URLScan が要求を拒否した結果をフィルタリングします ("WHERE x-action='Rejected'")。
  3. 入力ファイル タイプを "W3C 形式" に指定します ("-i:w3c")。

一意性に基づくフィルタリング

返されるフィールドを指定し、一意性に基づきデータをグループ化することにより、表示されるデータ量をフィルタリングできます。このためには、次の構文で示すように DISTINCT 句を追加します。

logparser "SELECT DISTINCT c-ip FROM Urlscan.*.log" -i:w3c

このクエリは次のように動作します。

  1. すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードから、一意のクライアント IP アドレスのみを選択します ("SELECT DISTINCT c-ip")。
  2. 入力ファイル タイプを "W3C 形式" に指定します ("-i:w3c")。

グループ化、作表、並べ替えクエリ

フィールド別の要求のカウント

SQL スタイルのクエリのもう 1 つの優れた機能は、データを表形式で表現できることです。以下の例は、クライアント IP アドレスに基づいて要求の数を取得する方法を示します。

logparser.exe "SELECT c-ip, COUNT(*) FROM Urlscan.*.log GROUP BY c-ip" -i:w3c

このクエリは次のように動作します。

  1. すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードから、クライアント IP アドレスと要求数のみを選択します ("SELECT c-ip, COUNT(*)")。
  2. クライアント IP アドレスに基づいて要求数をグループ化します ("GROUP BY c-ip")。
  3. 入力ファイル タイプを "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

このクエリは次のように動作します。

  1. すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードから、特定の 4 つのフィールドを選択します ("SELECT x-action,x-reason,c-ip,cs-uri")。
  2. URLScan アクションとアクションの理由に基づいて、データを昇順に並べ替えます ("ORDER BY x-action,x-reason")。
  3. 入力ファイル タイプを "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

このクエリは次のように動作します。

  1. すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードから、クライアント IP アドレスと要求数のみを選択します ("SELECT c-ip, COUNT(*)")。
  2. クライアント IP アドレスに基づいて要求数をグループ化します ("GROUP BY c-ip")。
  3. 要求数に基づいて、データを降順に並べ替えます ("ORDER BY c-request-count DESC")。
  4. 入力ファイル タイプを "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

このクエリは次のように動作します。

  1. すべてのログ ファイル ("FROM Urlscan.*.log") のすべてのレコードから、理由と要求数のみを選択します ("SELECT x-reason, COUNT(*)")。
  2. 拒否に基づいて結果をフィルタリングします ("WHERE x-action='Rejected'")。
  3. 理由に基づいて要求数をグループ化します ("GROUP BY x-reason")。
  4. 要求数に基づいて、データを降順に並べ替えます ("ORDER BY c-request-count DESC")。
  5. 入力ファイル タイプを "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
)

このバッチ ファイルは次のように動作します。

  1. 一意のサイト ID の一覧を含む、タブで区切られたファイルを作成します。
  2. サイト ID を含むタブで区切られたファイルを調べるループを作成します。
  3. 特定のサイト ID のすべてのフィールドを選択し、サイトごとに新しい W3C 形式のファイルを作成します。

関連コンテンツ

記事