Аудит перезагрузок Windows Server: находим виновника за 10 минут
Меня зовут Семёнов Евгений, директор АйТи Фреш. За 15+ лет практики самый частый утренний звонок звучит так: «У нас ночью перезагрузился 1С-сервер, почему — неизвестно». Я всегда отвечаю одинаково: это решается штатными инструментами Windows за 10 минут, если знать, куда смотреть. В этой статье — полный чек-лист поиска причин внеплановых ребутов Windows Server, от событий User32 до дампов BSOD.
Последовательность действий при утреннем ребуте
Я никогда не начинаю с перезапуска сервисов. Сначала — фиксирую картину:
- Точное время последнего старта системы:
Get-CimInstance Win32_OperatingSystem | Select LastBootUpTime. - Список перезагрузок за неделю из System-лога.
- Предшествующие ошибки (10–30 минут до ребута) — Application и System.
- Проверка на наличие MEMORY.DMP и мини-дампов в
C:\Windows\Minidump. - Проверка Windows Update history и запланированных задач.
Ключевые события в System-логе
| ID | Источник | Смысл |
|---|---|---|
| 6005 | EventLog | Запуск службы журнала — начало загрузки |
| 6006 | EventLog | Остановка журнала — корректное завершение |
| 6008 | EventLog | Предыдущее завершение было некорректным |
| 6013 | EventLog | Uptime системы за прошедший период |
| 1074 | User32 | Кто и каким процессом инициировал ребут |
| 1076 | User32 | Первый вход после некорректного завершения |
| 41 | Kernel-Power | Система загрузилась без штатного shutdown |
| 109 | Kernel-General | Начало последовательности выключения |
Быстрый сбор истории PowerShell-ом
# Последние 20 перезагрузок
Get-WinEvent -FilterHashtable @{LogName='System'; ID=1074,6005,6006,6008,41} -MaxEvents 40 |
Select-Object TimeCreated, Id, ProviderName, Message |
Format-Table -AutoSize
# Кто нажал ребут за последние 7 дней
Get-WinEvent -FilterHashtable @{LogName='System'; ID=1074; StartTime=(Get-Date).AddDays(-7)} |
ForEach-Object {
[PSCustomObject]@{
Time = $_.TimeCreated
User = $_.Properties[6].Value
Reason = $_.Properties[2].Value
Process = $_.Properties[0].Value
}
} | Format-Table -AutoSize
Этот скрипт я держу в Run-папке на всех админских ноутбуках. Даёт картину «кто, когда и зачем» за 5 секунд.
Event 1074 — самая информативная запись
В описании события есть поля: Process Name, Username, Reason, Reason Code, Shutdown Type. По Reason Code понимаешь причину сразу:
0x80020002— Operating System: Service pack (Other Planned) — обновления.0x80050003— Hardware: Maintenance (Planned) — плановое обслуживание.0x500FF— Other (Unplanned) — нажал Restart кто-то из админов.0x80020010— Operating System: Reconfiguration (Planned) — настройка/патч.
Если Username = NT AUTHORITY\SYSTEM и Process Name = C:\Windows\System32\svchost.exe с Reason «Operating System: Service pack» — почти наверняка это WU. Если USERNAME = ваш admin и Reason «Other (Planned)» — человеческий фактор.
Reliability Monitor — визуальный обзор
У нас на практике админы забывают про Reliability Monitor, а зря. Запускается через perfmon /rel. Даёт временную шкалу со всеми критическими событиями, установками ПО, ошибками и ребутами. Идеально, когда нужно показать руководству «вот тут поставили патч, вот тут начались падения».
Дампы памяти при BSOD
Если ребут был по BSOD, в C:\Windows\Minidump лежит .dmp-файл. Для быстрого анализа — WinDbg или старенький, но работающий BlueScreenView от NirSoft. Минимум — смотрим Bug Check Code:
# Windows Debugging Tools
!analyze -v
# Типовые коды
# 0x0000003B SYSTEM_SERVICE_EXCEPTION — драйвер
# 0x0000007E SYSTEM_THREAD_EXCEPTION_NOT_HANDLED — обычно драйвер/антивирус
# 0x00000133 DPC_WATCHDOG_VIOLATION — диск/контроллер SSD
# 0x0000009F DRIVER_POWER_STATE_FAILURE — сон/гибернация
Мини-кейс: 1С-сервер ночью уходит
Апрель 2026. Клиент — производство, 45 юзеров. Терминальный сервер 1С с еженедельным ночным ребутом между 3:30 и 4:15. Админы списывали на WU, но ребуты приходили даже в выходные.
За час я прошёл по журналам: Event 1074 с User=NT AUTHORITY\SYSTEM, Reason Code 0x80020002. Но Windows Update показывал установку патчей только раз в месяц. Дальше — Task Scheduler. Нашёл задачу «Перезагрузка для обслуживания», созданную прежним админом в 2023 году с триггером «каждую пятницу 3:30» и условием «только если система простаивает». Проблема в том, что «простой» определялся по CPU, а ночью 1С-агент делал регламентные задания с 3 до 6, и задача пропускалась. Но если регламент заканчивался до 3:30 — ребут проходил, а если задерживался — съезжал. Задачу отключил, расписали плановое обслуживание на субботу с уведомлением.
Shutdown Event Tracker для чётких причин
Я всегда включаю Shutdown Event Tracker на критичных серверах. При любом shutdown/restart админу предлагается диалог «Укажите причину», без заполнения команда не проходит. Включается через GPO:
Computer Configuration → Administrative Templates → System → Display Shutdown Event Tracker = Enabled, Option = Always. Плюс политика «Do not display Shutdown Event Tracker System State Data feature» — по умолчанию Disabled.
Контроль Windows Update-ребутов
Половина внеплановых ребутов — это WU с Active Hours 00:00–00:00 или без согласованного окна. Настраивается через GPO:
- Scheduled Install Time — явное окно.
- No auto-restart with logged on users for scheduled automatic updates installations — спасает от ребута в середине рабочего дня.
- Configure Automatic Updates → Download and notify for install — максимальный контроль.
На серверах мы всегда применяем третий вариант. Не автомат, не сюрприз.
Мониторинг uptime через PRTG/Zabbix
Реактивный поиск — хорошо, проактивный — лучше. Я всегда настраиваю алерт на «uptime меньше 20 минут» и «ребут без Event 1074 за последние 10 минут». Получил уведомление — зашёл по RDP и сразу собрал логи, пока данные свежие.
# Zabbix агент item
UserParameter=windows.lastbootup,powershell -Command "(Get-CimInstance Win32_OperatingSystem).LastBootUpTime.ToString('s')"
UserParameter=windows.bootcount,powershell -Command "(Get-EventLog -LogName System -Source 'EventLog' -After (Get-Date).AddDays(-7) | Where {$_.EventID -eq 6005}).Count"
Физический уровень: питание и железо
Event 41 без предшествующих 1074 и без дампа = у вас что-то аппаратное. За 15+ лет я видел четыре типовых случая:
- ИБП отработал автономно, закончилась батарея, сервер получил power loss.
- PSU сервера деградировал, просадка при пиковой нагрузке.
- Перегрев процессора из-за пыли в радиаторе (тут даже сервер Dell Xeon Platinum 8280 не спасёт, если не чистить два года).
- Битая планка памяти — MCE errors в IPMI/iDRAC за минуты до ребута.
Всегда смотрите iDRAC/iLO/IPMI логи. Железо пишет туда больше, чем Windows в System.
Разберём причины ребутов вашего сервера
Приеду или подключусь удалённо, соберу логи, найду источник внеплановых перезагрузок, настрою мониторинг uptime и контроль Windows Update. Типовой аудит — 2–4 часа. Работаю с Windows Server с 2008-го.
Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш
FAQ — частые вопросы
- Где смотреть причину перезагрузки Windows Server?
- Event Viewer → System, события 1074, 6005, 6006, 6008, 41, 109 и Reliability Monitor.
- Что означает Event 41 Kernel-Power?
- Система загрузилась после некорректного завершения — питание, BSOD без дампа, аппаратный сбой.
- Как узнать, кто нажал Shutdown?
- Event 1074 из User32 с именем пользователя и процессом, плюс Shutdown Event Tracker.
- Где найти логи Windows Update-ребутов?
- Microsoft-Windows-WindowsUpdateClient/Operational, события 19, 43, 44 и 1074 с SYSTEM+WU.
- Что такое Shutdown Event Tracker?
- Диалог при shutdown/reboot, обязывающий указать причину, данные уходят в Event 1074.