如何使用 perfmon/logman 设置主(Windows)VM 上的日志记录并写入网络上的另一台机器?

如何使用 perfmon/logman 设置主(Windows)VM 上的日志记录并写入网络上的另一台机器?

我知道在一般情况下如何设置日志以写入远程位置 - 只需在创建日志作业时使用完整 UNC 路径(例如 \\HOST-PC\directory\logoutput.etl)指定输出文件名即可。但是,当从已启用日志记录的主 VM 创建新虚拟机时会出现一个问题:每个 VM 都会将日志写入网络上完全相同的文件。我需要找到一种方法,让每个新 VM 自动写入其唯一的远程文件。

在使用 logman.exe 设置日志时,我尝试在 UNC 路径中使用 %ComputerName% 环境变量(例如 \host\directory\%ComputerName%\log.etl),希望每个 VM 都能自动扩展它以包含其唯一名称,但这并不奏效 - 您只会得到一个名为“%ComputerName%”的文件夹,而变量不会被扩展。尽管如果您使用例如 %SystemRoot%,它确实会正确扩展(当然,在这种情况下这会创建一个无效路径)。我不确定是什么原因导致某些变量被扩展而其他变量没有被扩展。

还有其他更好的想法吗?

答案1

我不知道如何使用本机完成它logman,但通过 UI 和 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 #>)

相关内容