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