Azure Log Analytics: Finding CPUs with perf counters
Today I saw a question on how find the count of CPUs that a server has, maybe you need this for licensing or maybe just for inventory purposes. I remember looking at this before…
The easiest way I’ve found (unless you know different) was to convert a syntax I used in the old query language to ALA v2.
You may need to add "Processor(*)\% Processor" to your Windows Performance Counter list in [Advanced Settings]
This counter gives you the _Total and info for each CPU. So this line will find all Processor data:
| where ObjectName == "Processor" and CounterName == "% Processor Time"
However to exclude _Total, I added this syntax to ignorethe total info, i.e. !=”_Total” giving me the full line:
| where ObjectName == "Processor" and CounterName == "% Processor Time" and InstanceName!="_Total"
This can give you a report like this:
I liked the extra detail of showing the CPUs in a list, for this once again I used makeset and sort to get the data in order (however I need to look at a better method as above 10CPUs the order is wrong). So I ended up with:
// needs perf counter "Processor(*)\% Processor"
Perf
| where TimeGenerated >= ago(1h)
| where ObjectName == "Processor" and CounterName == "% Processor Time" and InstanceName!="_Total"
| sort by InstanceName asc nulls first
| summarize makeset(InstanceName), dcount(InstanceName) by Computer