Поскольку система Windows Server 2008 Server Core уже на протяжении полугода является общедоступной, у меня была возможность обсудить ее с множеством пользователей. Некоторые из них откровенно не верят, что кто-либо будет пытаться управлять сервером с интерфейсом на основе командной строки. Недавно мне задали вопрос: «Как можно управлять сервером, если нельзя видеть, насколько хорошо он работает?»
Напомню, что диспетчер задач, хотя и является инструментом с графическим интерфейсом, способен работать в условиях чрезвычайно упрощенной графики Server Core (подобно блокноту и редактору реестра). Что же касается отслеживания событий в Server Core, то очевидно, что оснастка монитора событий в консоли управления (MMC) в Server Core не работает. Однако у Server Core (и Windows Vista) есть мощная команда управления и составления запросов к журналу событий под названием Wevtutil (wevtutil.qe), способная извлекать события из любого журнала.
Синтаксис этой команды можно показать на следующем примере:
wevtutil qe system /c:1/rd: true /f: text
Приведенная команда реализует запрос (qe) к журналу событий системы (system), выводит первое событие (/c:1), начиная с самого нового, и работает в обратном направлении (/rd: true означает «в обратном направлении» или «начиная с самого нового события»), отображая данные в виде текста (/f: text), а не в формате XML.
Никому не хочется тратить время на анализ несметного количества записей в журнале событий, поэтому необходимы средства фильтрации, чтобы отделять «зерна от плевел». Для задания фильтров запросов можно добавить параметр с запросом xpath, как показано ниже:
"/q:* [System [(
)]]"
Например, чтобы вывести все периодические контрольные сообщения в журнале событий, несущие информацию о продолжительности срока работоспособности системы, воспользуйтесь командой
wevtutil qe system "/q:* [System [(EventID=6013)]]"/f: text
В эту команду я не включил параметры/c: и /rd:, поскольку предполагалось выводить все события независимо от порядка их поступления. Текст запроса «EventID=6013» я составлял, глядя на огромное количество записей в журнале событий, где я не указал параметр/f: text и поэтому получил множество сообщений в XML-кодировке. Небольшая выборка выглядит следующим образом:
6013 ...4
Сравнение этих фрагментов XML с их текстовой версией сначала показало, что атрибуту XML для кода события соответствовало имя EventID, а код 6013 соответствовал сообщениям о времени работоспособного состояния системы. Отметим атрибут уровня XML: беглое сравнение с текстовой версией записей в журнале событий показало, что уровень 4 означает информацию, 3 — предупреждение, 2 — ошибку, а 1 — сообщение критической важности. Существуют также события с уровнем 0, но в моей практике они встречались только в журналах событий безопасности в качестве записей об успешном выполнении и ошибках аудита.
Для вывода только критически важных событий системного журнала я воспользовался командой
wevtutil qe system "/q:* [System [(Level=1)]]"/f: text
Включая and или or в критерии запроса, можно вывести как критически важные события, так и ошибки:
wevtutil qe system "/q:* [System [(Level=1 or Level=2)]]"/f: text
Да, все это выглядит несколько сложно. Однако существует и более простой способ. Предположим, требуется применить фильтр к журналу безопасности, обеспечивающий вывод только событий с информацией об ошибках и успешном выполнении аудита. Для этого можно войти в любую систему Server 2008 или Vista с полнофункциональным графическим интерфейсом, в графической среде EventViewer щелкнуть правой кнопкой мыши на журнале безопасности, выбрать Filter Current Log и построить нужный запрос с использованием возможностей графического интерфейса. Затем следует щелкнуть на вкладке XML в диалоговом окне Filter Current Log. Это даст результат, подобный приведенному ниже:
Теперь остается скопировать заключенную в скобки часть третьей строки, подключиться к системе Server Core как к удаленному рабочему столу и вставить код в текст команды Wevtutil, получив следующий результат:
wevtutil qe Security "/q:* [System [band (Keywords,13510798882
111488)]]"
Затем, конечно, можно добавить/c:,/f: и другие параметры, но основная работа уже сделана.