While reviewing the Sitecore logs I'm seeing the following:
ManagedPoolThread #13 15:25:29 INFO Trace: Warning: Counter 'Sitecore.Caching\Cache Clearings / sec' does not exist on this server. Using temporary internal counter instead. ManagedPoolThread #2 15:25:29 INFO Trace: Warning: Counter 'Sitecore.Caching\Cache Hits / sec' does not exist on this server. Using temporary internal counter instead. ManagedPoolThread #3 15:25:29 INFO Trace: Warning: Counter 'Sitecore.Caching\Cache Misses / sec' does not exist on this server. Using temporary internal counter instead. [...] ManagedPoolThread #12 15:25:38 INFO Trace: Warning: Counter 'Sitecore.Security\Access Denied / sec' does not exist on this server. Using temporary internal counter instead. ManagedPoolThread #12 15:25:38 INFO Trace: Warning: Counter 'Sitecore.Security\Access Granted / sec' does not exist on this server. Using temporary internal counter instead. ManagedPoolThread #12 15:25:38 INFO Trace: Warning: Counter 'Sitecore.Security\Access Resolved / sec' does not exist on this server. Using temporary internal counter instead. ManagedPoolThread #12 15:25:38 INFO Trace: Warning: Counter 'Sitecore.Security\Modify Requests / sec' does not exist on this server. Using temporary internal counter instead. ManagedPoolThread #12 15:25:38 INFO Trace: Warning: Counter 'Sitecore.Security\Programmatic Disabling / sec' does not exist on this server. Using temporary internal counter instead. [...]
The application pool user is within the Performance Log Users group, so that doesn't seem to be the issue.
It appears that there is information on how to install performance counters manually for Sitecore 7.5+, but looking at the files it doesn't appear the new Sitecore 8/9 counters are present. (These instances were all upgraded from 7.x and lower.)
What is the best way to create the missing performance counters?