クエリの記述方法
Log Parserを使うためには、「クエリ」の書き方をマスターする必要があります。ほとんどの方がクエリと聞くとSQLを思い起こされるのではないでしょうか。実は、Log Parserのクエリは、SQLに非常によく似ています。そのため、SQLの基本を知っている人であれば、簡単にクエリを書けるようになるでしょう。
クエリを構成する要素
クエリを構成する主な要素は次のようになります。
SELECT 列名 FROM リソース WHERE 抽出条件 ORDER BY 並び順
SQLに似ていることが分かるかと思います。それでは、さきほど実行した例1と例2を見ながら、クエリについて理解していきましょう。
表示するデータの指定(SELECT)
ログを抽出するには「SELECT 列名」という形式で記述します。もし、すべての列を取得したい場合は、「SELECT *」とアスタリスクで指定することもできます。例1では、ファイルシステム(-i:FS)を参照しているため、PathやSizeといった列名が利用できることに注目してください。
LogParser -i:FS -o:NAT "SELECT Path,Size FROM log*.* ORDER BY Size DESC"
ファイルシステムの場合に利用できる列名は次のようになります。
名前 | 型 | 説明 |
Path | STRING | フルパス |
Name | STRING | ファイル(ディレクトリ)名 |
Size | INTEGER | サイズ(バイト単位) |
Attributes | STRING | 属性 |
CreationTime | TIMESTAMP | 作成日時(現地時刻またはUTC時刻/useLocalTime パラメータ依存) |
LastAccessTime | TIMESTAMP | 最終アクセス日時(現地時刻またはUTC時刻/useLocalTime パラメータ依存) |
LastWriteTime | TIMESTAMP | 最終更新日時(現地時刻またはUTC時刻/useLocalTime パラメータ依存) |
FileVersion | STRING | バージョン |
ProductVersion | STRING | 同梱製品のバージョン |
InternalName | STRING | 内部名 |
ProductName | STRING | 同梱製品の名前 |
CompanyName | STRING | 製造元企業名 |
LegalCopyright | STRING | 著作権情報 |
LegalTrademarks | STRING | 商標 |
PrivateBuild | STRING | プライベートバージョン情報 |
SpecialBuild | STRING | 特別なビルドに関する情報 |
Comments | STRING | コメント |
FileDescription | STRING | 説明 |
OriginalFilename | STRING | 元の名前 |
他の入力形式の場合、PathやSizeは利用できません。これは、参照する入力形式によって、利用できる列の定義が異なるためです。次に、例2のクエリを見てみましょう。
LogParser -i:EVT -o:CSV "SELECT TOP 10 TimeGenerated,EventID INTO eventlog.txt FROM SYSTEM WHERE EventID IN (6005;6006) ORDER BY TimeGenerated DESC"
例2では、イベントログ(-i:EVT)を参照しているため、TimeGeneratedやEventIDといった列名が利用できることに注目してください。イベントログで利用できる列名は次のようになります。
名前 | 型 | 説明 |
EventLog | STRING | イベントログ(バックアップファイル)の名前 |
RecordNumber | INTEGER | イベントログ(バックアップファイル)のインデックス |
TimeGenerated | TIMESTAMP | 生成された日時(現地時刻) |
TimeWritten | TIMESTAMP | 記録された日時(現地時刻) |
EventID | INTEGER | イベントID |
EventType | INTEGER | イベントの種類 |
EventTypeName | STRING | イベントの種類の名前 |
EventCategory | INTEGER | イベントの分類 |
EventCategoryName | STRING | イベントの分類の名前 |
SourceName | STRING | イベントを生成したソース |
Strings | STRING | 関連付けられたテキスト形式のデータ |
ComputerName | STRING | コンピュータの名前 |
SID | STRING | 関連付けられたセキュリティ識別子 |
Message | STRING | 完全なイベントメッセージ |
Data | STRING | 関連付けられたバイナリデータ |
列のデータ型
また、データ型があることも確認しておいてください。Log Parserでは、次の5つのデータ型が用意されています。
型名 | 意味 | データの例 |
INTEGER | 整数型 | 0 / 1 / -100 |
REAL | 浮動小数点数値型 | 0.0 / 1.0 / -100.0 |
STRING | 文字列型 | あいうえお |
TIMESTAMP | 日付時刻型 | 2006-08-01 10:24:59 |
NULL | 不明/使用不可データ | NULL |
今は、それほど意識する必要はありませんが、後ほど紹介する「WHERE句の条件」や「関数」で、このデータ型を意識する必要があります。
ヘルプの利用方法
入力形式ごとに異なる列名を調べるには、[スタート]メニューの[プログラム]-[Log Parser 2.2]-[Log Parser 2.2 Documentation]からヘルプを起動します。ヘルプの目次を[リファレンス]-[入力形式]-[(入力形式名)]-[フィールド]とたどることで、利用できる列名と説明を見ることができます。
この日本語ヘルプの説明は非常に充実していますので、ぜひ目を通すようにしてください。また、コマンドプロンプトから「LogParser -h -i:入力形式」というヘルプコマンドを実行することで、簡単な概要を表示させることもできます。
上位n件を表示(TOP)
なお、SELECTの後には、例2の「SELECT TOP 10 TimeGenerated,EventID FROM SYSTEM …」のように、列名の前に「TOP 数字」と書くこともできます。この場合は、クエリ実行結果の最初の10件だけを抽出することができます。
リソースの指定(FROM)
SQLの場合、FROMの後にはテーブル名を書きますが、Log Parserの場合には、リソース名を書く必要があります。FROMの後に書ける項目は、入力形式によって異なってきます。
例えば、例1のファイルシステムの場合は「FROM log*.*」のようにファイル名を指定しています。
説明 | 例 |
パスをコンマで区切ったリスト | C:\Log\*.log |
例2のイベントログの場合は「FROM SYSTEM」のようにイベントログの名前を指定しています。
説明 | 例 |
イベントログの名前 | SYSTEM(APPLICATION、EVENT) |
イベントログのファイルパス | C:\WINDOWS\system32\config\SysEvent.Evt |
FROMの後に書ける項目もヘルプから調べます。目次を[リファレンス]-[入力形式]-[(入力形式名)]-[From-Entity構文]とたどることで、指定できるFROM句の内容を知ることができます。
条件の指定(WHERE)
ログの検索は、特定の条件でフィルタリングしてから抽出することが一般的です。この条件の指定には、WHERE句を使用します。WHERE句は「WHERE 列名 式 値」という形式で記述します。利用できる式には次の種類があります。
記号 | 意味 |
= | 等しい |
<> | 等しくない |
> | 大なり |
< | 小なり |
>= | 大なりまたは等しい |
<= | 小なりまたは等しい |
BETTWEEN A AND B | AからBの間 |
IN (A;B) | AまたはB |
LIKE | 部分一致 |
NOTを付加(NOT BETWEEN/NOT IN/NOT LIKE)して否定の意味にすることもできます。
例2では、イベントログのIDを指定するためにWHERE句を指定しました。
LogParser -i:EVT -o:CSV "SELECT TOP 10 TimeGenerated,EventID INTO eventlog.txt FROM SYSTEM WHERE EventID IN (6005;6006) ORDER BY TimeGenerated DESC"
注意点として、Log ParserではINを「IN (A;B)」とセミコロンで記述します。SQLのように「IN (A,B)」と書いて実行した場合にはエラーメッセージが表示されます。
定数の使用
EventID列のデータ型がINTEGER
なので「WHERE EventID IN (6005;6006)」と書いていますが、もしSTRING
型の場合には、IN('6005';'6006')
のようにシングルクォーテーションを付けることになります。
SQLと同様に、文字列の定数にはシングルクォーテーションが必要です。
ORDER BY
データを並べ替える場合には、ORDER句を利用します。「ORDER BY 列... DESC(ASC)」という形式で、並べ替えに利用する列とソート順(ASCの場合は昇順/DESCの場合は降順)を指定します。ASC/DESCの指定を省略した場合はデフォルトでASCとなります。
LogParser -i:FS -o:NAT "SELECT Path,Size FROM log*.* ORDER BY Size DESC"
ただし、Log Parserでは全列で1つのソート順しか指定できません(SQLのように各列に昇順・降順を指定することはできません)のでご注意ください。