过去几天我一直在使用 Log Parser,我们试图从域控制器的安全日志中保留特定的事件 ID。由于这些是高流量日志,其中的数据往往不会持续超过 15 到 30 分钟。因此,我需要每 10 分钟左右运行一次此查询作为计划任务,以确保我不会丢失任何数据。
我 (终于!) 设法进行了查询,该查询从具有相关事件 ID 的日志中提取相关数据,并将其写入 SQL 数据库。我遇到的问题是,如果我尝试提取 EventRecordID 属性(我可以在任何事件的 XML 中看到该属性),则 select 语句会失败并出现“未知字段”错误。
它确实会生成一个 RecordNumber;但是,这个数字似乎与查询有关,而不是事件记录本身。这意味着每次运行查询时,每个事件都有一个唯一的记录号,因此如果某个事件在多次连续运行后仍保留在日志中,则会多次写入数据库。
我怎样才能让它在数据库中仅记录一次通风口实例?
答案1
好吧,所以我不知道这个问题是否真的有答案。例如,RecordNumber 字段的文档/解释,或者为什么 Log Parser 无法读取 EventRecordID 字段。
然而,其中一个答案发布到这个 ServerFault 问题无论如何都能让我完成我需要做的事情。(我已对该答案投了赞成票,但 OP 尚未将其标记为解决方案)。
解决方案是使用检查点文件,该文件记录最后一次 Log Parser 查询运行,并且仅从指定日志中读取新条目。这不仅确保从日志中读取唯一记录(更重要的是写入数据库),而且还提高了查询效率。
关于检查点的一些信息深埋在这篇旧的 TechNet 文章,以及如何使用它的简洁描述这篇博文也。