Недавно несколько клиентов Microsoft обратились в службу поддержки корпорации с просьбой помочь в диагностике проблем, вызывающих снижение производительности в процессе загрузки и регистрации пользователей в настольных системах или ноутбуках. Затруднения, возникающие при загрузке и запуске систем, легко устраняются с помощью набора инструментов Windows Performance Toolkit (xbootmgr.exe). А что же делать администраторам предприятий, где эксплуатируются тысячи настольных систем? Они должны иметь возможность идентифицировать неисправные системы еще до того, как пользователь сообщит о них в службу поддержки. При этом показатели времени запуска настольных систем необходимо отслеживать в динамике по времени и по всему предприятию. Кроме того, требуется возможность получения показателей времени загрузки (аналогичных тем, что отображаются программой xbootmgr.exe) для каждой системы. Далее в статье я расскажу о том, как можно решить эти задачи с помощью журнала событий, новой оснастки Windows 7 Event Viewer и утилиты Wevtutil.

Новый журнал событий — подспорье в диагностике

Начиная с версии Windows Vista система Windows включает в себя новую категорию журналов событий — журналы приложений и журналы служб. Базовая инфраструктура регистрации событий теперь сообразуется со схемой XML. Пользователь может без труда получить XML-данные по любому событию. Интерфейс нового журнала событий позволяет создавать на базе XML запросы к журналам событий. Оснастка Event Viewer дает возможность обращаться к новым возможностям XML посредством простого в использовании графического интерфейса.

Один из журналов новой категории — журнал Diagnostics-Performance/Operational log. В нем отражаются события, фиксирующие показатели производительности, подобные тем, что отображаются программой xbootmgr.exe. В сущности, записываемые данные генерируются теми же механизмами, которые использует утилита Xbootmgr. События с идентификаторами от 100 до 110 фиксируют статистику производительности в ходе загрузки и запуска.

Работа с Event Viewer в системе Windows 7

Реализованная в Windows 7 новая оснастка Event Viewer дает возможность применять более мощные фильтры. Новый пользовательский интерфейс позволяет задавать диапазоны событий. Под его прикрытием программа формирует запрос XPath с целью фильтрации событий на основе заданных критериев. В нашем примере мы будем отфильтровывать события с идентификаторами от 100 до 110 включительно. Событие с идентификатором 100 интересует нас потому, что дает возможность получить данные по скорости загрузки. На экране 1 отображено XML-представление для события 100.

Экран 1. Представление события 100 в окне оснастки Event Viewer

XML-представление данного события содержит массу любопытной информации. Значение BootTime представляет число миллисекунд, прошедших со времени загрузки системы до того момента, как пользователь зарегистрировался в ней и система была в состоянии 80-процентного бездействия на протяжении 10 секунд. Другие значения времени, содержащиеся в XML-представлении, указывают на время, затрачиваемое на выполнение различных стадий упомянутого процесса загрузки. Более подробные сведения о стадиях процесса загрузки можно найти в руководстве Windows On/Off Transition Performance Analysis (www.microsoft.com/whdc/system/sysperf/On-Off_Transition.mspx).

Другие события загрузки фиксируют информацию о конкретных ситуациях, вызывающих задержки при выполнении последовательности операций загрузка/запуск. Важно только определиться с тем, к какому экземпляру загрузки относятся эти сообщения. Вот здесь-то и может пригодиться параметр ActivityID. На экране 1 в разделе данных XML вы увидите строку:

 

Именно такой идентификатор ActivityID имеют все события, относящиеся к данному экземпляру загрузки в этой записи Event 100. Выполнив следующие действия, мы сможете использовать указанную информацию для создания более сложного фильтра:

1. На панели Actions оснастки Event Viewer щелкните на элементе Filter Current Log.
2. На вкладке XML выставьте флажок Edit query manually. Когда программа предложит продолжить процедуру, ответьте Yes.
3. В поле запроса введите приведенный ниже текст на языке XML.

 
    
       
       
 

4. Нажмите ОК.

По завершении редактирования запроса программа отобразит три события для данного идентификатора ActivityID. Теперь мы можем исследовать эти события, чтобы понять, какие проблемы способствовали возникновению задержек в процессе загрузки/запуска.

Получение данных с помощью Wevtutil

Пока что мы рассматривали только один экземпляр загрузки. А как получать данные для всех экземпляров загрузки? Для этого используется Wevtutil, реализованное в Windows инструментальное средство командной строки, предназначенное для формирования запросов к журналам событий. Следующий пример показывает, как из журнала событий системы извлекаются все записи Event ID 100:

wevtutil qe Microsoft-Windows-
   Diagnostics-Performance/
   Operational/rd: true/f: xml
   /q:"* [System [(EventID = 100)]]"
   /e: Events > boot.xml 

При выполнении данного фрагмента кода формируется файл данных XML, содержащий все экземпляры события «быстродействие загрузки» для той или иной системы. С помощью каждого идентификатора ActivityID вы сможете формировать запросы по всем другим подобным событиям. Так, следующий запрос извлекает те же три записи событий, отображаемые после дополнительной фильтрации запроса:

wevtutil qe Microsoft-Windows-
   Diagnostics-Performance/ 
   Operational/rd: true/f: xml 
   /q:"* [System [(Correlation [@ 
   ActivityID='{00000001-0000-0000-
   1020-5CA87BB1CA01}'])]]"/e: Events > 
   bootrelated.xml 

Wevtutil.exe предусматривает использование большого числа параметров. Чтобы увидеть весь список открывающихся возможностей, запустите утилиту без указания каких-либо параметров. Дополнительную информацию можно найти в статье MSDN «Event Queries and Event XML», опубликованной в Интернете по адресу msdn.microsoft.com/en-us/library/bb399427.aspx. Более подробные сведения, необходимые для изучения набора правил XPath с целью формирования запросов к событиям, приведены в документе XPath Syntax, опубликованном по адресу go.microsoft.com/fwlink/?LinkId=94637, а также в примерах XPath Examples по адресу microsoft.com/fwlink/?LinkId=94638.

Подведем итоги

После того как данные преобразованы в формат XML, получение наиболее интересных частных значений не составляет труда. На экране 2 представлены некоторые данные, полученные мною с одной из систем. В данном примере я преобразовал значения времени в секунды. При исследовании изменений в рабочих характеристиках различия в числе приложений, которые стартуют в момент загрузки, могут быть существенными. Располагая подобными данными за прошлый период, вы можете приступать к анализу трендов. Так, данная система была создана 13 января 2010 года. Операции по установке приложений и внесению изменений в конфигурацию продолжались еще пару дней. К 21 января 2010 года настройка системы была завершена. После этого значение BootTime составляло в среднем порядка 124 секунд. Однако стоит отметить, что 4 февраля, а также 9 февраля 2010 года на загрузку системы было затрачено намного больше времени.

Экран 2. Образец данных, полученных с помощью утилиты?Wevtutil

Что из этого следует

Итак, мы располагаем механизмом для автоматического извлечения данных о событиях в формате XML, и перед нами открывается возможность собирать такие данные периодически с нескольких компьютеров, а также хранить полученные результаты в базе данных. С помощью простых методов подготовки отчетов мы можем с легкостью выполнять анализ трендов. Для создания полного решения уровня предприятия потребуется подготовка дополнительного кода и средств управления данными, но это задача несложная. Именно так и поступили в организации, которая является одним из основных моих клиентов.

С помощью написанной мною программы на языке VBScript сотрудники этой компании сводят информацию о событиях в базу данных SQL Server. Они использовали эти данные с целью получения исходной статистики для формирования образов своих настольных систем. Они могут манипулировать данной информацией на основе таких критериев, как аппаратные компоненты (например, память, процессор, модель) и настройки программного обеспечения. С помощью службы отчетов SQL Server специалисты этой организации создали представление «панель датчиков», где отображается состояние работоспособности всех настольных систем предприятия. На основе отдельных отчетов они могут сопоставлять базовый уровень быстродействия с новыми данными, полученными после развертывания новых групповых политик и средств безопасности или после обновления аппаратных компонентов. Кроме того, они используют эти данные для проактивного обнаружения систем, время загрузки которых больше среднестатистического. Упомянутые сведения позволяют сотрудникам ИТ-подразделения браться за устранение неполадок еще до того, как пользователи обращаются в службу поддержки. В результате время решения проблем сокращается, и пользователи могут спокойно заниматься своим делом.

Шон Уилер (seanw@microsoft.com) — старший инженер по эксплуатации подразделения Microsoft Premier Support. Специализируется на написании сценариев, отладке кода и решении проблем, связанных с производительностью систем