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
相关产品推荐
相关产品推荐

