Как я уже писал ранее, не так давно начал пользоваться Server Manager для контроля состояния серверов организации. Одними из полезнейших фич Server Manager являются уведомления о достигнутом пороге производительности. Исходящая именно от этой фичи ошибка Cannot get performance counter data, в течение первых нескольких месяцев использования постоянно мозолила глаза и отображалась напротив одного из серверов. Не мог Server Manager получить данные о производительности с сервера.
Однажды дошли у меня руки до злополучного сервера. Речь пойдёт о сервере под управлением Windows Server 2008 SP2. Опишу по порядку как действовал я. Лишние шаги, конечно, опущу.
1. Проверить Server Manager Performance Monitor. Оказывается Server Manager создает пользовательский Data Collector Set, который запускается при нажатии пункта Start perfomance counter в контекстном меню сервера в окне Server Manager.
На скриншоте видно, что монитор запущен. Более того, по указанному в правой части окна в колонке Output пути находился файл, который читался и был в правильном формате.
2. Проверить журнал Server Manager. Необходмый журнал находится в консоли Event Viewer -> Application and Service Logs -> Microsoft -> Windows -> ServerManager-ManagementProvider -> Operational. Тут были обнаружены две ошибки, которые возникали в момент, когда Server Manager подтягивал данные с серверов. Первая ошибка: Failed to get the performance data with error code PDH_LOG_TYPE_NOT_FOUND. Error: 0xc0000bcb, Qfe Check: false, вторая: Get counter samples in time range task generated an error (0x5).
Первая ошибка не даёт никакой полезной информации, в то время как вторая явно указывает на нехватку прав. Я сравнил разрешения ntfs, установленные на файл, в котором хранятся данные мониторинга производительности (находится в папке C:\PerfLogs\Admin\ServerManager), с разрешениями на идентичный файл на сервере с той же операционнной системой, но с корректно работающим монитором производительности. Разрешения были идентичными.
3. И тут я решил использовать Procmon для проверки к этому ли файлу и у какой учётки нет доступа. Запустил Procmon, настроил фильтр, чтоб отображались только события обращения к файлу в папке C:\PerfLogs\Admin\ServerManager.
Как видно на скриншоте, всё оказалось достаточно предсказуемо учётке Network Service не хватало прав на файл с данными мониторинга производительности.
В итоге, необходимо просто дать разрешения учётной записи network service на папку C:\PerfLogs\Admin\ServerManager и заменить все права дочерним элементам внутри этой папки. Единственная загадка для меня – это почему идентичные права на разных серверах не гарантируют идентичность работы Performance Monitor.