有人知道 Windows 事件日志的效率如何吗?
我有一个场景,每分钟可以记录许多事件。
Windows 事件日志是否经过优化,可以处理大量事件?
例如就性能而言,它是否可以与 SQL Server 相媲美?
最后,是否可以将日志放入数据库?
答案1
Windows 事件日志足够强大,每秒可以处理许多事件,因此我是否使用事件日志取决于您谈论的事件数量(100 还是 100000)以及您需要对数据执行的具体操作。如果我只需要使用它来进行故障排除,那么事件日志就足够了,但如果我需要分析数据,我总是将其放入数据库或将其从事件日志中拉出并进行解析。有一些工具可以做到这一点,但如果您可以直接进入数据库,那么这是一个不必要的步骤。
我不确定确切的规格,但对于较轻的记录插入,事件日志应该比运行本地 SQL 服务器消耗更少的资源。就性能而言,我认为 SQL 服务器比事件日志要好得多。我相信事件日志也存储在内存中。
请记住,事件日志的大小也是有限的。如果您需要保留大量日志,则需要运行自动脚本来导出这些日志,并确保事件日志设置正确,以免丢失信息。如果事件日志已达到最大大小,则在清除之前不会保留任何日志。
事件日志可以记录到数据库或系统日志,但老实说我不建议这样做。
我建议您权衡您的选择,但如果您谈论的是繁重的交易,请考虑使用数据库。
答案2
几年前(当时 Windows 2000 Server 是最新版本),一位 Microsoft 顾问告诉我,事件日志系统每秒处理几个事件还不错,但记录数百个事件就不是什么好主意了(但它可能可以应付)。对于高日志量,Windows 事件跟踪 (ETW) 是更好的选择(但很难获得可操作的信息:无论是开发人员还是管理员)。
然而在 Vista/2008 中,事件系统被完全重新设计(支持更多日志,不会将每个日志的全部内容映射到内核内存中),因此良好的做法可能已经改变。
此外,.NET 和事件日志子系统现在也支持 ETW,因此学习曲线明显较低。
如果您正在登录到外部主机(如数据库),请考虑如何记录连接到该服务器的错误(即数据库不能是记录的唯一途径)。
您还需要考虑事件的消费者。如果没有有效的方法让某人检查状态或诊断问题以提取他们需要的信息,那么整个日志记录工作就失去了价值。
答案3
与其将事件日志存入数据库,不如事后将其导入。如果您需要高效查询数据,这可能是最佳选择。
答案4
对于根据标准查询和检索事件数据,它绝对无法与 SQL 相比,而且它也不是为此设计的。
有许多应用程序可以将事件数据转发到中央服务器。其中之一是 Snare: http://www.intersectalliance.com/projects/SnareWindows/index.html
Windows 2008/7/Vista 具有将事件转发到集中式“收集器”的集成功能,但这实际上不是数据库。以下是如何配置此功能的示例:
Windows 事件收集器
http://msdn.microsoft.com/en-us/library/bb427443%28v=vs.85%29.aspx
Windows 事件收集器设置源启动的订阅。
http://msdn.microsoft.com/en-us/library/bb870973(v=vs.85).aspx