Windows 이벤트 로그에서 4GB를 초과하면 어떤 의미가 있습니까?


13

최대 4GB를 권장하는 Windows 2008 / Vista까지 운영 체제의 권장 이벤트 로그 설정 최대 값을 다루는이 Microsoft KB를 찾았으며 , 4GB보다 큰 이벤트 로그가 권장되지 않는다는 다른 모호한 참조를 보았습니다. 2008 R2이지만 이벤트 로그가이 크기를 초과하면 실제로 어떻게되는지 궁금합니다.

테스트 서버 (2012 R2)에서이 값을 초과했으며 메모리 사용량이 높은 것과 같은 것을 보지 못했습니다. 2008 R2 이전의 OS는 신경 쓰지 않지만 많은 컴퓨터에서 이벤트를 수집하기 때문에 큰 로그를 원합니다. Windows 이벤트 전달을 통해 모든 이벤트를 한 곳에 보관하고 싶습니다.


3
귀하의 질문에 관심이 있고 오늘 상사가 나를 화나게 함으로 오늘 밤 서버 중 하나의 이벤트 로그를 제어 할 수 없게하고 결과를 기존 답변에 다시 게시하지만 4GB는 64 비트 OS의 하드 제한은 아니며 32 비트 앱 및 API조차도 일반적으로 4GB보다 큰 파일을 처리한다는 경험이 있습니다.
HopelessN00b

아,> 4GB 이상의 이벤트 로그 파일을 생성하는 데 시간이 조금 더 걸린 것 같습니다. 가장 분주 한 도메인 컨트롤러가 20 분 전에 로그를 삭제했습니다.
HopelessN00b

답변:


10

4GB 로그를로드해야 할 때 끔찍한 성능과 말도 안되는 대기 시간 외에는 그런 괴물 같은 것들을 검색해야한다면 그리 많지 않을 것입니다. 내 환경에서 본 것 중 가장 큰 것은 10GB이며로드 대기를 포기했지만 아무것도 해치지 않는 것 같습니다.

Server 2008에 대한 4GB주의는 종종 4GB에서 발생하는 32 비트 제한 때문입니다. 64 비트 시스템에서는 최대 16TB (또는 64에 따라 다름)까지 자랄 수 있지만 괜찮은 사람은 누구나 그 한계를 테스트 할 수있는 곳을 알지 못합니다.

물론, 아직 작성하지 않은 경우 매우 큰 로그 파일은 사용하기가 비현실적이라는 것을 알게 될 것입니다. 마지막으로 간단한 100GB (텍스트) 로그 파일을로드하려고 할 때 응용 프로그램이 응용 프로그램을 열면 충돌이 발생하므로 100GB 전에 그 문제가 발생했을 것으로 생각됩니다.

훨씬 더 좋은 방법은 파일 크기를 적당한 것으로 제한하고 스크립트를 사용하여 때때로 지우는 것입니다. 보안 로그에서 1GB 크기 제한과 결합하여 내 환경에서 아래를 사용합니다. 일부 서버는 하루에 3GB가 넘는 보안 이벤트를 생성하므로 빗나 가기 전에 종료 할 거대한 로그 파일의 모든 공간을 낭비하고 싶지 않으므로 스크립트가 로그 내용을 다른 폴더를 연 다음 다시 기록 할 이벤트 로그를 지 웁니다. 그리고 내가 복사 한 폴더가 백업되었으므로 우리는 항상 끔찍한 상황에서 로그로 돌아갈 수 있습니다.

#Adapted from: http://blogs.technet.com/b/heyscriptingguy/archive/2009/04/08/how-can-i-check-the-size-of-my-event-log-and-then-backup-and-archive-it-if-it-is-more-than-half-full.aspx

Param($logName = "security",$backupFolder = "C:\backupLogs")

Function Get-EventLog([string]$logName)
{
 $log = Get-WmiObject -Class Win32_NTEventLogFile -filter "LogFileName = '$logName'"
 If($log.FileSize / $log.MaxFileSize -ge .9)
  {
   "Log is at least 90% full. Backing up now."
   Backup-EventLog($log)
  } #end if
 Else 
 { 
   "Not backed up: $logName is only " + ($log.FileSize / $log.MaxFileSize).tostring("N2") +  " percent full" 
 } #end else
} #end Get-EventLog

Function Backup-EventLog($log)
{
 $folder = Join-Path -Path $BackUpFolder -ChildPath (Get-Date).ToString("MMddyy_hhmm")
 If(-not(Test-Path $folder)) 
   { 
     New-Item -path $folder -itemtype Directory -force | out-Null
   }
  $rtn = $log.BackupEventLog("$folder\$logName.evt").ReturnValue
  If($rtn -eq 0)
    {
     $log.ClearEventLog() | out-null
    } #end if
 ELSE 
   {
    "$logName could not be cleared. Backup ended with $($rtn)" 
  }
} #end Backup-EventLog

# *** ENTRY POINT ***
Get-EventLog -logname $logname

6
Windows 이벤트 로그가 메모리 매핑 된 파일이고 전체 로그가 메모리에로드 되었다는 것을 기억하는 사람 은 Windows Vista / Server 2008에 도입 된 새로운 이벤트 로깅 인프라로 인해 이러한 제한이 사라 졌습니다. 그러나 여전히 Server 2003을 사용하는 경우 OS에서 프로세스에 총 1GB 이상의 메모리 매핑 파일이있을 수 없으므로 1GB를 초과하는 로그를 만들 수 없습니다.
나는 Monica Reinstate Monica

나중에 파일을 폴더로 분할 할 수 있습니다. 그렇게하기 위해 PHP 스크립트를 작성할 수 있습니다. 그리고 반년 정도 실행되도록하세요. 데이터를 정리하는 데 도움이됩니다. 매우 기본적인 PHP 페이지가있는 내부 서버를 사용하면 개별 폴더에있는 거대한 파일의 데이터에 액세스 할 수 있으므로 필요한 데이터를 빠르게 볼 수 있습니다. 아니면 간단한 프로그램을 만들 수도 있습니다. VB.net 또는 C #은 이에 대한 좋은 후보입니다.
Ismael Miguel

3

다른 답변은이 문제의 원인을 다룹니다. 최신 시스템의 경우 대부분 이벤트 뷰어 GUI 내에서로드 시간을 다소 견딜 수있게 유지합니다. 현재 로그를 백업 된 위치에 복사 한 후 지우는 것도 좋습니다.

어쨌든 생성되는 큰 로그 파일을 구문 분석하는 경우 두 가지 좋은 옵션이 발생합니다.

1) 현재 GUI가 관리 할 수있는 것보다 빠르게 로그를 구문 분석하거나 2) 로그를 별도의 파일로 분할합니다.

나는 2)를 위해 쉽게 사용할 수있는 유틸리티가 있다고 확신하므로 1)에 중점을 둘 것입니다.

첫째, Powershell에는이 기능에 대한 'get-winevent'라는 훌륭한 cmdlet이 있습니다. 내가 본 가장 빠른 성능은 해시 테이블을 사용하는 것입니다. 마지막 날부터 특정 사용자와 관련된 보안 로그의 모든 이벤트를 가져 오는 예는 다음과 같습니다.

$timeframe = (get-date) - (new-timespan -day 1)
$userevt = Get-WinEvent -ComputerName <specify> -FilterHashTable @{LogName='Security'; Data='<enter username here>'; StartTime=$timeframe}

$ userevt는 이제 이벤트 모음입니다. 일치하는 수에 따라 적은 수의 이벤트를 쉽게 읽을 수 있도록 형식 목록으로 파이프 할 수 있습니다. 중간 숫자의 경우 동일하게 수행하지만 출력을 파일로 리디렉션하십시오.

$userevt | format-list > <outputfile>.txt

많은 수의 경우 필터링을 시작하십시오 (예 : 위에서 얻은 사용자의 잠금 이벤트에 대한 발신자 컴퓨터).

$userevt | %{if ($_.message -match "Caller Computer .*") {$matches[0]}}

각 잠금 이벤트에 대한 단일 행 결과가 표시됩니다. 위의 프로세스는 일반적으로 2008 R2의 4GB 로그에 1-4 분이 걸립니다.

둘째, 특히 관리해야 할 2003 시스템의 경우 이벤트 뷰어의 왼쪽 창에서 특정 로그 파일을 마우스 오른쪽 버튼으로 클릭하고 '다른 이름으로 로그 파일 저장'을 선택할 수 있습니다.

로컬 시스템에서 이벤트 뷰어를 실행중인 경우 get-winevent로 구문 분석 할 수있는 .evt 파일을 저장할 수 있습니다.

또는 grep 또는 findstr과 같은 적절한 명령 줄 유틸리티 또는 notepad ++와 같은 특정 프로그램으로 구문 분석 할 수있는 텍스트 또는 CSV 파일 (CSV가 더 쉽습니다)을 저장할 수 있습니다.


1

실제 사례 : 규정 준수 요구 사항 당 6 개월 보존을 위해 보안 로그를 12GB 크기로 늘 렸을 때 이러한 상황이 발생했습니다.

3 개월까지는 서버 2008r2 및 2012r2 서버에 로그온 할 수 없었습니다. 로그온은 "환영"화면에 멈출 것입니다. 우리는 열린 큰 파일을 수용하기 위해 서버 메모리를 20GB로 늘리려 고 시도했지만 서버는 여전히 화를 냈습니다. 우리는 관리 엔진의 1GB 권장 사항을 따르고 전체 파일을 덮어 쓸 때 오래된 파일을 보관하도록 조정하기로 결정했습니다.

필요한 경우 180 일이 지난 오래된 파일을 정리하는이 스크립트가 있지만 파일을 그대로 유지할 수 있습니다.

get-childitem -Path "C:\Windows\System32\winevt\Logs" |
  where-object {$_.LastWriteTime -lt (get-date).AddDays(-180)} |
  remove-item –whatif

https://www.manageengine.com/products/active-directory-audit/help/getting-started/event-log-size-retention-settings.html

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.