👋 Привет, админы!
👋 Привет, админы! Недавно был случай, один из файловых серверов неожиданно перестал принимать события - логи просто «забились» до предела, из-за чего служба безопасности не могла записывать критичные события входа. Оказалось, что журналы событий выросли до 10 ГБ и система больше не записывала новые записи. 🔥 Чтобы предотвратить подобные ситуации, я собрал небольшой скрипт для автоматического архивации и очистки журналов событий, когда их размер превышает заданный порог. Вот пример, который запустил на сервере: # Порог в мегабайтах $logSizeThresholdMB = 1024 # Папка для архивации $archivePath = "D:\EventLogArchives" if (-not (Test-Path $archivePath)) { New-Item -Path $archivePath -ItemType Directory | Out-Null } # Функция для проверки и архивации логов function Archive-And-Clear-EventLog { param ( [string]$LogName ) # Определяем текущий размер лога $logInfo = wevtutil gl $LogName $fileSizeLine = ($logInfo | Where-Object { $_ -match "fileSize" }) $sizeBytes = [int64]($fileSizeLine -replace "[^0-9]", "") $sizeMB = [math]::Round($sizeBytes / 1MB, 2) if ($sizeMB -ge $logSizeThresholdMB) { $timestamp = (Get-Date).ToString("yyyyMMdd_HHmmss") $archiveFile = Join-Path $archivePath "$LogName`_$timestamp.evtx" # Экспортируем текущий журнал wevtutil epl $LogName $archiveFile Write-Host "Архивировал лог $LogName (размер $sizeMB MB) в $archiveFile" # Очищаем журнал wevtutil cl $LogName Write-Host "Очищен лог $LogName" } else { Write-Host "Лог $LogName в пределах нормы: $sizeMB MB" } } # Получаем все журналы, которые хотим контролировать (пример: System и Security) $logsToCheck = @("System", "Security") foreach ($log in $logsToCheck) { Archive-And-Clear-EventLog -LogName $log } Этот скрипт проверяет размер каждого указанного журнала, экспортирует его в папку архива, если размер больше 1 ГБ, и очищает файл. Я поставил его в Task Scheduler с частотой 1 раз в сутки, чтобы не «догонять» проблему вручную.