![如何使用 perfmon/logman 设置主(Windows)VM 上的日志记录并写入网络上的另一台机器?](https://linux22.com/image/624128/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20perfmon%2Flogman%20%E8%AE%BE%E7%BD%AE%E4%B8%BB%EF%BC%88Windows%EF%BC%89VM%20%E4%B8%8A%E7%9A%84%E6%97%A5%E5%BF%97%E8%AE%B0%E5%BD%95%E5%B9%B6%E5%86%99%E5%85%A5%E7%BD%91%E7%BB%9C%E4%B8%8A%E7%9A%84%E5%8F%A6%E4%B8%80%E5%8F%B0%E6%9C%BA%E5%99%A8%EF%BC%9F.png)
我知道在一般情况下如何设置日志以写入远程位置 - 只需在创建日志作业时使用完整 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 #>)