現在のWeb開発プロジェクトでは、エラーにフラグを付け、発生した内容の詳細を記載した電子メールを管理者に自動的に送信するバックエンドシステムを実装しています。エラーをトラップし、適切なエラー情報を含む電子メールを生成するのは非常に簡単です。ただし、特にサイトに頻繁にアクセスしている場合に、エラータイプの特定のグループを考慮すると、問題が発生します。
いくつかの例を考えてみましょう。
- Webサーバー上のすべてのスクリプトが接続できなくなる計画外のデータベース停止。データベースサーバーがオンラインに戻るのに2分(120秒)かかり、Webサーバーが10 /秒の速度で一意の要求を受信している場合、データベースサーバーがオンラインに戻るのにかかる時間内に管理者の電子メールデータベースへの接続の失敗について叫ぶ1200通の同一の電子メールが殺到するでしょう。
- スクリプトのバグは、テストによってなんとかこっそりと実行され、コンテンツの生成を完全に台無しにし、特定の状況でのみ発生するさまざまなものです(たとえば、100リクエストごとに1回)。一意のリクエストレートである10/秒を再度使用すると、管理者は、修正されるまで、同じバグについて10秒ごとに同じメールを受信することになります。
このシナリオの発生を防ぐために使用できるアプローチ/戦略は何ですか?(スクリプトによって生成されたエラーの監視にのみ関心があります。インフラストラクチャの問題はこのソリューションの範囲を超えています)
set_error_handlerによって設定されたエラーハンドラコールバックに渡された値の一部のダイジェストを使用して、ほとんどの場合、エラーを一意に識別できると想定します。
最初の、そしておそらく最も明白な解決策は、データベースに記録し、最後に発生してから妥当な最小期間が経過した場合にのみ電子メールを送信することです。これは、特にデータベースが問題を引き起こしている場合、理想的なアプローチではありません。別の解決策は、エラーが発生したときにファイルをディスクに書き込み、ファイルが最後に変更されてから妥当な最小期間が経過したかどうかを確認することです。私が説明した2つの方法以外に、この問題を解決するメカニズムはありますか?