---
title: "Stop Silent Event Loss at Scale with Windows Event Collector"
description: "Enterprise Windows Event Collector architecture: subscription types, XPath optimization, capacity planning, and SIEM integration at scale."
canonical: "https://adamtheautomator.com/windows-event-collector-architecture/"
---

# Stop Silent Event Loss at Scale with Windows Event Collector

> Enterprise Windows Event Collector architecture: subscription types, XPath optimization, capacity planning, and SIEM integration at scale.

Source: https://adamtheautomator.com/windows-event-collector-architecture/

---

ATA Learning

Tap to hide

[

ATA Learning

](/)

*   [Home](/)
*   [Tutorials](/tutorials/)
*   [Instructors](/author/)
*   [Advertising](/advertising/)
*   [Recommended Resources](/resources/)
*   [About Adam](/about-adam/)

Search for:  

*   [](https://twitter.com/adbertram)
*   [](https://github.com/Adam-the-Automator)
*   [](https://www.linkedin.com/company/adam-the-automator-llc)
*   [](/feed/)

![Stop Silent Event Loss at Scale with Windows Event Collector](https://adamtheautomator.com/wp-content/uploads/2026/04/featured_image-18.webp)

# Stop Silent Event Loss at Scale with Windows Event Collector

[![](https://secure.gravatar.com/avatar/d0b9d42e21e5622713f8b693aa5c0f9244d5f7dd200ed29b8398f52dee5de337?s=192&d=mm&r=g)Adam Bertram](https://adamtheautomator.com/author/adam-bertram/)22 April 20269 min. read

Categories: [Information Security](/category/infosec/)

Tags:[Active Directory](/tag/active-directory/)[Group Policy](/tag/group-policy/)[Security](/tag/security/)[Windows Events](/tag/windows-events/)

Table of Contents

*   [How Windows Event Forwarding Works](#how-windows-event-forwarding-works)
*   [Collector-Initiated vs. Source-Initiated Subscriptions](#collector-initiated-vs-source-initiated-subscriptions)
*   [Event Delivery Optimization](#event-delivery-optimization)
*   [Capacity Planning: The Math You Can’t Ignore](#capacity-planning-the-math-you-cant-ignore)
*   [EPS Thresholds and Hardware Sizing](#eps-thresholds-and-hardware-sizing)
*   [Scaling Beyond 4,000 Endpoints](#scaling-beyond-4000-endpoints)
*   [XPath Query Optimization](#xpath-query-optimization)
*   [A Practical XPath Example](#a-practical-xpath-example)
*   [XPath Gotchas Worth Knowing](#xpath-gotchas-worth-knowing)
*   [SIEM Integration Architecture](#siem-integration-architecture)
*   [Operational Gotchas at Scale](#operational-gotchas-at-scale)
*   [The WinRM SDDL Bug (Windows Server 2016/2019)](#the-winrm-sddl-bug-windows-server-20162019)
*   [NETWORK SERVICE Can’t Read Security Logs](#network-service-cant-read-security-logs)
*   [Registry Bloat from WEF Bookmarks](#registry-bloat-from-wef-bookmarks)
*   [What a Complete Enterprise Architecture Looks Like](#what-a-complete-enterprise-architecture-looks-like)

Your SIEM is only as good as what reaches it. And if you’re running Windows Event Forwarding (WEF) without a properly sized Windows Event Collector (WEC) architecture, a significant portion of your security telemetry is silently disappearing before it ever hits a log. No alerts. No forensic trail. Just gaps where attackers love to hide.

You’ve probably treated WEC like a toggle—flip it on, point a GPO at a server, call it done. That works until you hit scale. At 500 endpoints, that “good enough” architecture starts to crack under the weight of concurrent WinRM connections, XPath queries that forward everything, and a `ForwardedEvents` log capped at its default 20 MB. At 2,000 endpoints, it’s actively losing events. At 5,000, you’re operating blind and don’t know it yet.

This post covers what an enterprise WEC architecture actually looks like: the subscription model decision you get wrong once, the math behind capacity limits, XPath optimization patterns that cut event volume by half without sacrificing visibility, and how to connect WEC to your SIEM without deploying agents to every endpoint.

## How Windows Event Forwarding Works

[Windows Event Forwarding (WEF)](https://learn.microsoft.com/en-us/windows/win32/wec/windows-event-collector) is a native Windows feature that centralizes event logs from endpoints to a dedicated collection server. No third-party agents required. WEF has two roles. The endpoint runs the `Eventlog-ForwardingPlugin` service, which packages and ships matching events as a forwarder. The Windows Server runs the `WecSvc` service, acting as subscription manager and writing incoming events to the `ForwardedEvents` channel.

Communication between forwarder and collector runs over [WinRM](https://learn.microsoft.com/en-us/windows/win32/winrm/portal)—specifically HTTP on TCP port 5985 or HTTPS on port 5986. For domain-joined endpoints, Kerberos handles mutual authentication and encrypts the payload at the application layer, even over plain HTTP. For non-domain endpoints ([Entra-joined devices](https://learn.microsoft.com/en-us/entra/identity/devices/overview), remote systems), you need HTTPS with TLS client certificates.

A **subscription** is the configuration object that defines which events to collect, how often to deliver them, and which endpoints are authorized forwarders. That subscription decision is where most enterprise deployments go wrong.

### Collector-Initiated vs. Source-Initiated Subscriptions

There are two subscription modes. One scales. One doesn’t.

**Collector-initiated (pull):** The WEC server holds a static list of endpoints and actively polls each one for events. This requires inbound WinRM firewall rules on every endpoint and explicit read permissions for the WEC’s computer account on every endpoint’s event logs. At 50 endpoints it’s annoying. At 500 it’s unmanageable. At scale, the polling overhead consumes enough CPU and connection state on the WEC server to meaningfully degrade performance.

**Source-initiated (push):** The subscription is defined on the WEC server, but endpoints initiate the connection themselves. A [Group Policy Object (GPO)](https://learn.microsoft.com/en-us/windows/win32/wec/setting-up-a-source-initiated-subscription) pushes the WEC server’s URI into the `SubscriptionManager` registry key on each endpoint. Endpoints connect on their own schedule, authenticate via Kerberos, pull their subscription parameters, and push matching events.

For environments with 500 or more endpoints, source-initiated subscriptions are the only viable architecture. The WEC server operates passively—it doesn’t maintain a target list, doesn’t poll, doesn’t need firewall rules to push connections outward. Access control happens through Active Directory groups listed as “Allowed Forwarders” in the subscription configuration. Adding 1,000 endpoints to forwarding is a matter of adding computers to an AD security group, not editing a subscription file.

### Event Delivery Optimization

Subscriptions have three delivery modes that trade latency against resource consumption:

| Mode | Batch Timeout | Use Case |
| --- | --- | --- |
| Normal | 15 minutes | General operational logging |
| Minimize Bandwidth | 6 hours | Branch offices with limited WAN |
| Minimize Latency | 30 seconds | SOC / SIEM real-time detection |

Security operations centers should use **Minimize Latency**. Waiting 15 minutes to see a lateral movement event isn’t detection—it’s documentation. The tradeoff is that 30-second heartbeats multiply the number of concurrent WinRM connections, which directly drives memory consumption on the WEC server. That’s a hardware planning input, not a reason to tolerate latency.

## Capacity Planning: The Math You Can’t Ignore

A single WEC server has hard limits that [Microsoft documents](https://learn.microsoft.com/en-us/windows/win32/wec/windows-event-collector) and most administrators discover the wrong way.

### EPS Thresholds and Hardware Sizing

The foundational metric is **events per second (EPS)**. In practice, a standard Windows workstation with a reasonable audit policy generates roughly 10-50 EPS. Domain controllers and IIS servers generate significantly more. A WEC server should be sized to handle no more than [**3,000-5,000 EPS sustained**](https://learn.microsoft.com/en-us/windows/security/threat-protection/use-windows-event-forwarding-to-assist-in-intrusion-detection), with disk I/O as the most frequent bottleneck.

Microsoft’s [baseline recommendation](https://learn.microsoft.com/en-us/windows/security/threat-protection/use-windows-event-forwarding-to-assist-in-intrusion-detection) is **2,000-4,000 endpoints per WEC server** under normal conditions. With heavily optimized XPath filtering, some integrators report scaling a single collector to 10,000 endpoints—but that assumes excellent filter coverage and leaves no fault tolerance headroom. Plan for 4,000 as your ceiling before adding another WEC node.

Hardware minimums for a WEC server managing 2,000-4,000 endpoints:

| Resource | Minimum | Notes |
| --- | --- | --- |
| CPU | 4 cores | WecSvc and WinRM are multi-threaded |
| RAM | 16 GB | Each concurrent WinRM session holds connection state; 4,000 clients across 5-7 subscriptions can push WecSvc above 4 GB alone |
| Storage | Dedicated high-speed disk | 3,000+ IOPS write throughput; never share with the OS volume |

The storage point is worth emphasis. The `ForwardedEvents` log [default size is approximately 20 MB](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/wevtutil). Twenty megabytes. At 3,000 EPS that’s full in seconds. Relocate `ForwardedEvents.evtx` to a dedicated disk immediately, set the log to several gigabytes, and configure it to **archive when full** rather than overwrite. Archiving creates dated `.evtx` snapshots (`Archive-ForwardedEvents-2025-10-25.evtx`) rather than silently discarding older events.

### Scaling Beyond 4,000 Endpoints

WinRM’s Kerberos authentication breaks standard network load balancers. If a Service Principal Name (SPN) doesn’t match the actual hostname terminating the connection, authentication fails. This eliminates F5 and HAProxy as straightforward options.

The practical solution is AD-level distribution: partition your endpoint fleet across Active Directory security groups, each pointing to a distinct WEC server via GPO. An environment with 10,000 workstations and three WEC servers might look like this:

*   `WEF-Group-A` (3,334 computers) → GPO references `WEC-Server-01`
    
*   `WEF-Group-B` (3,333 computers) → GPO references `WEC-Server-02`
    
*   `WEF-Group-C` (3,333 computers) → GPO references `WEC-Server-03`
    

If a WEC server goes offline, only its subset of endpoints loses real-time forwarding. The endpoints buffer locally (up to your local event log size limit) and resume from their bookmark position when the server returns—no duplicate events, no permanent gaps.

* * *

**_Key Insight: WEF clients use a bookmarking mechanism to track the last successfully forwarded event. If a WEC server goes offline, clients buffer locally and resume exactly where they left off on reconnect. This means local event log size directly determines your recovery window. Size accordingly._**

* * *

For true redundancy, you can publish multiple WEC server URIs in a single GPO. Clients forward to all of them simultaneously. This doubles EPS load on your SIEM and requires deduplication logic—a real tradeoff that’s worth knowing before you reach for it reflexively.

## XPath Query Optimization

Windows endpoints are noisy. A domain controller running a standard audit policy generates process creation events (Event ID 4688), account logon events (Event ID 4624), and network connection events at rates that will exhaust an unoptimized WEC server within hours. Forwarding everything is not a strategy.

WEF uses a subset of the [W3C XPath 1.0 standard](https://learn.microsoft.com/en-us/windows/win32/wes/consuming-events) for filtering. Subscriptions support two XPath operators:

*   **`<Select>`**: Identifies events to collect from a specified log path
    
*   **`<Suppress>`**: Drops events that match, even if they matched a `<Select>` clause
    

If an event matches both Select and Suppress, Suppress wins. This is the basis of noise reduction.

### A Practical XPath Example

Collecting successful interactive logons while suppressing machine account and service account noise:

```
<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
      *[System[(EventID=4624)]]
      and
      *[EventData[Data[@Name='LogonType'] and (Data=2 or Data=7 or Data=10 or Data=11)]]
    </Select>
    <Suppress Path="Security">
      *[EventData[Data[@Name='TargetUserName']='SYSTEM']]
      or
      *[EventData[Data[@Name='TargetUserName']='LOCAL SERVICE']]
    </Suppress>
  </Query>
</QueryList>
```

### XPath Gotchas Worth Knowing

The WEF XPath engine has constraints that don’t apply in other XPath contexts:

**No regex, no wildcards.** You can’t use `*` for partial string matching or regular expressions for pattern matching. Exact string matches only.

**The** **`!=`** **operator is deceptive.** Because Windows events are XML documents with multiple `<Data>` nodes, `Data != 'SYSTEM'` evaluates to true if _any_ data node in the event doesn’t equal ‘SYSTEM’—which is almost always true. Use `<Suppress>` to exclude unwanted events rather than negation logic in `<Select>`.

**The 20-expression limit.** XPath expressions with more than 20 expressions require a structured XML query format rather than a simple XPath string. This is a parsing limit in the Windows XPath implementation, not an intentional design.

In practice, properly tuned XPath filters reduce event volume by 40-90% depending on the environment. That range reflects the difference between suppressing only the most egregious noise (conhost.exe, antivirus scanner activity) versus a full tuning exercise. Either end of that range meaningfully changes WEC server load and SIEM ingestion costs.

* * *

**_Pro Tip: Start your XPath tuning with process creation events (Event ID 4688) and firewall connection events—they generate the highest volume and have the most noise to suppress. In practice, removing known-safe system binaries from 4688 forwarding alone can cut your EPS by 30% in a typical enterprise environment._**

* * *

## SIEM Integration Architecture

The architectural payoff of WEF is what happens at SIEM integration time. Instead of maintaining proprietary SIEM agents on 500 endpoints, you maintain agents on a handful of WEC servers. The WEC becomes your telemetry hub.

Common integration patterns:

[**Microsoft Sentinel**](https://learn.microsoft.com/en-us/azure/sentinel/overview)**:** Install the [Azure Monitor Agent (AMA)](https://learn.microsoft.com/en-us/azure/azure-monitor/agents/azure-monitor-agent-overview) on the WEC server. On-premises WEC servers require [Azure Arc enrollment](https://learn.microsoft.com/en-us/azure/azure-arc/servers/overview) first. The Sentinel “Windows Forwarded Events” connector reads from the `ForwardedEvents` channel and pushes to a Log Analytics Workspace. AMA handles [up to 5,000 EPS](https://learn.microsoft.com/en-us/azure/azure-monitor/service-limits)—if your WEC receives more than that, the agent falls behind. XPath filtering upstream keeps you in range. The Azure Arc enrollment step catches many teams off guard—it’s not optional, and the setup is non-trivial on a hardened WEC server sitting in a restrictive network segment.

**Splunk:** A [Splunk Universal Forwarder](https://docs.splunk.com/Documentation/Forwarder) on the WEC server monitors the `ForwardedEvents` channel. Pre-filtering via XPath directly reduces Splunk licensing costs—which, given Splunk pricing, is the only part of this architecture your CFO will actually understand.

**NXLog / Chronicle:** [NXLog’s](https://nxlog.co/) `im_msvistalog` module reads `ForwardedEvents` and forwards in JSON, CEF, or syslog format to any compatible endpoint. For [Google Chronicle](https://cloud.google.com/chronicle/docs), the [Chronicle Forwarder](https://cloud.google.com/chronicle/docs/install/install-forwarder) receives the syslog output. Chronicle parses standard Windows events as `WINEVTLOG`—solid for standard event IDs, but verify your field mappings before going live if your subscriptions forward any custom application events.

**IBM QRadar:** [IBM WinCollect 10](https://www.ibm.com/docs/en/qradar-common?topic=10-wincollect-overview) installs on the WEC server and targets the `ForwardedEvents (WEF)` channel directly. [QRadar’s](https://www.ibm.com/docs/en/qradar-on-cloud) UI doesn’t support secondary XPath filtering on the ForwardedEvents channel through WinCollect, so your WEF subscription XPath filtering matters more here—it’s your only noise control valve.

* * *

**_Warning: The Azure Monitor Agent (AMA) has a hard ceiling of 5,000 EPS. If your WEC server is receiving more than that—common in environments where XPath filtering hasn’t been tuned—AMA will fall behind and create a growing backlog. Monitor the AMA performance counters before assuming your Sentinel ingestion is complete._**

* * *

## Operational Gotchas at Scale

A few issues appear specifically at enterprise scale that don’t show up in smaller deployments.

### The WinRM SDDL Bug (Windows Server 2016/2019)

On Windows Server 2019, Microsoft separated WinRM and WecSvc into distinct `svchost` processes on machines with more than 3.5 GB RAM. Windows Server 2016 is also affected if the services are manually moved to separate host processes. This isolation broke the default URL Access Control Lists, blocking WecSvc from accessing the HTTP listener and silently preventing endpoints from connecting.

Fix it with `netsh`:

```
netsh http delete urlacl url=http://+:5985/wsman/
netsh http add urlacl url=http://+:5985/wsman/ sddl=D:(A;;GX;;;S-1-5-80-569256582-2953403351-2909559716-1301513147-412116970)(A;;GX;;;S-1-5-80-4059739203-877974739-1245631912-527174227-2996563517)
```

The [SDDL](https://learn.microsoft.com/en-us/windows/win32/secauthz/security-descriptor-definition-language) (Security Descriptor Definition Language) strings grant execute permission to the WecSvc and WinRM service accounts by SID, bypassing the name-resolution failures that broke the default ACL.

Windows Server 2022 fresh installations don’t require this. Servers _upgraded_ from 2019 to 2022 may still need the fix.

### NETWORK SERVICE Can’t Read Security Logs

The WEF client runs as the `NETWORK SERVICE` account. This account has read access to Application and System logs but not to the Security log—which is where Event IDs 4624, 4625, 4688, and most of your high-value events live. If Security event forwarding silently fails or throws error `0x138C`, this is why.

Fix via GPO: add `NETWORK SERVICE` to the `Event Log Readers` local security group on all endpoints. Apply the GPO before you configure subscriptions.

### Registry Bloat from WEF Bookmarks

The WEC server stores a registry key for every unique FQDN that has ever connected—recording bookmark position and heartbeat state. In VDI environments or DHCP-heavy subnets where hostnames change frequently, this registry grows without bound and degrades WEC performance. Schedule a periodic cleanup script to prune stale registry entries for endpoints that haven’t connected in more than 30 days.

## What a Complete Enterprise Architecture Looks Like

Bringing it together for a 2,000-endpoint environment with security operations requirements:

*   **Subscription type:** Source-initiated, using AD security groups for access control
    
*   **Delivery mode:** Minimize Latency (30-second batching) for security-relevant subscriptions; Normal (15-minute) for operational/system logs
    
*   **WEC server:** 4-core CPU, 16+ GB RAM, dedicated high-speed disk; `ForwardedEvents` log at 10+ GB, archive-on-full mode
    
*   **XPath filtering:** Structured XML queries with `<Suppress>` clauses for high-volume benign events; targeting 40-60% reduction in raw EPS
    
*   **SIEM integration:** Single agent (AMA, Splunk UF, or NXLog) on the WEC server reading `ForwardedEvents`
    
*   **Local log sizing:** Security log on endpoints at 1-4 GB via GPO, providing buffer capacity during WEC server maintenance windows
    

At 5,000+ endpoints, add WEC nodes, distribute via AD group-based GPOs, and establish a monitoring baseline for WecSvc memory and disk queue length on each collector. When WecSvc memory climbs above 4 GB or disk queue length stays elevated, you’ve found your next capacity inflection point.

Windows Event Forwarding is one of the few places in enterprise IT where the native, built-in tooling legitimately outperforms the third-party alternatives at scale. The architecture isn’t complicated—but it does require understanding the capacity limits, the subscription model trade-offs, and the XPath filtering patterns before you deploy, not after your first event backlog.

Share this article

[Share on X](https://twitter.com/intent/tweet?url=https%3A%2F%2Fadamtheautomator.com%2Fwindows-event-collector-architecture%2F&text=Stop%20Silent%20Event%20Loss%20at%20Scale%20with%20Windows%20Event%20Collector)[Share on Facebook](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fadamtheautomator.com%2Fwindows-event-collector-architecture%2F)[Share on LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fadamtheautomator.com%2Fwindows-event-collector-architecture%2F)

## Related Posts

![](https://adamtheautomator.com/wp-content/uploads/2026/04/featured_image.webp)

### [7 Tips for an Efficient and Secure Active Directory Setup](/active-directory-setup-tips/)

Learn 7 essential best practices for setting up an efficient and secure Active Directory environment, from planning your structure and applying least-privilege

![](https://adamtheautomator.com/wp-content/uploads/2026/08/featured_image.webp)

### [Entra PIM vs. Delinea vs. CyberArk: Don’t Buy the Wrong PAM](/entra-pim-vs-delinea-cyberark/)

Entra PIM grants roles; Delinea and CyberArk vault credentials. Compare scope, session recording, audit evidence, and three-year cost.

![](https://adamtheautomator.com/wp-content/uploads/2026/07/featured_image-2.png)

### [Deploy PAWs with Microsoft Entra PIM](/deploy-paws-microsoft-entra-pim/)

Harden privileged access by pairing Microsoft Entra PIM with PAWs, Intune compliance, and Conditional Access so admin roles activate only from trusted devices.

## Categories

*   [IT Ops](/category/it-ops/)
*   [Cloud](/category/cloud/)
*   [DevOps](/category/devops/)
*   [Home Ops](/category/home-ops/)
*   [Information Security](/category/infosec/)
*   [Software Development](/category/software-development/)

## Site

*   [Home](/)
*   [Tutorials](/tutorials/)
*   [Instructors](/author/)
*   [Advertising](/advertising/)
*   [Recommended Resources](/resources/)
*   [About Adam](/about-adam/)

Copyright 2026© ATA Learning | [Privacy Policy](/privacy/)
