c# - 事件日志实用性

标签 c# sql sql-server logging event-log

我们目前有一个自定义日志系统。它是一个将日志推送到 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/

相关文章:

php - 在MySQL中存储时间范围并判断当前时间是否在时间范围内

SQL子查询-有更好的方法吗

c# - 保存静态信息的表的名称是什么

sql - 如何优化此查询(OR 内部 AND 验证)?

python - 使用 python pyodbc 和 pandas 数据框将数据从 SQL Server 导出到 Excel

c# - 绘制垂直金字塔

c# - 如何在没有本地化的情况下在 C# 中获取日期

Java/Spring - 存储过程调用字符串的差异

c# - 使用 BinaryFormatter 而不是 protobuf-net 的原因

c# - ASP.NET 路由在内部是如何工作的?