Q


△ 図をクリックすると拡大されます
図3●イベント・ログを他のマシンで見ると[説明]がうまく表示されないことがある
サーバーのトラブルシューティングをする際に,イベント・ログを解析することがよくあります。検索などの利便性を考えて,イベント・ログを.EVT形式のファイルで取得しているのですが[説明]欄のメッセージがうまく表示されないイベントがあって困っています(図3)。

 確認してもログ・ファイルの種類は正しく指定されています。取得したWindows 2000 Server上で同じファイルを開くと正しく表示されるため,ファイルが破損しているわけでもなさそうです。このメッセージを正しく表示させることはできないのでしょうか?


A

これは,イベント・ログに記録したイベントを表示するための仕組みが原因で発生する仕様となります。実は,イベント・ログ内には,[説明]欄の情報としてイベント内容を示すイベントIDの数値と各イベントのメッセージ中にあらかじめ定義されている可変部分に該当する変数の内容(文字列,数値など)だけが記録されています。

情報の表示には他のファイルが必要
 イベント・ビューアなどで実際に表示する際には,イベント・ログ本体に格納されているこれらの変数の内容を,あらかじめ指定されているDLLなどのメッセージ・ファイルと組み合わせて表示しています(図4)。メッセージ・ファイルには,イベントIDに対応するメッセージの情報が「リソース」として格納されています。これにより,イベント・ログに格納する情報を削減すると同時に,メッセージ・ファイルを差し替えるだけで表示言語を変更できるといったメリットがあります。


△ 図をクリックすると拡大されます
図4●イベント・ビューアはイベント・ログとメッセージ・ファイルの情報を組み合わせてメッセージを表示している

 その一方,.EVT形式で保存したファイルを別マシンで読み込んでも,そのマシン上に対応するメッセージ・ファイルが存在しない場合はメッセージが表示できないことになります。無理にメッセージを表示すると,ご質問のようにエラー・メッセージと.EVTファイル自体に格納されている変数の内容が表示されます。

 ご質問の状況だけでなく,イベントを出力したマシン上でメッセージを参照する場合でも,メッセージ・ファイルをアンインストールしてしまった場合は同様の問題が生じます。また,そもそもメッセージIDに対応するメッセージ内容がどこにも登録されていない場合なども,同様の理由で正しく表示されません。

 メッセージを正しく表示したい場合は,何らかの方法でそのマシンにメッセージ・ファイルを登録する必要があります。例えば,そのイベントを出力したアプリケーションなどを適切にインストールすれば,メッセージ・ファイルが正しく登録されるはずです。

メッセージ・ファイルの参照を設定
 トラブルが発生した際にインストールの時間をかけず緊急に解析したい場合は,レジストリ設定とファイル・コピーだけで,メッセージを表示させることも可能です。

 まず,イベント・ログ保存元マシンで関連するレジストリ情報を確認・取得する必要があります。メッセージ・ファイルに関する情報は,レジストリの「HKEY_LOCAL_MACHINE\SYSTEM
\CurrentControlSet\Services\Eventlog\ログの種類に対応するキー名\ソース」に格納されています。ログの種類に対応するキー名については表1を参照してください。

キー名 対応ログ
Application アプリケーション・ログ
Directory Service Directory 複製ログ
DNS Server DNSサーバー
File Replication ファイル複製サービス
Security セキュリティ・ログ
System システム・ログ
表1●キー名と対応するログの種類



 例えば,図3のイベントはログの種類はシステム・ログで,ソースがDhcpServerとなります。そこで,HKEY_LOCAL_MACHINE\SYSTEM
\CurrentControlSet\Services\
Eventlog\System\DHCPServerのレジストリを参照すると,図5のような内容が確認できます。ここで,EventMessageFileの値に指定されているファイル(ここではdhcpssvc.dll)がメッセージ・ファイルになります。ParameterMessageFileやCategoryMessageFileといった値が存在している場合もありますが,これらは無視しても説明欄は表示されます。


△ 図をクリックすると拡大されます
図5●メッセージ・ファイルはレジストリで確認できる

 ここまで確認できたら,このうち,EventMessageFileとTypesSupportedの値を,イベント・ログを参照したいマシンにレジストリ・エディタから入力するなど何らかの方法で反映させてください。それからログを取得したマシンにあるメッセージ・ファイルをコピーやファイル共有といった方法で確認したいマシンから参照可能にした上で,EventMessageFileの値が該当のメッセージ・ファイルを指定していることを確認します。これにより,該当イベントのメッセージが正しく表示されるようになります。

テキストやCSV出力との併用を推奨
 技術的には,ここまでの方法でメッセージが適切に表示されるようになります。しかし,すべてのメッセージについてこの作業をするのはかなり煩雑なことに加え,ライセンス上の問題が発生する可能性もあります。

 残念ながら,これらの問題すべてを解決する根本的な対応策はありません。そのため,イベント・ログを別マシンで参照する場合には,.EVT形式だけでなく,テキスト形式やCSV形式でも保存することを推奨します。そうすると,検索性は劣りますが,各イベントのメッセージ全文がファイルに保存されますので,別のマシン上でもメッセージの全文を確認可能です。

 実際の現場でイベント・ログを取得する際には,.EVT形式とテキスト形式やCSV形式の両方で取得し,必要に応じて両者を参照しながら解析するのが実用的でしょう。

高橋 基信