【问题标题】:Techniques for steming a possible flood of automatically generated e-mail when a website encounters errors当网站遇到错误时阻止自动生成的电子邮件泛滥的技术
【发布时间】:2010-10-06 19:42:12
【问题描述】:

对于我当前的 Web 开发项目,我正在实施一个后端系统,该系统将标记错误并自动向管理员发送一封电子邮件,其中包含有关所发生情况的详细信息。捕获错误并使用适当的错误信息生成电子邮件非常简单;但是当人们考虑某些错误类型时就会出现问题,尤其是当网站被频繁访问时。

考虑几个例子:

  1. 意外的数据库中断导致 Web 服务器上的所有脚本都无法连接。如果说数据库服务器需要 2 分钟(120 秒)才能重新联机,并且 Web 服务器以 10/秒的速率接收 唯一 请求,那么在数据库服务器花费的时间重新上线后,管理员的电子邮件将被 1200 封相同的电子邮件淹没,所有电子邮件都在抱怨连接到数据库失败。
  2. 脚本中的一个错误设法通过测试偷偷摸摸,并且是完全搞砸内容生成的各种错误,并且仅在特定情况下发生(例如每 100 个请求一次)。再次使用 10/秒的唯一请求率意味着管理员将每 10 秒收到关于相同错误的相同电子邮件,直到它被修复。

我可以使用哪些方法/策略来防止这种情况发生? (我只对监控脚本产生的错误感兴趣,基础设施问题超出了这个解决方案的范围)

我假设我几乎总是可以使用传递给set_error_handler 设置的错误处理程序回调的一些值的摘要来唯一地识别错误。

第一个可能也是最明显的解决方案是在数据库中记录,并且仅在自上次发生后经过合理的最短时间段后才发送电子邮件。这不是理想的方法,尤其是在数据库导致问题的情况下。另一种解决方案是在发生错误时将文件写入磁盘,并检查自上次修改文件以来是否经过了合理的最短时间段。 除了我描述的两种方法之外,还有什么机制可以解决这个问题吗?

【问题讨论】:

    标签: php email error-handling error-reporting


    【解决方案1】:

    为什么不简单地将它们全部发送出去,然后收集它们并将它们存储在接收端的数据库中。这样你就绕过了数据库是服务器问题的可能性。

    另外,在我看来,更大的优势是您不会随意丢弃有价值的取证数据。事后分析非常重要,任何类型的过滤都可能使其变得异常困难或不可能。

    【讨论】:

      【解决方案2】:

      您是否尝试过研究像 SiteScope 这样的监控软件?

      【讨论】:

      • 不是我真正想要的,因为我对内容生成错误比对基础设施更感兴趣。也许无法连接到数据库就是一个糟糕的例子。
      【解决方案3】:

      我所做的是监控错误日志,并每 5 分钟发送一次摘要。我想这是因为我的高质量代码(相对于一个不受欢迎的应用程序!),但我并没有受到太多麻烦:PI 基本上从头到尾读取日志文件,解析错误消息,并在时间戳

      这很好用。但是,如果您经常使用 POST,那么您可以通过将 apache 访问日志与 php 错误日志关联起来获得的信息量有限。我记得读过有关从 apache 中将 POST 记录到文件的模块,但不记得具体内容。

      但是,如果您愿意使用错误处理程序在某处进行写入,那可能是最好的,因为您可以访问更多信息。 ip、会话 id(以及任何可能影响设置的用户信息,如分页或其他)、函数参数(debug_backtrace 或其他任何内容)... 编写每个错误,仅在发生新错误时或在错误发生后发送消息已被确认(如果您愿意编写这样的系统)。

      【讨论】:

        【解决方案4】:

        您应该继续生成所需的任何日志文件。但与其自己发送电子邮件,不如将日志连接到像 Nagios 这样的监控系统。让监控解决方案决定何时提醒管理员以及多久提醒一次。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-08-19
          • 2017-06-24
          • 2018-07-26
          • 1970-01-01
          • 1970-01-01
          • 2011-09-30
          • 2011-02-02
          相关资源
          最近更新 更多