web-dev-qa-db-ja.com

perfmon / logmanを使用して、マスター(Windows)VMでログを設定し、ネットワーク上の別のマシンに書き込むにはどうすればよいですか?

一般的なケースでリモートの場所に書き込むようにログを設定する方法を知っています-ログジョブを作成するときに、完全なUNCパス(例:\\ Host-PC\directory\logoutput.etl)を使用して出力ファイル名を指定するだけです。ただし、ロギングが有効になっているマスターVMから新しい仮想マシンを作成すると問題が発生します。各VMはネットワーク上のまったく同じファイルにログを書き込みます。新しいVMがそれぞれ固有のリモートファイルに自動的に書き込む方法を見つける必要があります。

Logman.exe(\ Host\directory \%ComputerName%\ log.etlなど)を使用してログを設定するときに、UNCパスで%ComputerName%環境変数を使用してみましたが、各VMがこれを自動的に展開して一意の名前を含めますが、これは機能しません。変数を展開せずに、「%ComputerName%」という名前のフォルダーを取得するだけです。これは、たとえば、 %SystemRoot%、これは正しく展開されます(ただし、もちろん、このインスタンスでは無効なパスが作成されます)。一部の変数が展開され、他の変数が展開されない原因がわかりません。

より良いアイデアはありますか?

2
Scott

logmanを使用してネイティブに実行する方法はわかりませんが、UIとCOMインターフェイスの両方を使用して、コンピューター名をプレフィックスとして含めるようにサブディレクトリ形式を設定できます。

Performance logs and alerts dialog showing the "Prefix subdirectory with computer name" option

プログラムでオプションを設定する方法については、 ドキュメントについてはMSDN を参照してください。

編集:問題のチェックボックスは、データセットコレクターとパフォーマンスカウンター自体の両方に表示されます。パフォーマンスカウンターのオプションがグレー表示されているようです。 MMCツリーの「データコレクターセット>ユーザー定義」の下の項目を右クリックして、適切なオプションを調整してください。

また、Powershell:

$taskName = "daily_perf_log"
$qualifiedName = "Service\{0}" -f $taskName

# retrieve the collection set
$dcss = new-object -com Pla.DataCollectorSetCollection
$dcss.GetDataCollectorSets($null, $qualifiedName)
$dcs = $dcss.Item(0)

# update
# 3 to enable, 1 to disable (http://msdn.Microsoft.com/en-us/library/windows/desktop/aa371811(v=vs.85).aspx)
$dcs.SubdirectoryFormat = 3 <# Prepend computer name #>

# save
# 1 create new / 2 update / other options (http://msdn.Microsoft.com/en-us/library/windows/desktop/aa371873(v=vs.85).aspx)
$dcs.Commit($qualifiedName, $null, 2 <# update only #>)
0
Mitch