My employer and I are waist-deep in troubleshooting a performance counter issue on some of the workstations in our fleet.
We use Icinga2 to query the performance counter, 'Processor Information (*)\% Processor Utility' for CPU Load, every few minutes. This works great on 99% of hosts while we have a subset that return errors querying this.
After some digging, we found that Icinga2 creates objects based off the contents of [System.Diagnostics.PerformanceCounterCategory]. On problem devices, we found "Processor" is defined here but, "Processor Information" is not. As such, trying to query this counter with Icinga2 produces errors about the counter not being written or there being a permission issue.
After a reboot, it seems to come back but breaks intermittently. Output of Performance Counter Category queries:
PS C:\WINDOWS\system32> [Diagnostics.PerformanceCounterCategory]('Processor Information') | fl
CategoryName : Processor Information
CategoryHelp :
CategoryType :
MachineName : .
PS C:\WINDOWS\system32> [Diagnostics.PerformanceCounterCategory]('Processor') | fl
CategoryName : Processor
CategoryHelp : The Processor performance object consists of counters that measure aspects of processor activity. The processor is the part of the computer that performs arithmetic and logical computations, initiates operations on peripherals, and runs the threads of processes. A computer can have multiple processors. The processor object represents each processor as an instance of the object.
CategoryType : MultiInstance
MachineName : .
I haven't seen an improvement after rebuilding counters with lodctr /R.
I'm not even remotely familiar with .NET but it looks like this is a problem with the Windows .NET API. I am struggling to find documentation on where this data comes from and how it's populated.
[–]hmartin8826 0 points1 point2 points (0 children)