这个过程主要通过 Windows 内置的 事件转发 功能来实现,该功能基于 Windows 远程管理技术,是微软官方推荐的、现代且高效的日志收集方案。

下面我将为你提供一个详细的、分步的指南,从概念到实践,帮助你完成配置。
核心概念:事件转发
在开始配置前,理解以下三个核心角色非常重要:
- 源计算机:需要将其事件日志发送到日志服务器的计算机,可以是任何 Windows 客户端或服务器(Windows 7/8/10, Windows Server 2008 R2 及更高版本)。
- 收集器服务器:作为日志服务器,接收并存储来自源计算机的事件日志,通常是 Windows Server 版本(如 Windows Server 2025/2025/2025),因为它功能更强大、更稳定。
- 订阅:这是连接源计算机和收集器服务器的“规则”或“契约”,它定义了:
- 从哪些源计算机收集日志。
- 收集哪些事件日志(如应用程序、安全、系统)。
- 收集哪些特定的事件(所有登录失败事件)。
- 如何传输日志(实时传输或每天定时传输)。
配置步骤
我们将配置一个最常见和实用的场景:将一台 Windows Server 配置为收集器服务器,并收集一台或多台客户端计算机的“安全”日志。
第一步:在收集器服务器上配置
启用所需服务
确保收集器服务器上启用了以下 Windows 服务,它们是事件转发的基础。

- Windows 远程管理:这是用于远程通信的核心服务。
- 打开“服务器管理器” -> “管理” -> “添加角色和功能”。
- 在“功能”列表中,找到并勾选 “Windows 远程管理 (WinRM)”。
- 点击“安装”。
- 事件日志服务:此服务默认已启动,但需要确保其运行正常。
配置 WinRM 侦听器
为了让源计算机能够连接到收集器服务器,需要配置 WinRM 使用 HTTPS(推荐,更安全)或 HTTP。
推荐使用 HTTPS(安全方式):
-
在收集器服务器上,以管理员身份打开 PowerShell。
-
为 WinRM 创建一个自签名 SSL 证书。
(图片来源网络,侵删)New-SelfSignedCertificate -DnsName "LogCollectorServer.yourdomain.com" -CertStoreLocation "Cert:\LocalMachine\My"
注意:
DnsName应替换为你的收集器服务器的实际主机名或完全限定域名,在生产环境中,应使用由受信任的 CA 签名的证书。 -
获取上一步创建的证书的指纹。
$thumbprint = (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Subject -like "*LogCollectorServer*" }).Thumbprint $thumbprint -
使用该指纹创建 HTTPS 侦听器。
winrm create winrm/config/Listener?Address=*+Transport=HTTPS '@{CertificateThumbprint="$thumbprint"}'
简单使用 HTTP(不推荐用于生产环境):
如果你在内部网络中,为了方便,可以先配置 HTTP。请确保在生产环境中务必改回 HTTPS。
winrm quickconfig
这个命令会自动配置一个 HTTP 侦听器。
创建事件订阅
这是最关键的一步,我们使用 Windows PowerShell 来创建订阅。
- 以管理员身份打开 PowerShell(在收集器服务器上)。
- 创建一个 XML 文件来定义订阅的详细内容,我们可以使用
Create-ScheduledJobcmdlet 来简化这个过程,它会自动处理订阅的创建和凭证安全。
# 定义订阅名称
$subscriptionName = "SecurityLogsCollector"
# 定义要收集的源计算机列表(可以是单个或多个)
$sourceComputers = @("ClientPC01", "ClientPC02", "192.168.1.100")
# 定义要收集的日志和查询
# 这里的查询表示收集所有安全日志中 ID 为 4625(登录失败)的事件
$Query = "<QueryList><Query><Select Path='Security'>*[System[(EventID=4625)]]</Select></Query></QueryList>"
# 创建订阅
Register-WinEvtEventSubscription -SubscriptionId $subscriptionName -Locale en-US -ContentFormat XML -EventSources $sourceComputers -Query $Query -DeliveryMode Push -Force
命令解释:
-SubscriptionId:订阅的唯一名称。-Locale en-US:指定区域设置,影响事件消息的语言。-ContentFormat XML:日志以 XML 格式传输,保留最完整的信息。-EventSources:源计算机的数组。-Query:XPath 查询,用于精确筛选事件,你可以修改EventID来收集其他事件,4624(登录成功)、4688(进程创建)等。-DeliveryMode Push:实时推送日志,也可以使用Scheduled来定时拉取。
第二步:在源计算机上配置
源计算机需要信任收集器服务器,并允许 WinRM 连接。
启用 WinRM 服务
在每台源计算机上,以管理员身份运行 PowerShell,执行以下命令:
winrm quickconfig
这会自动启用 WinRM 服务并配置一个 HTTP 侦听器。
设置防火墙规则
确保源计算机的防火墙允许来自收集器服务器的 WinRM 流量。
- 自动设置(推荐):
winrm quickconfig命令通常会自动配置好防火墙规则。 - 手动设置:如果未自动配置,可以运行:
Enable-NetFirewallRule -Name "WINRM-HTTP-In-TCP"
如果你使用的是 HTTPS,则需要确保端口 5986(HTTPS WinRM)是开放的。
信任收集器服务器(可选但推荐)
为了增强安全性,可以配置源计算机只信任特定的收集器服务器。
- 在源计算机上,以管理员身份打开 PowerShell。
- 运行以下命令,将收集器服务器的计算机名添加到受信任的主机列表中。
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "LogCollectorServer.yourdomain.com" -Force
注意:
TrustedHosts是一个安全设置,使用 表示信任所有主机(非常不安全),仅适用于测试环境,在生产环境中,应明确指定收集器服务器的地址。
第三步:验证和查看日志
验证订阅状态
在收集器服务器上,运行以下命令检查订阅是否已成功创建并正在运行:
Get-WinEventEventSubscription
你应该能看到之前创建的 SecurityLogsCollector 订阅,Status 应为 Active。
查看收集到的日志
成功配置后,源计算机上的指定事件会开始出现在收集器服务器上。
- 打开 “事件查看器”(Event Viewer)。
- 在左侧窗格中,导航到 “应用程序和服务日志” -> “Microsoft” -> “Windows” -> “Eventlog-ForwardingPlugin”。
- 你会看到按源计算机名称分组的文件夹,里面包含了从源计算机转发过来的事件。
你也可以直接在“Windows 日志” -> “安全”中查看,但转发过来的事件通常会有一个来源标识,或者你也可以直接在“Eventlog-ForwardingPlugin”中查找,这样更清晰。
进阶配置与管理
-
管理订阅:
- 删除订阅:
Unregister-WinEvtEventSubscription -SubscriptionId "YourSubscriptionName" - 修改订阅:需要先删除,再重新创建。
- 删除订阅:
-
使用组策略部署: 对于企业环境,最佳实践是使用 组策略 来大规模部署事件订阅,这比手动在每台机器上配置要高效得多。
- 在组策略管理器中,创建一个新的 GPO。
- 计算机配置 -> 管理模板 -> Windows 组件 -> 事件转发。
- 你可以配置新的订阅、指定源计算机列表、设置查询等,这种方式更集中、更可控。
-
日志轮转和清理: 收集器服务器上的日志会不断增长,你需要设置日志的保留策略。
- 在“事件查看器”中,右键点击“Windows 日志” -> “安全” -> “属性”。
- 在“常规”选项卡下,可以设置“当日志达到大小时”的行为(如覆盖旧事件)。
- 也可以使用
wevtutil命令行工具进行更高级的配置。
常见问题排查
-
连接被拒绝:
- 检查源计算机和收集器服务器的防火墙设置。
- 确认 WinRM 服务在两端都已启动(
win qc查看)。 - 检查
TrustedHosts设置是否正确。
-
没有收到日志:
- 使用
Get-WinEventEventSubscription确认订阅状态为Active。 - 在源计算机上手动触发一个符合查询条件的事件(尝试用错误的密码登录),看是否能立即在收集器服务器上看到。
- 检查源计算机的事件日志中是否有与 WinRM 相关的错误事件。
- 使用
-
权限问题:
- 默认情况下,只有管理员可以创建和管理订阅,确保你使用的账户有足够权限。
- 确保用于传输的账户(通常是创建订阅时使用的账户)在源计算机上有“读取事件日志”的权限。
通过以上步骤,你就可以成功地在 Windows 环境中搭建一个功能完善的事件日志服务器,实现集中化日志管理,极大地提升安全运维和故障排查的效率。
