【问题标题】:Access Windows Performance Counters in a locale independent way以独立于区域设置的方式访问 Windows 性能计数器
【发布时间】:2012-07-18 09:29:49
【问题描述】:

我有一组混合服务器,一些运行英语 Windows,另一些运行意大利语 Windows。

有没有一种方法可以在不使用依赖于语言环境的字符串的情况下读取性能计数器的值?

我在 Zabbix documentation 上读到应该可以使用像 \2\6 这样的数字格式,但它对我不起作用,在 Zabbix 和 Powershell 中都没有。

我想监控 CPU 利用率 (\Processore(_Total)\% Tempo processore)。

欢迎提出任何建议。

【问题讨论】:

    标签: windows powershell performancecounter zabbix


    【解决方案1】:

    解决方案很简单:唯一的问题是将所有信息放在一起。

    首先,打开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
    ...
    

    如您所见,每个标签下方都有一个数字:即要使用的索引。比如% Processor Time的索引是10

    如果你有一个复合表达式(例如,\Processore(_Total)\% Tempo processore),你必须使用\238(_Total)\6(我使用了意大利标签)。

    在 Zabbix 中,用于监控过去 15 分钟平均 CPU 利用率的表达式是:

    perf_counter[\238(_Total)\6, 900]
    

    我希望已经说完了:如果有不清楚的地方,请发表评论。

    【讨论】:

    • \238(_Total)\6 不适用于 Windows Server 2003。
    • 实际上,我的测试是在 Windows 2008 R2 上进行的。很遗憾,我没有 Windows 2003 实例,因此无法为您提供帮助。抱歉。
    【解决方案2】:

    您没有标记 powershell 或 zabbix,所以我想您不介意如何在 C 中执行此操作的示例:如果这是目标,您可以在 powershell 中使用它。

    通常(正如您所指出的)您可以按索引查询。

    他们在 MSDN 上有一个非常广泛的示例,它实际上是一个功能齐全的程序,包括如何按索引查询。:MSDN:Retrieving Counter Data

    【讨论】:

    • 非常感谢。因为我很愚蠢,我没有标记 zabbix(至少)。我需要找到一个关于如何使用按索引查询的示例。否则我应该分析C++代码来理解......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多