我们目前有一个自定义日志系统。它是一个将日志推送到 Microsoft SQL Server 的 dll。这些日志可通过网页查看,并具有高级排序/过滤/分页/下载功能。我从头开始构建了这个系统,而且我是 Entity Framework 的新手,并且在 SQL 方面不是很强大。
一位同事坚持认为 Windows 事件日志是比 SQL Server 更好的选择,因为它可以节省带宽,因此速度更快。而且它是一个经过验证且真实的解决方案。
我质疑使用 Windows 事件日志来处理大量日志记录的实用性。目前,在 SQL 中,我们有一个日志表,其中包含从约 100 台不同机器、约 600 个应用程序接收到的约 1.5 亿条日志,总计约 90GB。
使用 Windows 事件日志对于此类负载来说是可行的解决方案吗?然后为管理服务器/用户创建一种无需中间 SQL 即可请求/排序/过滤/分页这些日志的方法?或者我只是因为构建了当前系统而被蒙蔽了?
其他信息
Log是单表Log(Id, AppId, Type, Lvl, Source, Msg, Time)
1.5 亿日志涵盖错误 7 天,其他所有日志涵盖 3 天
规范化源和消息会大大减小表的大小,因为存在许多重复消息。
对当前系统的最多提示是网页在请求日志时在某些应用程序上超时。超时仍然是 30 秒,日志总数限制为 10,000,此时您必须优化搜索。超时实际上只发生在平均日志数超过 800k 的应用程序上。其他应用程序平均最多 10 秒返回结果。
我正在对索引进行更改,并考虑过规范化表以提高效率,但这是一个持续的过程。如果 Windows 事件日志是一个更好的解决方案,那么我宁愿花时间实现它。
最佳答案
这是我个人的观点
分布式系统的 Windows 事件日志记录不是一个好主意。
您集中应用程序日志的想法很棒。这会帮助你做统计,你有备份机制,你可以使用sql server进行集群等等。
如果人们提示性能问题,也许是时候考虑优化您的解决方案了。也许是指数?看看什么可以被索引。确保 SQL Server 在使用 WHERE 条件时可以利用您的搜索参数 (SARGS)。
可以将数据拆分到多个表中吗?也许应该考虑标准化您的数据。
您还可以研究用户使用的预制过滤器,并使其可用并对其进行处理(性能)
这只是一个开始。可能有一些我们不知道且您不能透露的细节
关于c# - 事件日志实用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38508651/