Last9 Last9

Mar 4th, ‘25 / 9 min read

Windows Event Logs: Monitoring, Alerts, and Compliance

Learn how to monitor Windows Event Logs, set up alerts, and ensure compliance with proper log retention and archiving strategies.

Windows Event Logs: Monitoring, Alerts, and Compliance

Troubleshooting a Windows server issue often comes down to checking the event logs—but finding the right information isn’t always straightforward. Windows event logs capture everything from system errors to security alerts, making them a crucial resource for diagnosing problems.

This guide focuses on what matters, helping you make sense of event logs without unnecessary complexity.

What Are Windows Event Logs?

Windows event logs are your system's journal – they track pretty much everything that happens on your Windows servers and workstations. When an application crashes, a service stops, or someone tries to access something they shouldn't, it all gets written here.

Think of event logs as your system's receipts. They prove what happened, when it happened, and often why it happened.

The logging system in Windows organizes events by their source and type, making it (somewhat) easier to track down issues when things go sideways.

💡
If you're running critical workloads on Windows Server, keeping an eye on performance metrics can save you from unexpected headaches—here’s a practical guide on Windows Server Monitoring.

Windows Event Logs Location: Where to Find Them

The actual log files live in C:\Windows\System32\winevt\Logs. But let's be honest – nobody browses there directly.

Here's how you access them:

Using Event Viewer

  1. Hit Win+R, type eventvwr.msc, and press Enter
  2. Or go through the longer route: Start → Administrative Tools → Event Viewer

The Event Viewer gives you a tree view of all logs, with the most common ones being:

  • Application: Logs from installed software and applications
  • Security: Anything security-related (login attempts, permission changes)
  • System: OS and hardware events
  • Setup: OS installation and updates
  • Forwarded Events: Events collected from other machines (if configured)

Using PowerShell

# Get the latest 10 system events
Get-EventLog -LogName System -Newest 10

# Find all error events in the last 24 hours
Get-WinEvent -FilterHashtable @{LogName='Application'; Level=2; StartTime=(Get-Date).AddDays(-1)}

# Get events with a specific ID
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4624}

PowerShell's Get-WinEvent cmdlet is your best friend for scripting and automation. It's faster than Get-EventLog and works with all event logs.

Log Types You Should Care About

Not all logs are created equal. Here's what you should focus on:

Application Logs

These capture events from your apps. When your web server acts up or your database connection fails, this is your first stop.

System Logs

This is where Windows reports on itself – services starting or stopping, driver issues, and hardware problems.

Security Logs

Failed logins, permission changes, policy modifications – everything security-related lives here. If you've been hacked, the evidence is probably in this log.

Custom Application Logs

Many apps create their own event logs. SQL Server, IIS, and other major applications often create custom logs to avoid cluttering the main ones.

💡
Understanding log levels can help you cut through the noise and catch issues before they escalate—here’s a useful guide on Log Levels: Answers to the Most Common Questions.

How to Read Windows Event Logs

Event logs can be overwhelming, so here's how to cut through the noise:

Understanding Event Structure

Each event has these key parts:

Component What It Tells You
Level Severity (Information, Warning, Error, Critical)
Date and Time When it happened
Source What generated the event
Event ID Specific code for the event type
Task Category Further classification by the source
Description The human-readable details

The Most Common Event IDs

Here's a cheat sheet of event IDs you'll see often:

Event ID What It Means
4624 Successful login
4625 Failed login attempt
7036 Service started or stopped
1074 System shutdown initiated
6005/6006 Event log service started/stopped
41 System rebooted without clean shutdown
1001 Windows Error Reporting

Practical Tips for Log Management

Now for the real talk – how to use these logs in your DevOps workflow:

Filtering: Find the Signal in the Noise

The Event Viewer's filter feature is good, but PowerShell is better:

# Find all errors from a specific application in the last hour
$oneHourAgo = (Get-Date).AddHours(-1)
Get-WinEvent -FilterHashtable @{
    LogName='Application'; 
    Level=2;
    StartTime=$oneHourAgo;
    ProviderName='Your Application Name'
}

Creating Custom Views

For recurring investigations, create custom views in Event Viewer:

  1. In Event Viewer, click "Create Custom View"
  2. Set your filters (time range, event level, log, source, etc.)
  3. Name it something descriptive like "Failed Logins" or "Application Crashes"

Log Forwarding: Centralize Your Logs

For multi-server environments, set up log forwarding:

# On the collector server
wecutil qc /q

# On source servers
winrm quickconfig

This setup is for configuring Windows Event Forwarding (WEF), where logs from multiple source servers are sent to a central collector server.

  • wecutil qc /q (Run on the collector server)
    • Enables the Windows Event Collector service, allowing the server to receive logs from other machines.
    • The /q flag ensures it runs without prompting for confirmation.
  • winrm quickconfig (Run on source servers)
    • Configures Windows Remote Management (WinRM), which is required for event forwarding.
    • Starts the WinRM service and sets it up for remote management.

With this setup, the collector can centralize logs from multiple machines, making monitoring and analysis easier.

💡
Managing log retention effectively ensures you have the right data when you need it—without unnecessary storage costs. Here’s a practical guide on Log Retention.

How to Integrate Event Logs With Your DevOps Workflow

Event logs aren't useful if you're only looking at them after something breaks. Here's how to make them part of your workflow:

Monitoring & Alerting

To ensure system health and detect issues early, you need proper monitoring and alerting for Windows event logs. Here’s how different tools can help:

Windows Event Forwarding (WEF) – Native Centralized Logging

  • A built-in Windows feature that forwards logs from multiple machines to a central event collector.
  • Uses Windows Remote Management (WinRM) for secure log transmission.
  • Works best for on-premises environments where logs need to be centralized without additional software.
  • Requires setting up subscriptions to filter and collect only relevant event logs.

Azure Monitor – Cloud-Based Monitoring for Hybrid Environments

  • Collects logs from on-premises Windows servers and Azure VMs using the Log Analytics Agent.
  • Provides a query-based interface (Kusto Query Language - KQL) for analyzing event logs.
  • Can trigger alerts based on specific event patterns or thresholds.
  • Integrates with Azure Security Center for security event monitoring and compliance reporting.

Last9 – Observability Built for Reliability

  • Purpose-built for reliability engineering, Last9 offers deep observability into logs, metrics, and traces.
  • Helps teams understand infrastructure health by correlating logs with system performance.
  • Otel-native makes it easy to ingest logs from various sources, including Windows Event Logs.
  • Enables real-time alerting and anomaly detection with minimal operational overhead.
  • Designed to handle large-scale distributed environments with efficient log aggregation and querying.

Automating Responses

# Example: Restart a service that keeps failing
$failEvents = Get-WinEvent -FilterHashtable @{
    LogName='System'; 
    ID=7031; # Service crashed unexpectedly
    ProviderName='Service Control Manager'
} -MaxEvents 5

if ($failEvents.Count -ge 3) {
    Restart-Service -Name "ProblemService" -Force
    Send-MailMessage -To "you@company.com" -Subject "Service Restarted Automatically"
}

This PowerShell script monitors Windows event logs for repeated service failures and automatically restarts the affected service if needed.

  • It uses Get-WinEvent to filter logs in the System event log, specifically looking for Event ID 7031, which indicates a service crash, and filtering by the Service Control Manager provider.
  • It retrieves up to five recent events matching this criteria.
  • If at least three failures are detected, the script forcefully restarts the service named "ProblemService".
  • It then sends an email notification to alert the team that the service was restarted.

3 Common Log Location Issues & How to Fix Them

Sometimes your logs aren't where you expect them to be:

"I Can't Find My Logs"

If default logs are missing, check:

  • If the Event Log service is running: Get-Service EventLog
  • Disk space: Get-Volume C
  • Log rotation settings: Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\EventLog\Application

"My Logs Are Too Big/Small"

Adjust the maximum log size:

# Increase System log to 2GB
Limit-EventLog -LogName System -MaximumSize 2GB

# Check current settings
Get-EventLog -List

"My Logs Aren't Detailed Enough"

For more detailed logging:

# Enable debug logging for a service
wevtutil.exe sl Microsoft-Windows-YourService/Debug /e:true

# Enable analytical channels (super detailed)
wevtutil.exe set-log "Microsoft-Windows-YourService/Analytical" /enabled:true
💡
Looking for a fast and efficient way to handle logs in Node.js? Check out this guide on NPM Pino Logger.

How Do You Retain Logs for Compliance Without Storage Issues?

Proper log retention is essential for meeting auditing, security, and compliance requirements. Logs serve as a historical record of system activity, helping organizations detect security incidents, meet regulatory requirements, and troubleshoot past issues.

Below is a structured approach to archiving Windows event logs effectively.

Backing Up and Clearing Event Logs

Before clearing logs, it's critical to back them up to prevent data loss. Windows provides built-in utilities to handle this process:

# Back up the System log before clearing
wevtutil.exe epl System C:\Backups\System_$(Get-Date -Format "yyyyMMdd").evtx

# Clear the System log after backup
wevtutil.exe cl System
  • wevtutil.exe epl exports the System log to a specified backup file, including a timestamp for easy identification.
  • wevtutil.exe cl clears the log after backup, ensuring that new logs can be captured without exceeding storage limits.

Long-Term Log Archiving Strategies

For long-term retention, consider structured approaches that align with compliance frameworks such as HIPAA, PCI-DSS, or SOC 2.

  1. Setting Up a SIEM System
    • SIEM (Security Information and Event Management) tools like Splunk, QRadar, and Elastic Security aggregate, store, and analyze event logs.
    • These tools allow for real-time threat detection and long-term forensic analysis.
    • Logs are typically indexed for quick searching and reporting, meeting compliance requirements for log retention.
  2. Using Azure Log Analytics for Cloud-Based Archiving
    • Windows event logs can be forwarded to Azure Monitor and Log Analytics for centralized storage.
    • The logs are stored securely in the cloud, reducing the risk of local data loss.
    • Supports Kusto Query Language (KQL) for advanced log querying and reporting.
    • Automating log backups ensures consistency and compliance without manual intervention.
    • A scheduled PowerShell task can back up logs periodically:
    • This script can be scheduled via Task Scheduler to run daily or weekly, depending on retention needs.

Automating Log Archival with PowerShell

$logName = "System"
$backupPath = "C:\Backups\${logName}_$(Get-Date -Format 'yyyyMMdd').evtx"
wevtutil.exe epl $logName $backupPath
wevtutil.exe cl $logName

How to Choose the Right Log Retention Policy

When designing a log retention strategy, consider:

  • Regulatory Requirements: Ensure logs are retained as per legal and industry standards.
  • Storage Costs: Optimize cloud storage plans or implement local compression strategies.
  • Security Considerations: Encrypt archived logs and restrict access to authorized personnel only.
  • Search and Retrieval Needs: Store logs in an indexed format for efficient query-based retrieval.
💡
Making sense of SIEM logs can be tricky, but the right approach helps turn data into actionable insights—here’s a practical guide on SIEM Logs.

Conclusion

Windows event logs might not be the most exciting part of your DevOps toolkit, but they're often the difference between quick resolutions and late-night troubleshooting marathons.

The key is knowing not just where the logs are located, but how to extract the information you need when you need it.

💡
If you've any of your own Windows log tricks, join our Discord community and share with us – we're all learning together.

FAQs

How far back do Windows event logs go?

By default, Windows keeps logs until they reach their maximum size (typically 20MB for System and Application logs). When logs fill up, Windows overwrites the oldest events. You can adjust this with PowerShell:

# See current retention settings
Get-EventLog -List

# Increase size to prevent early overwriting
Limit-EventLog -LogName Application -MaximumSize 4GB

For critical systems, consider setting up log forwarding or scheduled archiving to preserve logs indefinitely.

Can I read Windows event logs without admin rights?

For most logs, you'll need administrative privileges. However, some applications write to logs that regular users can access. If you need to grant non-admin users access to specific logs:

# Grant read access to a user
wevtutil set-log Security /ca:'O:BAG:SYD:(A;;0x1;;;SY)(A;;0x1;;;BA)(A;;0x1;;;AU)(A;;0x1;;;YourDomain\YourUser)'

But be careful – security logs contain sensitive information.

How do I correlate events across multiple servers?

Your options include:

  • Set up Windows Event Forwarding to a central collector
  • Use Azure Monitor to aggregate logs in the cloud
  • Implement a third-party SIEM solution
  • Use PowerShell to query multiple servers:
Invoke-Command -ComputerName Server1, Server2, Server3 -ScriptBlock {
    Get-WinEvent -FilterHashtable @{LogName='System'; ID=1074} -MaxEvents 5
} | Select-Object PSComputerName, TimeCreated, ID, Message

Time synchronization is crucial here – make sure all servers use the same NTP source.

What's the difference between .evt and .evtx file formats?

  • .evt: Legacy format used in Windows XP/Server 2003
  • .evtx: Modern XML-based format used since Windows Vista/Server 2008

The newer .evtx format offers better performance, more detailed information, and larger log sizes. If you're dealing with older .evt files, use the Get-WinEvent cmdlet with the -Path parameter to read them.

Can I export logs for analysis in other tools?

Absolutely. Export options include:

# Export to XML
Get-WinEvent -LogName System -MaxEvents 100 | Export-Clixml -Path C:\Temp\events.xml

# Export to CSV
Get-WinEvent -LogName System -MaxEvents 100 | Select TimeCreated, ID, LevelDisplayName, Message | Export-Csv -Path C:\Temp\events.csv -NoTypeInformation

# Export raw EVTX
wevtutil epl System C:\Temp\system.evtx

Many analysis tools like Last9, ELK Stack, and Graylog can ingest these formats.

Contents


Newsletter

Stay updated on the latest from Last9.

Authors
Anjali Udasi

Anjali Udasi

Helping to make the tech a little less intimidating. I love breaking down complex concepts into easy-to-understand terms.

Topics