Как я могу использовать perfmon/logman, чтобы настроить ведение журнала на главной (Windows) виртуальной машине, запись на другой компьютер в сети?

Я знаю, как настроить ведение журнала для записи в удаленном месте в общем случае - просто укажите выходное имя файла, используя полный путь UNC (например, \\HOST-PC\directory\logoutput.etl) при создании задания журнала. Однако возникает проблема, когда новые виртуальные машины создаются из главной виртуальной машины, для которой включено ведение журналов: каждая виртуальная машина будет записывать журналы в один и тот же файл в сети. Мне нужно найти способ, чтобы каждая новая виртуальная машина автоматически записывала в удаленный файл, уникальный для нее.

Я пытался использовать переменную среды%ComputerName% в пути UNC при настройке журнала с помощью logman.exe (например, \host\directory\%ComputerName%\log.etl), надеясь, что каждая виртуальная машина автоматически расширит это, включив в нее свой уникальное имя, но это не работает - вы просто получаете папку с именем "%ComputerName%" без расширения переменной. Это несмотря на тот факт, что если вы используете, например,%SystemRoot%, это действительно расширяется правильно (хотя, конечно, это создаст неверный путь в этом случае). Я не уверен, что вызывает расширение некоторых переменных, а не других.

Есть идеи получше?

1 ответ

Решение

Я не понимаю, как это можно сделать изначально с logman, но через пользовательский интерфейс и интерфейс COM можно настроить формат подкаталога, включив в него имя компьютера в качестве префикса.

См. 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 #>)
Другие вопросы по тегам