我们正在使用 Windows 事件收集器 (WEF) 将定义的安全事件转发到特殊服务器。使用此解决方案几天后,在事件查看器中导航到“订阅”会导致加载数据超时一分钟。
答案1
根据MS 文档这是因为每个订阅都有大量的注册表项。(每个主机都是每个订阅的唯一密钥)
对于连接到 WEF 订阅的每台唯一设备,都会创建一个注册表项(对应于 WEF 客户端的 FQDN),用于存储书签和源心跳信息。如果不修剪这些信息以删除不活跃的客户端,这组注册表项可能会随着时间的推移增长到无法管理的大小。
如果订阅在其运行生命周期内有超过 1000 个 WEF 源与其连接(也称为生命周期 WEF 源),则在选择左侧导航栏中的订阅节点时,事件查看器可能会在几分钟内无响应,但之后将正常运行。如果生命周期 WEF 源超过 50,000 个,事件查看器将不再可用,必须使用 wecutil.exe(包含在 Windows 中)来配置和管理订阅。如果生命周期 WEF 源超过 100,000 个,则注册表将无法读取,并且可能需要重建 WEC 服务器。
可以通过拒绝在 EventSource 中为每个订阅创建子项来绕过此限制,以便即使有数千个主机和数十个订阅,事件查看器仍然能够响应。
$DenySubKeyWrite = New-Object -TypeName System.Security.AccessControl.RegistryAccessRule ("Everyone", "CreateSubKey", "Deny")
Foreach ($sub in (Get-Item -Path "HKLM:\\SOFTWARE\Microsoft\Windows\CurrentVersion\EventCollector\Subscriptions\*\EventSources"))
{
$tmpPath = $sub.Name.Replace("HKEY_LOCAL_MACHINE","HKLM:\")
$tmpACL = Get-ACL $tmpPath
$tmpACL.AddAccessRule($DenySubKeyWrite)
Set-ACL -Path $tmpPath -AclObject $tmpACL
}