You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Monitor PERF表多语言计数器名称的标准处理方式咨询

Azure Monitor PERF表多语言计数器名称的标准处理方式咨询

嗨,这个问题我之前也碰到过——不同语言版本的Windows系统会生成本地化的性能计数器名称,直接用英文名称过滤肯定会漏抓其他语言服务器的数据。这里给你几个实用的解决方案,你可以根据团队的实际情况选:

  • 优先用计数器ID替代名称(最推荐)
    Windows性能计数器的ObjectId和CounterId是跨语言一致的固定值,不管OS是什么语言,这些ID都不会变。你可以把查询改成基于ID过滤,彻底解决多语言问题。
    举个改写后的查询示例:

    Perf
    | where TimeGenerated > ago(1h)
    // Logical Disk对应的ObjectId是238,跨语言通用
    | where ObjectId == 238
    // % Free Space对应的CounterId是64512
    | where CounterId == 64512
    | where not (InstanceName in~ ("_Total" , "total" )) and not (InstanceName startswith "/snap")
    | summarize arg_max(TimeGenerated, CounterValue) by Computer, InstanceName, _ResourceId
    | project Computer, InstanceName, _ResourceId, CounterValue, TimeGenerated
    

    至于怎么找对应计数器的ID,你可以在一台英文系统的服务器上查PERF表,或者打开Windows性能监视器,找到目标计数器后查看它的属性就能拿到ID。

  • 多语言名称枚举(临时应急用)
    如果暂时没法用ID,也可以把所有可能的本地化名称都加到过滤条件里,比如同时匹配英文和西班牙语的计数器名称:

    Perf
    | where TimeGenerated > ago(1h)
    | where ObjectName in~ ('LogicalDisk', 'Logical Disk', 'Disco lógico') 
    | where CounterName =~ '% Free Space' or CounterName =~ '% de espacio disponible'
    | where not (InstanceName in~ ("_Total" , "total" )) and not (InstanceName startswith "/snap")
    | summarize arg_max(TimeGenerated, CounterValue) by Computer, InstanceName, _ResourceId
    | project Computer, InstanceName, _ResourceId, CounterValue, TimeGenerated
    

    不过这个方法的缺点很明显——如果以后新增了其他语言的服务器,你就得不断更新查询加新名称,长期维护成本高。

  • 统一服务器计数器语言(从根源解决)
    如果团队有权限变更服务器配置,可以把所有服务器的性能计数器语言统一设置为英文。这样你的原始查询就能直接用,不用做任何修改。不过这个需要和运维、业务团队沟通确认,毕竟改OS语言可能影响其他业务场景。

总的来说,用计数器ID的方式是最省心的,一次配置就能覆盖所有语言版本的服务器,不用后续反复调整查询。

备注:内容来源于stack exchange,提问作者JohnLBevan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 11:58:05