2 분 소요

Windows Server에서 발생하는 모든 중요한 이벤트는 이벤트 로그에 기록됩니다. 이벤트 로그를 제대로 분석하면 장애 원인 파악, 보안 위협 탐지, 시스템 성능 문제 진단이 가능합니다.

데이터센터 서버 이미지

이벤트 로그 분석으로 서버 상태를 파악하는 환경

주요 이벤트 로그 채널

로그 이름 설명 주요 이벤트
System OS 및 드라이버 이벤트 서비스 시작/중지, 하드웨어 오류
Application 앱 레벨 이벤트 애플리케이션 충돌, 오류
Security 보안 감사 이벤트 로그인 성공/실패, 정책 변경
Setup 설치 관련 이벤트 OS 업데이트, 역할 설치
Microsoft-Windows-* 컴포넌트별 로그 세부 기능별 이벤트

알아야 할 주요 이벤트 ID

보안 이벤트

이벤트 ID 의미
4624 로그인 성공
4625 로그인 실패
4648 명시적 자격 증명으로 로그인 시도
4672 관리자 권한으로 로그인
4688 새 프로세스 생성
4698 예약된 작업 생성
4720 사용자 계정 생성
4732 로컬 그룹에 구성원 추가

시스템 이벤트

이벤트 ID 의미
6008 예기치 않은 시스템 종료
41 커널 전원 이벤트 (강제 재부팅)
7034 서비스 비정상 종료
7036 서비스 상태 변경

PowerShell로 이벤트 로그 분석

기본 이벤트 조회

# 최근 시스템 로그 오류 확인
Get-EventLog -LogName System -EntryType Error -Newest 20

# 최근 24시간 보안 로그인 실패
$since = (Get-Date).AddHours(-24)
Get-WinEvent -FilterHashtable @{
    LogName   = 'Security'
    Id        = 4625
    StartTime = $since
} | Select-Object TimeCreated, Message | Format-List

브루트포스 공격 탐지

# 로그인 실패 IP 주소별 카운트
$events = Get-WinEvent -FilterHashtable @{
    LogName   = 'Security'
    Id        = 4625
    StartTime = (Get-Date).AddHours(-1)
}

$events | ForEach-Object {
    $xml = [xml]$_.ToXml()
    $ip = $xml.Event.EventData.Data |
        Where-Object { $_.Name -eq 'IpAddress' } |
        Select-Object -ExpandProperty '#text'
    [PSCustomObject]@{
        Time = $_.TimeCreated
        IP   = $ip
    }
} | Group-Object IP |
  Sort-Object Count -Descending |
  Select-Object Count, Name |
  Format-Table -AutoSize

서비스 장애 추적

# 최근 서비스 비정상 종료 이벤트
Get-WinEvent -FilterHashtable @{
    LogName = 'System'
    Id      = 7034
    StartTime = (Get-Date).AddDays(-7)
} | Select-Object TimeCreated,
    @{N='Service'; E={$_.Properties[0].Value}} |
  Format-Table -AutoSize

보안 네트워크 이미지

이벤트 로그를 분석하는 보안 모니터링 화면

이벤트 구독(Subscription)으로 원격 수집

# Windows Event Forwarding (WEF) 설정
# 수집 서버에서 실행
winrm quickconfig -quiet
wecutil qc /quiet

# 원격 서버(소스)에서 실행
winrm quickconfig -quiet

# 구독 생성 (수집 서버에서)
wecutil cs subscription.xml
<!-- subscription.xml -->
<Subscription xmlns="http://schemas.microsoft.com/2006/03/windows/events/subscription">
    <SubscriptionId>SecurityEvents</SubscriptionId>
    <SubscriptionType>SourceInitiated</SubscriptionType>
    <Description>보안 이벤트 수집</Description>
    <Enabled>true</Enabled>
    <Uri>http://schemas.microsoft.com/wbem/wsman/1/windows/EventLog</Uri>
    <ConfigurationMode>Normal</ConfigurationMode>
    <Query>
        <![CDATA[
        <QueryList>
            <Query Path="Security">
                <Select>*[System[EventID=4624 or EventID=4625 or EventID=4720]]</Select>
            </Query>
        </QueryList>
        ]]>
    </Query>
    <EventSources>
        <EventSource>
            <Address>webserver01.domain.local</Address>
        </EventSource>
    </EventSources>
</Subscription>

이벤트 로그 자동 알림

# 특정 이벤트 발생 시 이메일 알림 (작업 스케줄러 연동)
$action = New-ScheduledTaskAction `
    -Execute "PowerShell.exe" `
    -Argument '-Command Send-MailMessage -To "admin@example.com" -From "alert@server.com" -Subject "보안 경고" -Body "관리자 로그인 이벤트 감지" -SmtpServer smtp.example.com'

$trigger = New-ScheduledTaskTrigger `
    -AtLogon

Register-ScheduledTask `
    -TaskName "SecurityAlert" `
    -Action $action `
    -Trigger $trigger

이벤트 로그 백업 및 보관

# 이벤트 로그를 EVTX 파일로 내보내기
$exportPath = "D:\EventLogs\$(Get-Date -Format 'yyyyMM')"
New-Item -ItemType Directory -Path $exportPath -Force

wevtutil epl Security "$exportPath\Security.evtx"
wevtutil epl System "$exportPath\System.evtx"
wevtutil epl Application "$exportPath\Application.evtx"

# 로그 최대 크기 설정 (MB)
wevtutil sl Security /ms:1073741824   # 1GB
wevtutil sl System /ms:536870912      # 512MB

이벤트 로그는 서버에서 발생한 모든 일의 기록입니다. 평상시에 정상 패턴을 파악해 두면, 이상 징후를 빠르게 발견하고 대응할 수 있습니다. 중요 이벤트에 대한 알림을 설정하고, 로그를 정기적으로 백업하여 감사 추적에 활용하세요.

댓글남기기