对于我当前的 Web 开发项目,我正在实施一个后端系统,该系统将标记错误并自动向管理员发送一封电子邮件,其中包含有关所发生事件的详细信息。捕获错误并使用适当的错误信息生成电子邮件非常简单;但是当人们考虑某些错误类型时会出现问题,特别是如果该站点被频繁访问。
考虑几个例子:
- 意外的数据库中断,导致 Web 服务器上的所有脚本都无法连接。如果说数据库服务器需要 2 分钟(120 秒)才能重新联机,并且 Web 服务器以 10/秒的速率接收唯一请求,那么在数据库服务器重新联机所需的时间内,管理员会发送电子邮件将被 1200 封相同的电子邮件淹没,所有这些电子邮件都在尖叫着无法连接到数据库。
- 某处脚本中的错误设法通过测试偷偷摸摸,并且是完全搞砸内容生成的各种错误,并且仅在特定的情况下发生(例如每 100 个请求一次)。再次使用 10/秒的唯一请求率意味着管理员将每 10 秒收到关于相同错误的相同电子邮件,直到它被修复。
我可以使用哪些方法/策略来防止这种情况发生?(我只对监控脚本产生的错误感兴趣,基础设施问题超出了这个解决方案的范围)
我将假设我几乎总是可以使用传递给set_error_handler设置的错误处理程序回调的一些值的摘要来唯一地识别错误。
第一个也可能是最明显的解决方案是在数据库中记录,并且仅在自上次发生后经过合理的最短时间后才发送电子邮件。这不是理想的方法,尤其是在数据库导致问题的情况下。另一种解决方案是在发生错误时将文件写入磁盘,并检查自上次修改文件以来是否经过了合理的最短时间段。除了我描述的两种方法之外,还有什么机制可以解决这个问题吗?