SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Log Parserでログを統合的に扱い運用保守に役立てる

Log Parserでログを統合的に扱い運用保守に役立てる(基本編)

Log Parserの使い方をマスターしてログを効率的に監視する


  • X ポスト
  • このエントリーをはてなブックマークに追加

クエリの記述方法

 Log Parserを使うためには、「クエリ」の書き方をマスターする必要があります。ほとんどの方がクエリと聞くとSQLを思い起こされるのではないでしょうか。実は、Log Parserのクエリは、SQLに非常によく似ています。そのため、SQLの基本を知っている人であれば、簡単にクエリを書けるようになるでしょう。

クエリを構成する要素

 クエリを構成する主な要素は次のようになります。

クエリの基本的な構成要素
SELECT 列名 FROM リソース
WHERE 抽出条件
ORDER BY 並び順

 SQLに似ていることが分かるかと思います。それでは、さきほど実行した例1と例2を見ながら、クエリについて理解していきましょう。

表示するデータの指定(SELECT)

 ログを抽出するには「SELECT 列名」という形式で記述します。もし、すべての列を取得したい場合は、「SELECT *」とアスタリスクで指定することもできます。例1では、ファイルシステム(-i:FS)を参照しているため、PathやSizeといった列名が利用できることに注目してください。

例1:ファイルシステムへのクエリ
LogParser -i:FS -o:NAT "SELECT Path,Size FROM log*.* ORDER BY Size DESC"

 ファイルシステムの場合に利用できる列名は次のようになります。

ファイルシステム(-i:FS)で利用できる列名
名前説明
PathSTRINGフルパス
NameSTRINGファイル(ディレクトリ)名
SizeINTEGERサイズ(バイト単位)
AttributesSTRING属性
CreationTimeTIMESTAMP作成日時(現地時刻またはUTC時刻/useLocalTimeパラメータ依存)
LastAccessTimeTIMESTAMP最終アクセス日時(現地時刻またはUTC時刻/useLocalTimeパラメータ依存)
LastWriteTimeTIMESTAMP最終更新日時(現地時刻またはUTC時刻/useLocalTimeパラメータ依存)
FileVersionSTRINGバージョン
ProductVersionSTRING同梱製品のバージョン
InternalNameSTRING内部名
ProductNameSTRING同梱製品の名前
CompanyNameSTRING製造元企業名
LegalCopyrightSTRING著作権情報
LegalTrademarksSTRING商標
PrivateBuildSTRINGプライベートバージョン情報
SpecialBuildSTRING特別なビルドに関する情報
CommentsSTRINGコメント
FileDescriptionSTRING説明
OriginalFilenameSTRING元の名前

 他の入力形式の場合、PathやSizeは利用できません。これは、参照する入力形式によって、利用できる列の定義が異なるためです。次に、例2のクエリを見てみましょう。

例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といった列名が利用できることに注目してください。イベントログで利用できる列名は次のようになります。

イベントログ(-i:EVT)で利用できる列名
名前説明
EventLogSTRINGイベントログ(バックアップファイル)の名前
RecordNumberINTEGERイベントログ(バックアップファイル)のインデックス
TimeGeneratedTIMESTAMP生成された日時(現地時刻)
TimeWrittenTIMESTAMP記録された日時(現地時刻)
EventIDINTEGERイベントID
EventTypeINTEGERイベントの種類
EventTypeNameSTRINGイベントの種類の名前
EventCategoryINTEGERイベントの分類
EventCategoryNameSTRINGイベントの分類の名前
SourceNameSTRINGイベントを生成したソース
StringsSTRING関連付けられたテキスト形式のデータ
ComputerNameSTRINGコンピュータの名前
SIDSTRING関連付けられたセキュリティ識別子
MessageSTRING完全なイベントメッセージ
DataSTRING関連付けられたバイナリデータ

列のデータ型

 また、データ型があることも確認しておいてください。Log Parserでは、次の5つのデータ型が用意されています。

Log Parserのデータ型
型名意味データの例
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*.*」のようにファイル名を指定しています。

ファイルシステム(-i:FS)で利用できるFROM項目
説明
パスをコンマで区切ったリストC:\Log\*.log

 例2のイベントログの場合は「FROM SYSTEM」のようにイベントログの名前を指定しています。

イベントログ(-i:EVT)で利用できるFROM項目
説明
イベントログの名前SYSTEM(APPLICATION、EVENT)
イベントログのファイルパスC:\WINDOWS\system32\config\SysEvent.Evt

 FROMの後に書ける項目もヘルプから調べます。目次を[リファレンス]-[入力形式]-[(入力形式名)]-[From-Entity構文]とたどることで、指定できるFROM句の内容を知ることができます。

条件の指定(WHERE)

 ログの検索は、特定の条件でフィルタリングしてから抽出することが一般的です。この条件の指定には、WHERE句を使用します。WHERE句は「WHERE 列名 式 値」という形式で記述します。利用できる式には次の種類があります。

WHERE句で利用できる主な式
記号意味
=等しい
<>等しくない
>大なり
<小なり
>=大なりまたは等しい
<=小なりまたは等しい
BETTWEEN A AND BAからBの間
IN (A;B)AまたはB
LIKE部分一致

 NOTを付加(NOT BETWEEN/NOT IN/NOT LIKE)して否定の意味にすることもできます。

 例2では、イベントログのIDを指定するためにWHERE句を指定しました。

例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"

 注意点として、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となります。

例1:ファイルシステムへのクエリ
LogParser -i:FS -o:NAT "SELECT Path,Size FROM log*.* ORDER BY Size DESC"

 ただし、Log Parserでは全列で1つのソート順しか指定できません(SQLのように各列に昇順・降順を指定することはできません)のでご注意ください。

次のページ
出力形式と出力先の制御

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Log Parserでログを統合的に扱い運用保守に役立てる連載記事一覧
この記事の著者

WINGSプロジェクト 青木 淳夫(アオキ アツオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/540 2006/10/11 19:39

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング