У каждого журнала событий Windows есть невидимый предел, о котором вспоминают только в неподходящий момент. Журнал растёт запись за записью, а потом упирается в свой максимальный размер - и вот тут начинается самое интересное. Что произойдёт дальше, целиком зависит от настроек, заданных заранее. Старые события могут начать вытесняться новыми, журнал может остановить запись и закричать о переполнении, а может тихо сохранить себя в архив и продолжить работу. Три разных исхода для одной ситуации, и выбирает между ними администратор.
По умолчанию Windows раздаёт журналам довольно скромные лимиты, и на нагруженной системе их легко исчерпать. Когда журнал переполнен, можно увеличить максимально допустимый размер, но куда разумнее настроить поведение заранее, не дожидаясь сообщения о том, что записывать новые события некуда. Настройка сводится к двум связанным вопросам: какой объём отвести журналу и как он должен вести себя при достижении этого объёма. Разберём оба по очереди.
Из чего складывается поведение журнала при заполнении
У журнала есть три ключевых параметра, которые вместе и определяют его характер. Первый - максимальный размер в байтах, та самая планка, выше которой журнал не растёт. Второй - режим хранения, который отвечает на вопрос, можно ли затирать старые события. Третий - автоматическое резервное копирование, которое решает, сохранять ли заполненный журнал в файл перед тем, как освободить место.
Комбинация второго и третьего параметров и рождает те самые три стратегии заполнения. Если хранение выключено, журнал работает по кольцу: дойдя до предела, он начинает затирать самые старые записи новыми, и запись никогда не останавливается. Для циклического ведения журнала, при котором старые события удаляются по достижении максимального размера, как раз отключают режим хранения. Это поведение по умолчанию для большинства журналов, и оно удобно тем, что система никогда не встаёт из-за переполнения.
Если же хранение включено, а автоматическое копирование выключено, журнал ведёт себя строго: дойдя до предела, он прекращает запись новых событий и держит старые нетронутыми, пока кто-то не очистит его вручную. Такой режим выбирают там, где потеря даже одной записи недопустима, например в журнале безопасности на ответственном сервере. Цена строгости - риск пропустить новые события, если за журналом не следить.
Третий вариант - золотая середина. Включены и хранение, и автоматическое копирование: заполненный журнал сохраняется в файл, после чего освобождается и продолжает писать. Так система не теряет ни старых записей, которые ушли в архив, ни новых, которые продолжают поступать. Это поведение требует места под архивы, но избавляет от выбора между потерей истории и остановкой записи.
Команда wevtutil set-log как способ задать параметры из консоли
Менять настройки журнала удобнее всего утилитой wevtutil в режиме set-log, у которого есть короткий псевдоним sl. Прежде чем что-то менять, полезно посмотреть текущие настройки журнала режимом get-log. Команда покажет имя журнала, путь к файлу, максимальный размер, состояние хранения и копирования.
wevtutil gl System
В выводе среди прочего видны строки максимального размера, хранения и автокопирования - это и есть те параметры, которыми предстоит управлять. Изменение максимального размера задаётся ключом, принимающим значение в байтах. Пример ниже расширяет системный журнал примерно до двух мегабайт.
wevtutil sl System /ms:2097152
Размер всегда указывается в байтах, и это частый источник путаницы. Чтобы получить пятьдесят мегабайт, нужно умножить пятьдесят на 1024 и ещё раз на 1024, что даёт 52428800. Проверить, что изменение вступило в силу, можно повторным запросом настроек с фильтром по нужной строке.
wevtutil gl System | find /I "maxsize"
Если в выводе стоит новое число, значит лимит обновлён. Эта пара команд - задать и проверить - составляет основу любой ручной настройки.
Настройка стратегии заполнения через ключи хранения и копирования
Поведение при заполнении переключается двумя ключами: хранения и автоматического копирования. Чтобы перевести журнал в кольцевой режим с затиранием старых записей, хранение отключают. Пример ниже задаёт это поведение для журнала аналитики и заодно поднимает его размер.
wevtutil sl "Microsoft-Windows-WMI-Activity/Trace" /retention:false /maxsize:153600
Здесь хранение выключено, поэтому журнал будет затирать старые события по достижении предела, а размер поднят примерно до ста пятидесяти килобайт против стандартного значения около одного мегабайта по умолчанию. Чтобы, наоборот, включить режим строгого хранения с автоматическим архивированием, оба ключа выставляют в истину.
wevtutil sl Application /retention:true /autobackup:true /maxsize:20971520
Такая команда заставит журнал приложений при заполнении сохранять себя в файл и затем продолжать запись, удерживая объём около двадцати мегабайт. Заполненные архивы при этом будут накапливаться в системной папке журналов, и за их числом придётся приглядывать, иначе они со временем съедят место на диске.
Массовое применение настроек через конфигурационный файл и политики
Когда одинаковые параметры нужно раздать множеству журналов, проще описать их один раз в конфигурационном файле и применять его командой. Конфигурационный файл - это XML того же формата, что выдаёт запрос настроек журнала. Внутри описывается канал с блоком журналирования, где перечислены хранение, автокопирование и максимальный размер.
<?xml version="1.0" encoding="UTF-8"?>
<channel name="Application" isolation="Application"
xmlns="http://schemas.microsoft.com/win/2004/08/events">
<logging>
<retention>true</retention>
<autoBackup>true</autoBackup>
<maxSize>9000000</maxSize>
</logging>
<publishing>
</publishing>
</channel>
Этот файл включает хранение, включает автоматическое восстановление через копирование и задаёт максимальный размер журнала приложений около девяти мегабайт. Применяется он тем же режимом set-log с ключом конфигурации, что удобно тиражировать на разные машины с одинаковой политикой. Подход через файл ценен предсказуемостью: все настройки лежат в одном месте, их легко прочитать, отредактировать и положить в систему контроля версий рядом с остальными конфигурациями.
В доменной среде раздавать настройки журналов по одной машине нерационально. Здесь работают групповые политики, которые применяют единые параметры сразу ко всем компьютерам в нужном подразделении. По сути политика прописывает те же значения, но централизованно и автоматически при каждом обновлении политик на машинах.
Под капотом максимальный размер журнала хранится в реестре в ветке службы журнала событий. Для каждого журнала там есть свой раздел, а внутри - параметр размера типа DWORD, заданный в байтах. Например, чтобы выставить пятьдесят мегабайт, в соответствующий параметр кладут значение 52428800. После обновления политики на машине новый максимальный размер вступает в силу, что несложно проверить в свойствах журнала.
Практический смысл такой настройки хорошо виден на примере истории подключений. Если нужно хранить историю удалённых подключений к терминальному серверу за продолжительный срок, увеличивают размер соответствующего журнала диспетчера подключений. За счёт большего объёма журналов администратор получает доступ к информации за более длительный промежуток времени, и расследование, опирающееся на события месячной давности, становится возможным.
Как выбрать разумный размер и не уйти в крайности
Соблазн поставить всем журналам гигантский размер на всякий случай велик, но вреден. Слишком большой журнал означает большой файл, который дольше открывается, медленнее фильтруется и занимает место. Слишком маленький теряет историю быстрее, чем она успевает понадобиться. Истина, как обычно, посередине, и зависит она от того, насколько активно журнал пишется и как долго нужны его записи.
Отправная точка - понять скорость заполнения. Если журнал безопасности на сервере распухает невероятными темпами, скажем на несколько гигабайт в день, то увеличение размера лишь отсрочит проблему, а корень её в избыточном аудите. Прежде чем раздувать журнал, стоит проверить, не включена ли лишняя категория аудита вроде отслеживания доступа к объектам или процессов, и отключить ненужное. Тогда журнал станет писаться медленнее, и умеренного размера хватит надолго.
Разумная логика подбора укладывается в несколько последовательных шагов:
- определить, как долго реально нужны записи журнала, например тридцать дней для аудита входов;
- оценить, сколько событий журнал накапливает за сутки в обычном режиме работы;
- прикинуть объём, при котором события нужного срока поместятся целиком с запасом;
- выбрать стратегию заполнения под назначение журнала, кольцевую для шумных и строгую для критичных;
- задать размер и поведение командой или политикой, после чего понаблюдать за реальной скоростью роста;
- скорректировать значение, если журнал переполняется раньше срока или, наоборот, пустует.
Такой маршрут уберегает от обеих крайностей. Журнал получает ровно столько места, сколько ему нужно для своей роли, и ведёт себя при заполнении именно так, как требует его назначение.
Размеры по умолчанию, поведение при смене настроек и контроль результата
Полезно представлять, с каких значений система стартует, чтобы понимать, когда вмешательство действительно нужно. Многие специализированные журналы создаются с очень скромным лимитом порядка одного мегабайта, а классические журналы вроде системного и приложений получают по умолчанию заметно больше, но всё равно конечный объём. На тихой рабочей станции этого хватает с избытком, и трогать настройки незачем. На нагруженном сервере картина меняется радикально.
Особенно быстро переполняется журнал безопасности там, где включён подробный аудит. Каждый вход, каждый доступ к файлу, каждый запуск процесса порождает запись, и поток событий способен исчисляться миллионами в сутки. При стандартном лимите такой журнал прокручивается по кольцу за считанные часы, и события вчерашнего дня в нём попросту не сохраняются. Если при этом расследование опирается на события недельной давности, оно упирается в пустоту - нужных записей уже нет.
Частый вопрос при изменении лимита - не пропадут ли уже накопленные записи. Ответ зависит от направления изменения. Увеличение максимального размера абсолютно безопасно: журнал просто получает больше места и продолжает писать, а всё, что в нём уже есть, остаётся нетронутым. Уменьшение размера ведёт себя иначе: если новый лимит оказывается меньше текущего объёма, лишние старые события будут вытеснены, чтобы содержимое уложилось в заданную планку. Перед уменьшением размера разумно сначала заархивировать журнал, чтобы вытесненные записи не пропали безвозвратно.
Смена режима хранения тоже отражается на поведении не сразу, а при следующем заполнении. Переключение журнала в строгий режим не остановит запись мгновенно - оно вступит в силу, когда журнал в очередной раз дойдёт до предела. Это стоит держать в голове, чтобы не удивляться, почему журнал, только что переведённый в строгий режим, продолжает спокойно затирать старые записи: он просто ещё не успел заполниться после смены настройки.
Любое изменение настройки стоит подтверждать, а не принимать на веру. Запрос get-log с фильтром по нужной строке мгновенно показывает текущее значение, и после каждой правки полезно сверяться с ним. Но настоящая проверка приходит со временем: только понаблюдав за журналом в работе несколько дней, видно, как он заполняется на самом деле и угадан ли размер. Простой способ оценить динамику - периодически снимать сведения о журнале и смотреть на число записей и дату самой старой из них.
wevtutil gli Security
Если самая старая запись датируется лишь вчерашним днём, журнал прокручивается слишком быстро, и его стоит расширить. Если же он хранит события месячной давности и при этом далёк от заполнения, размер избыточен и его можно вернуть к более скромному значению. Такое наблюдение превращает настройку из разового действия в управляемый процесс: администратор не угадывает размер раз и навсегда, а подстраивает его под меняющуюся нагрузку.
Что стоит за правильно настроенным журналом
Настройка размера и поведения журнала кажется мелкой технической деталью, но именно она определяет, окажется ли нужная запись на месте в момент, когда она понадобится. Журнал с неверными настройками подводит дважды: либо теряет историю слишком рано, либо встаёт колом из-за переполнения. И то и другое выясняется в самый неподходящий момент, когда времени на исправление уже нет.
Грамотный администратор настраивает журналы не реактивно, после первого переполнения, а заранее, исходя из роли каждого журнала. Шумным операционным каналам он отдаёт кольцевой режим, чтобы они никогда не останавливали запись. Критичным журналам безопасности назначает строгое хранение с архивированием, чтобы не потерять ни единой записи. И каждому отводит размер, выверенный под реальную скорость роста и нужный срок хранения.
В этом и состоит зрелый подход к журналам: не латать дыры по факту, а спроектировать поведение так, чтобы дыр не возникало. Несколько команд, заданных однажды с умом, избавляют от целого класса проблем, которые иначе всплывали бы снова и снова в самые ответственные моменты работы системы.