Perfmon: оповещения при высокой загрузке CPU

Быстрые ссылки
- Что такое Perfmon?
- Просмотр метрик
- Data Collector Sets
- Настройка оповещений
- Запуск сборщика данных
- Заключение
Что такое Perfmon?
Performance Monitor (Perfmon) — это модуль Microsoft Management Console (MMC), присутствующий в Windows на протяжении многих версий, который помогает отслеживать использование системы и ключевые показатели производительности. Интерфейс по умолчанию показывает несколько областей и реальные показатели в реальном времени.
- Performance Monitor — просмотр метрик в реальном времени
- Data Collector Sets — наборы для сбора данных за выбранный интервал
- Reports — отчёты по собранным данным

Важно: если Performance Monitor не запущен от имени администратора, функциональность будет ограничена: вы можете не увидеть Data Collector Sets и Reports.
Просмотр метрик
При первом запуске Performance Monitor вы увидите движущийся линейный график, который по умолчанию отображает счётчик:
% Processor TimeСам по себе этот график полезен для наблюдения, но не показывает устойчивые нарушения — он даёт скользящее значение. Для детектирования проблем лучше собирать данные и срабатывать на условия, заданные по порогам.

Вы можете добавить дополнительные счётчики через зелёную кнопку плюс. Учтите, что шкалы значений для разных счётчиков могут не совпадать, и объединённый график станет менее информативным.
Data Collector Sets — зачем и как
Реальное время полезно, но для предупредительных оповещений и последующего анализа необходимы накопленные данные. Data Collector Sets позволяют:
- собирать счётчики по расписанию;
- сохранять логи для отчётов;
- запускать действия при срабатывании условий.
Чтобы создать набор: разверните “Data Collector Sets → User Defined”, правой кнопкой мыши выберите New → Data Collector Set.

Назовите набор и выберите создание вручную (manually) — в нашем случае мы будем настраивать всё вручную.

Выберите тип “Performance Counter Alert”. Это позволяет следить за заданным счётчиком и выполнять действия при превышении порога.

Поскольку нас интересует общая загрузка CPU, выберите счётчик Processor → _Total и добавьте его.

В списке вы получите набор всех возможных экземпляров Processor _Total. Нам нужен только один конкретный счётчик:
\Processor(_Total)\% Processor TimeУдалите лишние счётчики, выбрав их по одному и нажав Remove.

Примечание: кнопка “Remove” возвращает выделенный элемент в начало списка, поэтому удаляйте элементы по одному.
После выбора счётчика укажите порог, при превышении которого будет срабатывать оповещение. В примере мы используем порог:
95
Сохраните и закройте Data Collector Set.
Настройка действий при оповещении
После создания набора нужно определить, что произойдёт при срабатывании. В Perfmon есть два способа обработать оповещение:
- Alert Action — встроенные опции (логирование события, запуск другого набора);
- Alert Task — запуск задачи в планировщике задач (Task Scheduler) с передачей параметров.
Выберите ваш набор в User Defined → High CPU Usage, затем в списке DataCollector01 правой кнопкой мыши откройте Properties.

Alert Action: запись в Application event log
Самый простой вариант — на вкладке Alert Action включить “Log an entry in the Application event log”. Также можно настроить запуск другого Data Collector Set для более подробного сбора при инциденте.

Alert Task: полноценное оповещение через планировщик задач
Чтобы получать реальные оповещения (например, отправку письма, запись в отдельный лог или интеграцию с системой оповещений), используйте Alert Task: Data Collector будет запускать заранее созданную задачу в Task Scheduler и передавать параметры.
Нужно выполнить два шага:
- Создать скрипт, который будет обрабатывать аргументы и выполнять действия (лог, отправка, вызов API).
- Создать и зарегистрировать задачу, которая исполняет этот скрипт.
Пример простого логирующего скрипта
Ниже — минимальный PowerShell-скрипт, принимающий аргументы от Alert Task и записывающий строку в файл лога. Сохраните как C:\HighCPUAlert.ps1.
HighCPUAlert.ps1$Date = $args[0]
$Threshold = $args[1]
$Counter = $args[2]
$Value = "[{0}] {1} {2} | {3}" -F $Date, 'High CPU', $Threshold, $Counter
Add-Content -Value $Value -Path 'C:\HighCPUAlert.log'
Объяснение (одной строкой): скрипт формирует текстовую запись и добавляет её в локальный файл лога.
Пример регистрации задачи через PowerShell
Задача будет запускать PowerShell 7 (pwsh.exe). Обратите внимание, что до официального релиза исполняемый файл может называться pwsh-preview.exe.
$Params = @{
"Action" = New-ScheduledTaskAction -Execute "pwsh.exe" -Argument "-NoProfile -File C:\HighCPUAlert.ps1 $(Arg0)"
"Principal" = New-ScheduledTaskPrincipal -UserId "LOCALSERVICE" -LogonType ServiceAccount
"Settings" = New-ScheduledTaskSettingsSet
}
New-ScheduledTask @Params | Register-ScheduledTask 'HighCPUAlert'
В этом примере задача зарегистрирована под служебной учётной записью LOCALSERVICE; при регистрации задачи может потребоваться указать учётную запись с правами администратора.
Примечание: аргументы приходят как строки, поэтому удобно передавать их в кавычках и затем обращаться по индексу $args[0], $args[1].

Конфигурация Alert Task в свойствах Data Collector
Откройте свойства DataCollector01 → Alert Task и укажите имя зарегистрированной задачи, а также аргументы. Сохраните изменения; возможно, потребуется ввести учётные данные администратора для регистрации задачи.
После этого при срабатывании счётчика Perfmon будет вызывать задачу, которая запустит скрипт и выполнит необходимые действия.
Запуск Data Collector и проверка
Правой кнопкой мыши нажмите на набор High CPU Usage → Start. Сбор данных начнётся. При достижении порога в соответствии с интервалом мониторинга планировщик задач будет периодически вызывать зарегистрированную задачу.
Отслеживайте:
- Журналы Application Event Log (если включено логирование);
- Файл C:\HighCPUAlert.log (в примере);
- Task Scheduler — чтобы увидеть запуски задачи и возможные ошибки.
Практическое руководство (Playbook) — быстрый порядок действий
- Откройте Perfmon от имени администратора.
- Создайте User Defined → New → Data Collector Set вручную.
- Выберите Performance Counter Alert и добавьте счётчик \Processor(_Total)\% Processor Time.
- Установите порог (например, 95) и интервал проверки (по умолчанию в Perfmon задаётся период чтения).
- На вкладке Alert Action включите запись в журнал при необходимости.
- Создайте PowerShell-скрипт для обработки оповещений.
- Зарегистрируйте Scheduled Task, который будет вызывать скрипт.
- На вкладке Alert Task укажите задачу и аргументы.
- Стартуйте набор и проверьте результаты в журналах и файлах.
Роль‑ориентированные чеклисты
Администратор системы:
- Запустить Perfmon от имени администратора.
- Создать Data Collector Set и зарегистрировать Scheduled Task.
- Проверить права учётной записи задачи.
Оператор/инженер поддержки:
- Проверить, что логи приходят в C:\HighCPUAlert.log.
- Убедиться, что Task Scheduler запускает задачу при срабатывании.
- Диагностировать причины длительной загрузки CPU.
Разработчик автоматизации:
- Интегрировать скрипт с системой оповещений (API, SMTP, webhook).
- Обеспечить идемпотентность и обработку ошибок в скрипте.
Критерии приёмки
- Срабатывание: при достижении порога заданный Scheduled Task запускается и в лог добавляется запись.
- Надёжность: задача запускается повторно при повторных срабатываниях без ручного вмешательства.
- Безопасность: задача не выполняется от имени учётной записи с избыточными правами.
- Отладка: при отсутствии лога в C:\HighCPUAlert.log в журнале задач есть запись об ошибке и её текст.
Тесты и сценарии приёмки
- Создать искусственную загрузку CPU (например, запуск шумовой задачи) и убедиться, что при длительной загрузке срабатывает запись в логе.
- Убедиться, что при пиковых, но кратковременных скачках (менее интервала опроса) оповещение не срабатывает, если цель — устойчивые нагрузки.
- Проверить поведение при отсутствии прав на запись в файл лога — задача должна зарегистрировать ошибку.
Методология настройки (короткая)
- Наблюдать (Observe) — собирать базовые метрики в реальном времени.
- Измерять (Measure) — настроить Data Collector Set с порогами.
- Реагировать (Respond) — запускать задачи/скрипты при срабатывании.
- Анализировать (Analyze) — просматривать собранные отчёты для корневой причины.
Решение проблем — частые ошибки и их устранение
- “Нет Data Collector Sets”: запустите Perfmon от имени администратора.
- “Задача не запускается”: проверьте, зарегистрирована ли Scheduled Task и учётные данные.
- “Скрипт не пишет в лог”: проверьте разрешения на путь и обработку аргументов.
- “Ложные срабатывания”: увеличьте порог или увеличьте интервал агрегации/проверки.
Когда метод не подходит (ограничения)
- Perfmon пригоден для локального мониторинга и диагностики, но не заменяет полнофункциональные системы мониторинга в централизованной инфраструктуре (SIEM/Prometheus/Datadog) при масштабном мониторинге множества хостов.
- Если требуется распределённая агрегация метрик и долгосрочный анализ на большом количестве серверов, лучше использовать специализированные решения.
Безопасность и приватность
- Логи содержат системные метрики — избегайте записи чувствительных данных в эти файлы.
- Планировщик задач должен работать от аккаунта с минимально необходимыми привилегиями.
- Если вы отправляете данные в внешние системы (email, webhook), убедитесь в шифровании канала и ограничении прав доступа.
Быстрый справочник (cheat sheet)
- Счётчик для общей загрузки CPU: \Processor(_Total)\% Processor Time
- Пример порога: 95 (используйте порог в зависимости от SLA и характера нагрузки)
- Логи: Application event log или собственный файл (C:\HighCPUAlert.log)
- Запуск скрипта: Scheduled Task → pwsh.exe -NoProfile -File C:\HighCPUAlert.ps1
Пример решения для диагностики: последовательность действий при оповещении
- Получено оповещение — проверка C:\HighCPUAlert.log → запись с временной меткой.
- Просмотр запущенных процессов в момент срабатывания (Task Manager или Process Explorer).
- Запуск дополнительного Data Collector Set для трассировки процессов и дисковой активности.
- Сбор дампа для дальнейшего анализа при необходимости.
Пример диаграммы принятия решения
flowchart TD
A[Высокая загрузка CPU] --> B{Непрерывная > интервала?}
B -- Да --> C[Запустить DataCollector: глубокий сбор]
B -- Нет --> D[Игнорировать или мониторить]
C --> E{Процесс известен?}
E -- Да --> F[Записать данные и уведомить владельца приложения]
E -- Нет --> G[Снять дамп, передать в команду расследования]Короткий глоссарий
- Data Collector Set — набор для сбора метрик и событий.
- Performance Counter Alert — тип счётчика, который генерирует оповещения на основе порога.
- Alert Task — задача планировщика, запускаемая при оповещении.
Заключение
Perfmon остаётся мощным встроенным инструментом для локальной диагностики и простых сценариев оповещений. Комбинация Data Collector Sets, Alert Action и Alert Task позволяет гибко настраивать сбор данных и интеграцию с автоматизированными процессами реагирования. Для крупных сред рекомендуем комбинировать Perfmon с централизованными системами мониторинга и логирования.
Резюме
Используя Perfmon и простые PowerShell-скрипты, вы можете быстро настроить локальные оповещения и получить автоматизированный сбор данных для последующего анализа.
Похожие материалы
Ускорить загрузки на PS4 — проверенные способы
Загрузка macOS Internet Recovery без раздела
Отключить Xbox Game Bar в Windows 10 и 11
Веб-интерфейс MidJourney: что нового
Сменить или сбросить пароль Microsoft Outlook