【问题标题】:Is writing server log files to a database a good idea?将服务器日志文件写入数据库是个好主意吗?
【发布时间】:2010-09-22 08:42:38
【问题描述】:

看了an article about the subject from O'Reilly之后,想问问Stack Overflow对这件事的看法。

【问题讨论】:

  • 看到这个问题:stackoverflow.com/questions/209497/…>
  • 链接断开....

标签: database logging log-analysis log-files


【解决方案1】:

我会说不,因为相当大比例的服务器错误涉及与数据库通信的问题。如果数据库在另一台机器上,网络连接将是另一个无法记录的错误来源。

如果我要将服务器错误记录到数据库中,那么拥有一个在本地(写入事件日志或文件或其他内容)写入的备份记录器至关重要,以防数据库无法访问。

【讨论】:

  • 这是一个很好的观点。当然,您可以在登录前检查一切是否正常,但如果检查后发生了什么事呢?或者您如何处理检查后要记录的数据?至少从我所看到的来看,文章中没有提到两件事。
【解决方案2】:

本地写入磁盘,然后定期批量插入数据库(例如在日志翻转时)。在一个单独的、低优先级的过程中执行此操作。更高效、更健壮...

(顺便说一句,确保您的数据库日志表包含“日志事件来自哪台机器”的列 - 非常方便!)

【讨论】:

  • 这是否意味着数据库中的日志信息总是有点过时,因此主要用作存档而不是用于诊断最近出现的问题?
  • 当然,你可以尝试变得聪明——如果你记录了任何“严重”的东西,收集器/插入器可能会更早地刷新到数据库:)
  • 看起来很复杂
  • @Peri:远非复杂。如果您有合理数量的日志记录,您直接写入数据库的建议可能会对性能产生非常显着的影响。您真的不希望最终陷入无法添加更多诊断信息的情况,因为每个日志调用都将涉及数据库往返。
  • 有时,cmets 提供了很多关于该主题的见解!
【解决方案3】:

如果您希望将日志保存在数据库中,这可能不是一个坏主意,但如果您有很多日志文件条目,我会说不要遵循本文的建议。主要问题是我看到文件系统无法跟上来自繁忙站点的日志,更不用说数据库了。如果你真的想这样做,我会考虑在日志文件首次写入磁盘后将它们加载到数据库中。

【讨论】:

    【解决方案4】:

    考虑一个正确设置的数据库,它利用 RAM 进行读写?这比写入磁盘要快得多,并且不会出现您在为大量客户端提供服务时看到的磁盘 IO 瓶颈把手。

    我没有任何基准来证明这些数据,尽管我的最新应用程序正在使用数据库日志记录。如其中一个响应中所述,这将具有故障保护功能。如果无法创建数据库连接,请创建本地数据库(可能是 h2?)并写入该数据库。然后我们可以定期检查数据库连接,重新建立连接,转储本地数据库,并将其推送到远程数据库。

    如果您没有 H-A 网站,可以在非工作时间完成。

    我希望在未来的某个时候制定基准来证明我的观点。

    祝你好运!

    【讨论】:

      【解决方案5】:

      如果可以的话,登录到数据库并且它不会减慢您的数据库速度:)

      在数据库中查找任何内容比在日志文件中查找任何内容要快得多。特别是如果您提前考虑您将需要什么。登录 db 让我们像这样查询日志表:

      select * from logs
      where log_name = 'wcf' and log_level = 'error'
      

      然后在你发现错误之后你可以看到导致这个错误的整个路径

      select * from logs
      where contextId = 'what you get from previous select' order by timestamp
      

      如果您将其记录在文本文件中,您将如何获得此信息?

      编辑: 正如 JonSkeet 所建议的那样,如果我说应该考虑将日志记录到 db 异步,这个答案会更好。所以我声明它:) 我只是不需要它。例如如何做到这一点,您可以查看 Richard Kiessig 的“Ultra Fast ASP.NET”。

      【讨论】:

        【解决方案6】:

        如果数据库是生产数据库,这是一个可怕的想法。 您在备份、复制和恢复方面遇到问题。就像为数据库本身、副本(如果有)和备份提供更多存储空间。有更多时间设置和恢复复制,有更多时间验证备份,有更多时间从备份中恢复数据库。

        【讨论】:

        • 肯定有办法忽略备份中的某些表吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-27
        相关资源
        最近更新 更多