エラー ログ データベース — 多くのアプリ用
-
18-09-2019 - |
質問
現在、大量の既存のクライアント/サーバー アプリケーションが稼働しています。場合によっては、クライアントがデータの一部にアクセスするために、何らかの種類の Web インターフェイスを追加したい場合があります。これらは通常カスタムですが、一部は「汎用」です。ただし、誰もが独自の VM 内に独自の「インスタンス」を持っています。
私が必要としているのは、これらの VM で発生したエラーをキャプチャしてログに記録するための集中領域です。
新しいデータベースを作成し、これらの Web アプリのそれぞれが集中データベースとローカルの EventLog にログ エントリを作成できるようにする WCF サービスを設定することを検討しています。
それは悪いデザインですか?
アップデート
Web アプリは 2003/IIS6 および 2008/IIS7 上にあり、ASP.NET に組み込まれています。インスタンスの多くは Web サーバーのペア上にありますが、多くは個別の VM にデプロイされます。
解決
これがまさに私たちがそれを実装した方法です。
データベースには 3 つのテーブルがあります。
Event Types
------------
EventType int
EventDescription varchar(50)
MonitoredSystems
---------------
SystemID int
SystemName varchar(50)
SystemDescription text
Events
-------
RecordID bigint
EventTime datetime
SystemID int FK
EventText text
EventType int FK
Acknowledged bit
イベントを閲覧できるサイトも開設しました。「承認済み」フィールドでは、「未承認の重大な問題」という名前のビューを設定して、新しい問題をすぐに確認し、読んだときに承認できるようにします。
これを行うことができるツールが他にもあることは知っていますが、自社で開発したバージョンほど簡単に統合できるツールはありませんでした。現在、私たちは構築するすべてのアプリでこのツールを使用しています。ここでは言及しませんが、他のツールではすぐに提供されないカスタマイズがいくつかあります。
ですからあなたの考えはそれでいいと思います。自分で構築する場合は、希望どおりに動作するようにカスタマイズできます。ただし、少なくとも Log4net などのツールを検討することをお勧めします。
他のヒント
ELMAH (エラーログモジュールとハンドラー) を見てみる必要があります (http://code.google.com/p/elmah/) Orbit One の Exception Reporter (http://aspExceptionreporter.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=35343) これらを組み合わせると、一元的な場所でエラー報告を企業全体に適用できるようになります。
頻繁にログを記録する場合 (デバッグ/情報/警告)、RPC 呼び出しが非同期で行われるようにしてください。
より柔軟なデータ構造をお勧めします。
Events
-------
RecordID bigint
EventTime datetime
EventLevel text
SystemID text
EventText text
EventType text
Acknowledged bit
EventProperties
-------
RecordID bigint
key text
value text
EventProperties を使用すると、事前にそのようなプロパティを定義しなくても、ログ アプリケーションで役立つ可能性のある情報をログに記録できます。SystemID には制約がないため、構成せずにシステムを追加できることに注意してください。