В Windows Server 2016 есть не особенно известная функция «Сбор данных о настройках и загрузочных событиях». Она позволяет удаленно собирать информацию о событиях, произошедших в процессе загрузки системы. Такая возможность особенно полезна при поиске «плавающих» проблем во время загрузки ОС.
В статье я расскажу, как можно удобно собирать эти недостающие сведения.
Ниже приводятся типы событий, информацию о которых можно узнать с помощью функции «Сбор данных о настройках и загрузочных событиях»:
- Загрузка модулей ядра и драйверов.
- Перечисление устройств и инициализация их драйверов.
- Верификация и установка файловых систем.
- Запуск исполняемых файлов.
- Запуск и завершение обновлений системы.
После сбора всех необходимых данных о событиях на сервере-сборщике для их анализа можно использовать хорошо знакомые инструменты – Event Viewer, Wevutil или PowerShell.
Далее мы рассмотрим, как настроить сервер и удаленные узлы для сбора данных.
Поддерживаемые ОС
Роль сборщика может выполнять исключительно Windows Server 2016 – это может быть либо сервер с возможностями рабочего стола, либо Server Core.
Ниже приведена таблица с интернет-ресурса TechNet, в которой показаны поддерживаемые виртуализованные типы ОС для сборщиков и целевых компьютеров:
Узел виртуализации | Виртуальная машина-сборщик | Целевая виртуальная машина |
Windows 8.1 | да | да |
Windows 10 | да | да |
Windows Server 2016 | да | да |
Windows Server 2012 R2 | да | нет |
На серверы, с которых вы хотите собирать данные, должна быть установлена или Windows Server 2016, или Windows 10. Кроме того, в качестве целевого узла может выступать компьютер с Nano Server. Также можно собирать данные из окон системы Windows Server 2016, даже если они работают как виртуальная машина на компьютерах с Windows Server 2012 R2.
Конфигурация узла сборщика
Для получения и отображения ETL-событий с целевых компьютеров необходимо настроить узел сборщика. Первое – необходимо подключить службу сбора событий, используя один из нижеуказанных методов.
При помощи DISM:
dism /online /enable-feature /featurename:SetupAndBootEventCollection
Командой PowerShell:
Get-WindowFeature -Name *boot*
Install-Windows -Name Setup-and-Boot-Event-Collection
Также можно установить этот компонент с помощью Server Manager GUI:
Установка службы с помощью диспетчера сервера.
После установки службы сбора событий вы получите доступ к новой службе – Boot Event Collector, запущенной под учетной записью Network Service.
Свойства Boot Event Collector.
Существует также инструмент командной строки bevtcol.exe, который можно запустить с некоторыми полезными параметрами. Он поможет протестировать ваши настройки перед установкой полного сервиса.
Параметры bevtcol.exe.
Например, можно запустить bevtcol.exe – config NewConfig.xml – checkOnly только для проверки правильности файла конфигурации. И потом выйти без запуска самого процесса.
Затем вам нужно проверить, были ли созданы файлы конфигурации по умолчанию на узле сборщика – это поможет вам создать свой первый файл конфигурации компьютера-сборщика.
В папке C:\ProgramData\Microsoft\BootEventCollector\Config, вы увидите три XML файла конфигурации, созданные сразу после установки сервиса.
Файлы конфигурации XML.
Active.xm содержит аналогичную Empty.xml конфигурацию. Каждая новая конфигурация должна быть сохранена в этом файле:
- Empty.xml – содержит минимально необходимые элементы конфигурации, с установленными по умолчанию значениями;
- Example.xml – содержит полезные примеры конфигураций.
*XML-файл с пример*ом конфигурации.
Если взглянуть на структуру папки С:\ProgramData\Microsoft\BootEventCollector, можно увидеть, что разные папки созданы для разных целей:
- ETL – это каталог для хранения собранных ETL-файлов;
- Logs, как следует из названия, хранят log-файлы для службы сбора.
ETL and log file folders.
Теперь мы можем создать наш первый файл конфигурации. Создайте новый XML-файл в каталоге %SystemDrive%\ProgramData\Microsoft\BootEventCollector\Config и скопируйте содержимое конфигурации, указанной ниже, в .xml-файл.
<collector configVersionMajor="1" statuslog="c:\ProgramData\Microsoft\BootEventCollector\Logs\statuslog.xml">
<common>
<collectorport value="50000"/>
<forwarder type="etl">
<set name="file" value="c:\ProgramData\Microsoft\BootEventCollector\Etl\{computer}\{computer}_{#3}.etl"/>
<set name="size" value="10mb"/>
<set name="nfiles" value="10"/>
<set name="toxml" value="none"/>
</forwarder>
<target>
<ipv4 value="192.168.1.171"/>
<key value="6.7.8.9"/>
<computer value="Server01"/>
</target> <target>
<mac value="00:15:5D:60:3D:04"/>
<key value="1.2.3.4"/>
<computer value="Server02"/>
</target>
</common>
</collector>
В файле конфигурации есть несколько важных моментов.
Во-первых, Collector – в этом узле мы указали версию файла конфигурации и имя log-файла.
Во-вторых, collectorport – указывает номер порта для сбора входящих событий. Нам также необходимо настроить один и тот же номер порта на целевых компьютерах.
В третьих, forwarder – здесь мы указываем характеристики ETL-файлов. Эти характеристики могут быть следующими:
1. File определяет шаблон имени файла. {# 3} – это трехзначный индекс файла при обращении, такой как 001, 002 и т.д. {Computer} используется для обозначения имени компьютера. Таким образом, в нашем примере файлы будут собраны в папке Etl\COMPUTERNAME\ с именем COMPUTERNAME_00x.
2. Size определяет максимальный размер ETL-файла.
3. Nfiles определяет количество созданных ETL-файлов в обращении. Каждый новый файл создается, как только размер предыдущего достигает ограничения, определенного параметром Size.
4. ToXML — опциональный параметр, определяющий полезную нагрузку, с которой ETW-события во время пересылки преобразуются в XML. None — это значение, установленное по умолчанию. Оно всегда пересылает события в двоичном формате по мере их получения. Если вы установите значение «ALL», полезная нагрузка будет постоянно преобразовываться в XML.
Этот параметр на самом деле является своего рода защитой, поскольку события ETW были разработаны для их интерпретации компьютерами, на которых они и были сгенерированы.
Но как только вы хотите переместить события на другой компьютер, может возникнуть какое-либо несоответствие. Преобразование в формат XML делает события доступными для более широкого спектра целевых узлов. Единственным недостатком является то, что преобразование в XML также нагружает узел-сборщик.
В четвертых, target – здесь можно указать настройки целевого узла. Например, IP-адрес, MAC-адрес или GUID, чтобы настроить компьютеры для приема подключений. Также можно указать anyAllowed, чтобы принимать все подключения.
Вы можете указать несколько целевых компьютеров, добавив дополнительные target-узлы:
- в описанном выше случае, указаны два целевых компьютера: один с IP-адресом и один с MAC-адресом;
- Key – это ключи шифрования, которые мы собираемся получить позже, при настройке целевых компьютеров;
- Computer value – это имя целевого компьютера, который должен быть занесен в ETW-записи, когда они преобразуются в XML.
После того, как вы закончите с файлом конфигурации, сохраните его и настройте целевой узел.
Настройка целевого компьютера
Чтобы настроить целевые компьютеры для отправки ETW-событий, необходимо активировать передачу событий. Вы можете активировать ее локально с помощью команды bcdedit или удаленно с помощью команды PowerShell Remote и Enable-SbecBcd.
В моей лаборатории у меня есть доступ к моим целевым компьютерам, поэтому я буду использовать bcdedit:
bcdedit /event yes
bcdedit /eventsettings net hostip:192.168.1.172 port:50000 key:6.7.8.9
Где:
- HostIP – это имя компьютера-коллектора, которое мы конфигурировали ранее;
- Port – это номер порта, который мы указали в файле конфигурации;
- Key – это ключ шифрования, который нам нужно указать в файле конфигурации.
Активация передачи событий через команду bcdedit.
Я настроил ключи шифрования. Вы можете проверить конфигурацию с помощью следующей команды bcdedit:
Проверка конфигурации события BCD.
Теперь я могу вернуться к моему серверу и применить новый файл конфигурации, который я создал ранее, с указанными ключами. Set-SbecActiveConfig cmdlet нам в этом поможет:
$result = (Get-Content .\myconfig.xml | Set-SbecActiveConfig); $result
Применение файла конфигурации на компьютере-сборщике.
(Get-SbecActiveConfig).content
Получение принятой конфигурации.
И наконец последний шаг – настройка целевых компьютеров для отправки ETW-событий.
На сервере выполните следующую команду:
Enable-SbecAutoLogger -ComputerName <targetcomputer> -Credential (Get-Credential)
Настройка целевого компьютера для отправки ETW-событий.
На сервере файл конфигурации active.xml обновился с моими настройками.
Обновленный файл active.xml.
Также был создан новый log-статус:
Обновленный log-файл.
Кроме того, создается новый ETL-файл, который уже может собирать информацию о настройках и загрузочных событиях с целевого компьютера (Server01). После перезапуска одного из ваших серверов, в нем появится информация:
Собранные ETL-файлы.
Теперь можно открыть собранные ETL-файлы в инструменте просмотра событий Windows:
События, собранные после первой перезагрузки целевого компьютера.
Не забудьте перезагрузить целевой сервер для применения настроек и получения первого набора событий.