[WMI基礎] トラブルシュートの基礎知識 (2)/n : WMI 詳細ログと WMIDiag ダイジェスト

皆様ご機嫌よう。ういこです。今日は寒いです。昨日の花見は死ぬかと思いました。お尻が寒くて。
さて、本日も先日のトラブルシュートの記事の続きです。 WMI のサービス自体は基本的な部分は動作している様子なのに、それなのにどうも処理がうまくいかない場合の切り分けについてです。前回はこちら。

[WMI基礎] トラブルシュートの基礎知識 (1)/n : WMI の動作基盤のテストから始めよう
https://blogs.technet.com/jpilmblg/archive/2010/04/04/wmi-1-n-wmi.aspx
トラブルシュート時のチェックリスト : (1) WMI のテストをしよう” の続きです。

トラブルシュート時のチェックリスト (2) WMI のログをさらに詳しく取ってみる

こうした場合、特定のクラスやクエリ発行後の動作などを追いかけてみることになります。
具体的には、以前このブログでもご紹介させて頂いた、"WMI のログ" を "詳細 (Verbose)" で取得することになります。
WMI のログは既定ではエラー時のみの取得になるので、もしかしたらエラーほどではなくても、処理の流れに問題の端緒となる部分があってもそうしたところまでは確認ができませんが、詳細モードにしていただくことで、WMI の処理を細かくトラックすることができるのです。
この方法は、デバッガを入れることが出来ない本番環境などでも有効です。

-- WMI のログについて
・既定では、C:\WINDOWS\system32\WBEM\Logs\ にログが出力されます。いろんなログがありますが、物によっては更新日時が全然昔のものもあったりします。問題発生時の時刻近辺に更新されたものをご覧になることで、効率よくデータを見ることができます。
・ログには、実際に実行されたメソッド名、その実行結果(エラーの場合は、エラーコードなど)が表示されます。
・WMI 関連の動作が実施された場合にログされます。なので、WMI の処理が実施されていなければ、ログされることはありませんため、詳細モードにしたからといって、OS が起動されている間中、ログが無尽蔵に膨れ上がるわけではありません。
・WMI のログサイズの上限は、既定値が決まっています。既定は 65536 バイトです。これ以上のサイズになる場合は、それまでログされていたファイルを拡張子 *.log から *.lo_ に変更し、一世代分だけバックアップを保存し、あらたにログファイルを作成します。つまり、何かあった場合、log ファイルだけでなく、lo_ ファイルも見たほうがよいということになります。
・ログサイズは自分で設定することが出来ます。XP / 2003 Server までは、GUI 上で設定できますが、Vista 以降ではレジストリを書き換える必要があります。

参考 : [WMI TroubleShoot!] トラブルシュートだ!(1) WMI ログを取ろうぜ (XP,2003,Vista,2008)
https://blogs.technet.com/jpilmblg/archive/2009/06/11/wmi-troubleshoot-1-wmi-xp-2003-vista-2008.aspx

ログファイルサイズはこちらのダイアログの、"Log file attributes" コンテナ内の、"Maximum size (Bytes): " のところです。既定では 65536 になっているかと思います。

 wmi1-4_2[1]

(3) The WMI Diagnosis Utility -- Version 2.0 (WMIDiag) などを使ってみる
WMIDiag は文字通り、WMI の動作基盤の動作状態のヘルスチェックをすることが出来ます。以下よりダウンロード頂くことが可能です。WMI 自体の動作基盤関連の動作をチェックする必要がある案件の場合、お客様に取得いただき、調査の参考情報にすることもあります。
実行自体は、ダウンロードして解凍後に展開される WMIDiag.vbs をダブルクリックするもよし、コマンド プロンプト上から実行して眺めるもよし、簡単にできます。

The WMI Diagnosis Utility -- Version 2.0
Brief Description
A new utility to help system administrators diagnose and repair problems with the WMI service.
https://www.microsoft.com/downloads/details.aspx?FamilyID=d7ba3cd6-18d1-4d05-b11e-4c64192ae97d&displaylang=en

WMIDiag を実行させると、以下の三つのファイルが既定では環境変数 %TEMP% に記載されたディレクトリに作成されます。

1. *.log ファイル … WMIDiag 自体のチェック項目やレポートなどが記録されます。
2. *.txt ファイル … 実際には、上記 *.log とほとんどおなじ内容です。
3. *.csv ファイル … 検証結果の統計などが記録されます。

これらには、OS の構成情報 (MSInfo32 で取れるもの見たいな) や、ネットワーク、ハードウエア、導入されているソフトウェアの構成などのほか、WMI の構成情報とそれらに対する検証の結果などが含まれます。
レポートには以下が含まれます。

1. OK : 問題なし。
2. WARNING : 何らかのアクションを取る必要がある可能性がある、もしくは運用の際に念頭にとどめる必要がある情報
3. ERROR : 解決もしくは対処すべき問題のある状況。

※ WMIDiag.vbs の情報を書き換えることで、検証レベルを変えたりすることもできますが、WMI の動作基盤を少し試すということであれば、特にそのままの既定の状態で実行頂いても全然構いません。VBS の動作を変えるためのパラメータなどは、WMIDiag.Doc (解凍後のディレクトリに作成されます。) に記載されていますので、興味がある方はそちらをご覧ください。英語なのでちょっと心が折れそうになりますが…。

出力例 :
こんな風にそれぞれの項目に従って、 OK か Error かなどがレポートされていることがわかります。
例えば、以下の出力例だと、さまざまな項目が OK だと通知されているほか、WMI のサービスの依存情報として "SMS Agent Host" がレポートされています。なるほど、こいつは WMI のサービスが死んだら多分動作に支障を来すのだろう、とかちょっと想像できるわけです。

41152 11:54:39 (0) ** DCOM Status: ............ OK.
41153 11:54:39 (0) ** WMI registry setup: ..... OK.
41154 11:54:39 (0) ** INFO: WMI service has dependents: .............. 1 SERVICE(S)!
41155 11:54:39 (0) ** - SMS Agent Host (CCMEXEC, StartMode='Automatic')
41156 11:54:39 (0) ** => If the WMI service is stopped, the listed service(s) will have to be stopped as well.
41157 11:54:39 (0) ** Note: If the service is marked with (*), it means that the service/application uses WMI but
41158 11:54:39 (0) ** there is no hard dependency on WMI. However, if the WMI service is stopped,
41159 11:54:39 (0) ** this can prevent the service/application to work as expected.
41160 11:54:39 (0) **
41161 11:54:39 (0) ** RPCSS service: .......... OK (Already started).
41162 11:54:39 (0) ** WINMGMT service: ........ OK (Already started).

ちなみに私の環境でちょっとやってみたら、思いがけず警告 (WARNING) 出されちゃいました。

41165 11:54:39 (2) !! WARNING: WMI DCOM components registration is missing for the following EXE/DLLs: ............. 6 WARNING(S)!
41166 11:54:39 (0) ** - C:\WINDOWS\SYSTEM32\WBEM\FASTPROX.DLL (\CLSID\{7A0227F6-7108-11D1-AD90-00C04FD8FDFF}\InProcServer32)
41167 11:54:39 (0) ** - C:\WINDOWS\SYSTEM32\WBEM\FASTPROX.DLL (\CLSID\{D71EE747-F455-4804-9DF6-2ED81025F2C1}\InProcServer32)
41168 11:54:39 (0) ** - C:\WINDOWS\SYSTEM32\WBEM\FASTPROX.DLL (\CLSID\{ED51D12E-511F-4999-8DCD-C2BAC91BE86E}\InProcServer32)
41169 11:54:39 (0) ** - C:\WINDOWS\SYSTEM32\WBEM\WBEMPROX.DLL (\CLSID\{4C6055D8-84B9-4111-A7D3-6623894EEDB3}\InProcServer32)
41170 11:54:39 (0) ** - C:\WINDOWS\SYSTEM32\WBEM\WBEMPROX.DLL (\CLSID\{A1044801-8F7E-11D1-9E7C-00C04FC324A8}\InProcServer32)
41171 11:54:39 (0) ** - C:\WINDOWS\SYSTEM32\WBEM\WBEMPROX.DLL (\CLSID\{F7CE2E13-8C90-11D1-9E7B-00C04FC324A8}\InProcServer32)
41172 11:54:39 (0) ** => WMI System components are not properly registered as COM objects, which could make WMI to
41173 11:54:39 (0) ** fail depending on the operation requested.
41174 11:54:39 (0) ** => For a .DLL, you can correct the DCOM configuration by executing the 'REGSVR32.EXE <Filename.DLL>' command.
41175 11:54:39 (0) **

WMIDiag は、相当量の情報が出てきます。ちなみにわりと、WARNING レベルだと作った直後の環境でもいくつかでていることはあります。そのため、頭から細かく見ていくと、色々なことが気になりすぎてしまうこともあるかと思います。

そこで、実行対象のシステムで WMI 関連の問題がすでに起きていて、実際に WMIDiag を実行したいというかたは、まず Ctrl + F キーで キーワード “WARNING” もしくは “ERROR” をサーチするところから始めてもよいと思います。サーチして見つけたこれらの WARNING 以上のレベルの関連情報の中に今あなたが確認したい WMI のクラス関連、もしくはモジュール関連で何か通知されていないかを確認すればよいのです。

-- 一般的な実行例 : コマンド プロンプト上
1. 特定の名前空間に対して確認を実施
(CScript で実施すればポップアップは出ません。ちなみに、その場合 "vbs" をお忘れなく。)

CScript WMIDiag.vbs BaseNamespace=名前空間名

例) root\cimv2 名前空間の場合
CScript WMIDiag.vbs BaseNamespace=Root\CIMv2

2. もういちいち対話モードが嫌な場合は

CScript WMIDiag.vbs Silent

コンソール上にもメッセージ出すのが嫌な場合はさらに Silent に加えて、NoEcho で。

CScript WMIDiag.vbs Silent NoEcho

3. ログレベルを上げて情報量をさらに増やしてみたいあなたには(既定でも大量ですが…)高負荷状態での実行はお勧めしません。

CScript WMIDiag.vbs LoggingLevel=4

4. ログファイルなどを既定の環境変数 %temp% のところではなく、別のところに作りたい場合。他のサーバ上にもつくれます。ただし、書き込み権限は適切に設定しておかないとだめです。

CScript WMIDiag.vbs LogFilePath=ファイル保存したいディレクトリ

例) c:\temp 配下に保存したい場合
CScript WMIDiag.vbs LogFilePath=c:\temp

-- 参考情報
WMI Diagnosis Tool General Questions
https://blogs.msdn.com/wmi/archive/2006/05/12/596266.aspx
WMI Troubleshooting
https://msdn.microsoft.com/en-us/library/aa394603(VS.85).aspx
TechNet Webcast: Troubleshooting the Windows Management Instrumentation (WMI) (Level 300)  
Event ID: 1032290321
(※ Register Online して進んでいくと、WMV ファイルをダウンロードするページにいきます。登録情報のチェックとか含むと 4 ページくらい先になるかもですが。ファイル名は "DownloadLMM.zip" です。中に DownloadLMM.wmv が入っています。)
https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032290321&EventCategory=5&culture=en-US&CountryCode=US
レコーディング情報の表示
レコーディングの件名:  TechNet Webcast: Troubleshooting the Windows Management Interfac
レコーディング ID:  1032290320
開催者:  Organizer WWEvents
レコーディング日時:  2006/03/08 水 09:32 (PDT)
継続時間:  1:06

******************

それでは、また~。

ういこう@14 時間も眠りこんでしまった