Удобный способ просмотра запросов WMI
Инструментарий управления Windows (WMI) — технология, широко используемая на сервере и клиенте Windows для решения различных задач, в частности для проведения инвентаризации оборудования и программ, определения работающих служб и процессов. Обычно WMI работает без затруднений, но, если таковые возникают, диагностика может оказаться сложной. Например, одна из распространенных проблем WMI — высокая пиковая загрузка процессора при выполнении одного из процессов провайдера (wmiprvse.exe). Процесс провайдера относится к выполнению запросов WMI, а процесс службы WMI (svchost.exe) — к возвращению результатов выполнения запроса WMI создавшему его процессу. Любому администратору, вероятно, приходилось сталкиваться с высокой загрузкой процессора при работе WMI либо с необходимостью просмотра поступающих запросов WMI. Анализируя проблемы загрузки процессора, полезно просматривать выполняемые запросы и определять, откуда они поступили.
К сожалению, в лучшем случае просмотр поступающих запросов WMI — трудоемкий процесс, способный свести на нет попытки администратора установить, какие же запросы WMI выполняются в данной системе. Ниже предлагается способ просмотра поступающих запросов в режиме, максимально приближенном к реальному времени, с определением их источника. Этот способ позволяет быстро проводить диагностику распространенных проблем высокой загрузки процессора без необходимости выполнения сложных шагов отладки, сканирования сотен событий, регистрируемых в журналах, или обращения в группу технической поддержки.
Извлечение журналов трассировки WMIКак описано в статье «Ведение журнала отладки WMI» (tinyurl.com/3a6b7ls), для просмотра журналов трассировки WMI можно включить механизм трассировки в окне Event Viewer. Однако ввиду большого числа регистрируемых событий сложно выделить недавние запросы и определить время их выполнения и источник поступления. Механизм фильтрации, встроенный в меню Event Viewer, не позволяет выводить на экран только запросы WMI.
Запустите из командной стройки программу wevtutil.exe. Эта программа, включенная в Windows Vista и более новые версии, позволяет извлекать информацию из журналов событий, осуществлять экспорт данных, выполнять запросы и задавать параметры для журналов. В частности, с помощью Wevtutil можно устанавливать признак трассировки для журнала событий WMI в локальном и удаленном режиме, обеспечивая вывод данных трассировки в окно Event Viewer.
Ниже приведен синтаксис установки признака трассировки для файла журнала WMIActivity (из окна командной строки с повышенными привилегиями) и сообщение, отображаемое после ввода команды:
Ответное сообщение содержит предупреждение об очистке журнала при включении трассировки (для выключения признака трассировки очистка журнала не требуется). Имеется также параметр /r, позволяющий устанавливать признак трассировки на удаленной системе.
После установки признака трассировки начинается вывод «информационных» событий журнала WMI-Activity. Однако эти данные выводятся с большой степенью детализации, а имеющийся механизм фильтрации не позволяет организовать вывод одних только запросов WMI. Вновь воспользуемся программой wevtutil.exe для просмотра поступающих запросов WMI вручную.
Ниже приведен синтаксис команды просмотра запросов WMI с использованием программы Wevtutil (запускаемой после включения признака трассировки из окна командной строки с повышенными привилегиями).
Параметр qe означает «события запросов из файла журнала»; затем вводится имя файла журнала (Microsoft-Windows-WMIActivity/Trace). Параметр /q: предписывает отфильтровать данные из журнала, оставляя только конкретные события; в этом случае мы запрашиваем «Level 4 or Level 0 AND Event указывая идентификатор события, под которым регистрируются все запросы WMI. Затем к результатам применяем функцию поиска строк (findstr) и выполняем фильтрацию, оставляя только команды execquery.
Пример результата выполнения команды показан на экране 1. Этот результат выдается только для одного запроса — нетрудно представить объем информации для сотни таких запросов! Это огромное количество данных, требующих анализа. Однако можно сменить формат выходных данных с XML на текстовый, внеся небольшое изменение в команду Wevtutil:
Внесенное изменение заключается лишь в добавлении параметра /f: (формат) и указании текстового формата.
Теперь выходной результат, показанный на экране 2, более удобен для восприятия, но все же слишком громоздок для быстрого просмотра поступающих запросов WMI; кроме того, отсутствуют отметки времени поступления запроса.
Автоматизация трассировки событий WMIБыло бы удобно иметь сценарий, выполнение которого можно было задать через расписание и который бы обеспечивал выдачу удобных для восприятия данных с отметкой времени возникновения событий и позволял просматривать самые «свежие» запросы с момента последнего выполнения сценария. Именно эту задачу выполнила группа поддержки Microsoft. Был создан сценарий выдачи поступающих запросов WMI с указанием времени их поступления. В зависимости от используемой версии Windows можно установить, какая система и какой процесс являются инициаторами запроса, в локальном или удаленном режиме. Сценарий WMIActivity.vbs запрашивает события WMI и выводит информацию только о деятельности, связанной с событиями (см. листинг).
На экране 3 показан выходной результат в формате Excel. Имеется несколько столбцов данных, несущих информацию о времени выполнения запроса, о самом запросе, о системе, с которой он поступил (столбец ClientMachine), и о клиентском процессе, инициировавшем запрос (столбец Client Process ID).
Заметим, что в столбцах ClientMachine и ClientProcessID присутствуют данные, характерные только для систем Windows 7 и Windows Server 2008 R2 или более новых версий. В Vista и Windows Server 2008 не включен код регистрации клиента, инициировавшего запрос, или идентификатора клиентского процесса.
При первом выполнении сценария отметка времени помещается непосредственно в реестр в раздел HKLM\Software\WinITPro. При каждом выполнении сценария эта отметка времени проверяется, и извлекаются только более «свежие» записи. Таким образом, выдаются лишь самые новые запросы, что избавляет от необходимости просматривать одну и ту же информацию или проходить через громоздкое меню в стиле Event Viewer.
Преобразуем столбец TimeCreated в привычный формат. Для этого выделим столбец, а затем в окне, открываемом щелчком правой клавишей, выберем «форматирование ячейки», как показано на экране 4. Можно также создать сводную таблицу, анализируя запросы с точки зрения статистики.