以地域无关的方式访问Windows性能计数器

3
我有一组混合的服务器,其中一些运行英语版Windows,另一些运行意大利语版Windows。
是否有一种方法可以在不使用依赖于区域设置的字符串的情况下读取性能计数器的值?
我在 Zabbix文档上看到应该可以使用数字格式,如\2\6,但对我来说无效,无论是在Zabbix还是Powershell中都是如此。
我想监视CPU利用率(\Processore(_Total)\% Tempo processore)。
欢迎任何建议。
2个回答

3
解决方案很简单:唯一的问题是将所有信息整合在一起。
首先,打开regedit并转到以下键:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib

你会发现条目以三个数字命名(例如009、010等)。这三个数字代表着语言ID:009代表英语,010代表意大利语等等。
在每个条目中,都有一个名为Counter的键。打开它(双击),把你所选语言的内容复制到文本编辑器中。你会得到以下类似的内容:
1
1847
2
System
4
Memory
6
% Processor Time
10
File Read Operations/sec
12
File Write Operations/sec
14
File Control Operations/sec
16
...

正如您所看到的,每个标签下面都有一个数字: 这是要使用的索引。例如,% 处理器时间 的索引是 10
如果您有一个复合表达式 (例如,\Processore(_Total)\% Tempo processore),您必须使用 \238(_Total)\6 (我使用了意大利语标签)。
在 Zabbix 中,用于监控最近 15 分钟内平均 CPU 利用率的表达式是:
perf_counter[\238(_Total)\6, 900]

我希望我已经说得很清楚了:如果有什么不清楚的地方,请留下评论。

\238(_Total)\6 在 Windows Server 2003 上无法工作。 - plaidshirt
实际上,我的测试是在Windows 2008 R2上执行的。很遗憾,我无法帮助您,因为我没有Windows 2003的实例。抱歉。 - baronKarza

1
您没有标记PowerShell或Zabbix,所以我猜您不介意提供一个在C中执行此操作的示例:如果这是目标,则可以从PowerShell中使用它。
通常情况下(正如您所指出的),您可以按索引查询。
他们在MSDN上有一个非常详细的示例,实际上是一个包括如何按索引查询的全功能程序: MSDN:检索计数器数据

1
非常感谢。因为我太蠢了,没有标记Zabbix(至少没有)。我需要找到一个使用按索引查询的示例。否则我应该分析C ++代码来理解... - baronKarza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接