У каждого журнала событий 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. После обновления политики на машине новый максимальный размер вступает в силу, что несложно проверить в свойствах журнала.

Практический смысл такой настройки хорошо виден на примере истории подключений. Если нужно хранить историю удалённых подключений к терминальному серверу за продолжительный срок, увеличивают размер соответствующего журнала диспетчера подключений. За счёт большего объёма журналов администратор получает доступ к информации за более длительный промежуток времени, и расследование, опирающееся на события месячной давности, становится возможным.

Как выбрать разумный размер и не уйти в крайности

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

Отправная точка - понять скорость заполнения. Если журнал безопасности на сервере распухает невероятными темпами, скажем на несколько гигабайт в день, то увеличение размера лишь отсрочит проблему, а корень её в избыточном аудите. Прежде чем раздувать журнал, стоит проверить, не включена ли лишняя категория аудита вроде отслеживания доступа к объектам или процессов, и отключить ненужное. Тогда журнал станет писаться медленнее, и умеренного размера хватит надолго.

Разумная логика подбора укладывается в несколько последовательных шагов:

  1. определить, как долго реально нужны записи журнала, например тридцать дней для аудита входов;
  2. оценить, сколько событий журнал накапливает за сутки в обычном режиме работы;
  3. прикинуть объём, при котором события нужного срока поместятся целиком с запасом;
  4. выбрать стратегию заполнения под назначение журнала, кольцевую для шумных и строгую для критичных;
  5. задать размер и поведение командой или политикой, после чего понаблюдать за реальной скоростью роста;
  6. скорректировать значение, если журнал переполняется раньше срока или, наоборот, пустует.

Такой маршрут уберегает от обеих крайностей. Журнал получает ровно столько места, сколько ему нужно для своей роли, и ведёт себя при заполнении именно так, как требует его назначение.

Размеры по умолчанию, поведение при смене настроек и контроль результата

Полезно представлять, с каких значений система стартует, чтобы понимать, когда вмешательство действительно нужно. Многие специализированные журналы создаются с очень скромным лимитом порядка одного мегабайта, а классические журналы вроде системного и приложений получают по умолчанию заметно больше, но всё равно конечный объём. На тихой рабочей станции этого хватает с избытком, и трогать настройки незачем. На нагруженном сервере картина меняется радикально.

Особенно быстро переполняется журнал безопасности там, где включён подробный аудит. Каждый вход, каждый доступ к файлу, каждый запуск процесса порождает запись, и поток событий способен исчисляться миллионами в сутки. При стандартном лимите такой журнал прокручивается по кольцу за считанные часы, и события вчерашнего дня в нём попросту не сохраняются. Если при этом расследование опирается на события недельной давности, оно упирается в пустоту - нужных записей уже нет.

Частый вопрос при изменении лимита - не пропадут ли уже накопленные записи. Ответ зависит от направления изменения. Увеличение максимального размера абсолютно безопасно: журнал просто получает больше места и продолжает писать, а всё, что в нём уже есть, остаётся нетронутым. Уменьшение размера ведёт себя иначе: если новый лимит оказывается меньше текущего объёма, лишние старые события будут вытеснены, чтобы содержимое уложилось в заданную планку. Перед уменьшением размера разумно сначала заархивировать журнал, чтобы вытесненные записи не пропали безвозвратно.

Смена режима хранения тоже отражается на поведении не сразу, а при следующем заполнении. Переключение журнала в строгий режим не остановит запись мгновенно - оно вступит в силу, когда журнал в очередной раз дойдёт до предела. Это стоит держать в голове, чтобы не удивляться, почему журнал, только что переведённый в строгий режим, продолжает спокойно затирать старые записи: он просто ещё не успел заполниться после смены настройки.

Любое изменение настройки стоит подтверждать, а не принимать на веру. Запрос get-log с фильтром по нужной строке мгновенно показывает текущее значение, и после каждой правки полезно сверяться с ним. Но настоящая проверка приходит со временем: только понаблюдав за журналом в работе несколько дней, видно, как он заполняется на самом деле и угадан ли размер. Простой способ оценить динамику - периодически снимать сведения о журнале и смотреть на число записей и дату самой старой из них.

wevtutil gli Security

Если самая старая запись датируется лишь вчерашним днём, журнал прокручивается слишком быстро, и его стоит расширить. Если же он хранит события месячной давности и при этом далёк от заполнения, размер избыточен и его можно вернуть к более скромному значению. Такое наблюдение превращает настройку из разового действия в управляемый процесс: администратор не угадывает размер раз и навсегда, а подстраивает его под меняющуюся нагрузку.

Что стоит за правильно настроенным журналом

Настройка размера и поведения журнала кажется мелкой технической деталью, но именно она определяет, окажется ли нужная запись на месте в момент, когда она понадобится. Журнал с неверными настройками подводит дважды: либо теряет историю слишком рано, либо встаёт колом из-за переполнения. И то и другое выясняется в самый неподходящий момент, когда времени на исправление уже нет.

Грамотный администратор настраивает журналы не реактивно, после первого переполнения, а заранее, исходя из роли каждого журнала. Шумным операционным каналам он отдаёт кольцевой режим, чтобы они никогда не останавливали запись. Критичным журналам безопасности назначает строгое хранение с архивированием, чтобы не потерять ни единой записи. И каждому отводит размер, выверенный под реальную скорость роста и нужный срок хранения.

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