C# 检索筛选的远程事件日志的最快方法
我需要从一些服务器的C# 检索筛选的远程事件日志的最快方法,c#,windows,logging,.net-core,C#,Windows,Logging,.net Core,我需要从一些服务器的Security事件日志中检索一些事件日志(带有特定ID) 我已经对服务器循环进行了并行化,它工作得很好,速度也很快,但其中有两个具有巨大的保留策略(为完整注册表导出的EVTX文件超过10gb) 我使用如下循环获取日志: var eventIds=new[]{1,2,3,4} var eventIdQueryStr=string.Join(“or”,eventIds.Select(x=>$“EventID={x}”); var queryXPath=$“*[System[Ti
Security
事件日志中检索一些事件日志(带有特定ID)
我已经对服务器循环进行了并行化,它工作得很好,速度也很快,但其中有两个具有巨大的保留策略(为完整注册表导出的EVTX文件超过10gb)
我使用如下循环获取日志:
var eventIds=new[]{1,2,3,4}
var eventIdQueryStr=string.Join(“or”,eventIds.Select(x=>$“EventID={x}”);
var queryXPath=$“*[System[TimeCreated[@SystemTime>='{dateFrom:s}'和@SystemTime<'{dateTo:s}']]和*[System[{eventIdQueryStr}]]”;
使用var session=neweventlogsession(
服务器名,
领域,
用户,
密码,
SessionAuthentication.Default);
var eventsQuery=new EventLogQuery(“Security”,PathType.LogName,queryXPath){Session=Session};
使用(var logReader=neweventlogreader(eventsQuery))
{
for(var eventDetail=logReader.ReadEvent();
eventDetail!=null;
eventDetail=logReader.ReadEvent()
{
//事件列表是一个“ConcurrentBag”`
_eventList.Add(eventDetail);
/*其他与显示进度无关的内容,与流程速度无关*/
}
}
/*正在分析此处的事件列表。。。与问题无关*/
这是可行的,但速度非常慢。我通过VPN每小时为每台服务器(不包括解析,这就是为什么它在这里不相关)获得大约100万条记录(通过xpath查询过滤)
我知道Windows上的事件日志不是索引数据库,因此查询不会真正加快速度(只是过滤它们),但这是我能得到的最快速度(使用几种不同的技术,包括在远程服务器上转储整个注册表、复制文件和/或通过网络直接解析)
我有没有遗漏什么可以加快速度的东西
我已经在.NETCore3.0和.NETFramework4.8上对此进行了测试,结果没有任何差异。使用带有相同xpath查询的wevtutil
命令行(使用/q:
)可以获得类似的性能,但我无法想象这是最快的
特别是保留率高的服务器是具有大量空闲CPU和RAM的双xeon服务器,因此我非常肯定这不是硬件性能问题
如果有任何提示,我将不胜感激
PS:当我写“进度显示”部分时,它们是不相关的,因为我试图删除它们(以防万一输出进度是罪魁祸首),但过程速度没有相关差异